我是jenkins管道的新手,我正在定义一个声明性语法管道,我不知道我是否可以解决我的问题,因为我找不到解决方案.
在这个例子中,我需要将一个变量传递给ansible插件(在旧版本中我使用ENV_VAR或者使用inject插件从文件中注入它,该变量来自脚本.
这是我完美的风景(但它不起作用,因为环境{}):
pipeline {
agent { node { label 'jenkins-node'}}
stages {
stage('Deploy') {
environment {
ANSIBLE_CONFIG = '${WORKSPACE}/chimera-ci/ansible/ansible.cfg'
VERSION = sh("python3.5 docker/get_version.py")
}
steps {
ansiblePlaybook credentialsId: 'example-credential', extras: '-e version=${VERSION}', inventory: 'development', playbook: 'deploy.yml'
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试了其他方法来测试env vars在其他帖子中的工作方式,例如:
pipeline {
agent { node { label 'jenkins-node'}}
stages {
stage('PREPARE VARS') {
steps {
script {
env['VERSION'] = sh(script: "python3.5 get_version.py")
}
echo env.VERSION
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
但"echo env.VERSION"返回null.
还尝试了相同的例子: - VERSION = python3.5 get_version.py …
我想以某种方式将我在A阶段读到的变量传递给B阶段.我在一些例子中看到人们把它写到文件中,但我想这不是一个很好的解决方案.我尝试将它写入环境变量,但我并没有真正成功.如何正确设置?
为了使它工作,我尝试了很多东西,并且读到我应该使用""而不是'''来启动shell并将这些变量转义\${foo}
为例如.
以下是我作为管道的内容:
#!/usr/bin/env groovy
pipeline {
agent { node { label 'php71' } }
environment {
packageName='my-package'
packageVersion=''
groupId='vznl'
nexus_endpoint='http://nexus.devtools.io'
nexus_username='jenkins'
nexus_password='J3nkins'
}
stages{
// Package dependencies
stage('Install dependencies') {
steps {
sh '''
echo Skip composer installation
#composer install --prefer-dist --optimize-autoloader --no-interaction
'''
}
}
// Unit tests
stage('Unit Tests') {
steps {
sh '''
echo Running PHP code coverage tests...
#composer test
'''
}
}
// Create artifact
stage('Package') {
steps {
echo 'Create package …
Run Code Online (Sandbox Code Playgroud)