Jenkinsfile声明性管道定义了动态环境变量

我是詹金斯管道技术的新手。我正在定义一个声明性语法管道,但我不知道是否可以解决我的问题,因为我没有找到解决方案。

在此示例中,我需要将变量传递给ansible插件(在旧版本中,我使用ENV_VAR或使用inject plugin将其从文件中注入),该变量来自脚本。

这是我的理想情况(但由于环境{}而无法使用):

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'

}

}

}

}

我尝试了其他方法来测试环境变量在其他文章中的工作方式,例如:

pipeline {

agent { node { label 'jenkins-node'}}

stages {

stage('PREPARE VARS') {

steps {

script {

env['VERSION'] = sh(script: "python3.5 get_version.py")

}

echo env.VERSION

}

}

}

}

但“ echo env.VERSION”返回null。

还尝试了以下示例:-VERSION python3.5 get_version.py = python3.5

get_version.py-VERSION = > props.file(并尝试注入它,但没有找到方法)

如果这不可能,那么我将扮演角色。

Ansible插件中还有另一个“问题”,要在额外的var中使用var,它必须有双引号而不是单引号。

ansiblePlaybook credentialsId: 'example-credential', extras: "-e version=${VERSION}", inventory: 'development', playbook: 'deploy.yml'

回答:

您可以在管道块开始之前创建变量。您可以将shreturn

stdout分配给这些变量。在environment节中分配环境变量的灵活性不同。因此,请替换python3.5

get_version.pyecho 0.0.1在脚本中的位置(并确保您的python脚本只将版本返回到stdout):

def awesomeVersion = 'UNKNOWN'

pipeline {

agent { label 'docker' }

stages {

stage('build') {

steps {

script {

awesomeVersion = sh(returnStdout: true, script: 'echo 0.0.1')

}

}

}

stage('output_version') {

steps {

echo "awesomeVersion: ${awesomeVersion}"

}

}

}

}

上述管道的输出为:

awesomeVersion: 0.0.1

以上是 Jenkinsfile声明性管道定义了动态环境变量 的全部内容, 来源链接: utcz.com/qa/399179.html

回到顶部