gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 06:16:25 29 4
gpt4 key购买 nike

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

在这个例子中,我需要将一个变量传递给ansible插件(在旧版本中我使用ENV_VAR或使用注入(inject)插件从文件中注入(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'
}
}
}
}

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

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- VERSION=python3.5 get_version.py > props.file(并尝试注入(inject)它,但没有找到如何注入(inject))

如果这是不可能的,我将以 ansible 角色来完成。

更新

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

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

最佳答案

您可以在管道 block 启动之前创建变量。您可以让 sh 返回 stdout 来分配给这些变量。您没有同样的灵 active 来分配 environment 节中的环境变量。因此,请替换为 python3.5 get_version.py ,其中我在此处的脚本中有 echo 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').trim()
}
}
}
stage('output_version') {
steps {
echo "awesomeVersion: ${awesomeVersion}"
}
}
}
}

上述管道的输出是:

awesomeVersion: 0.0.1

关于Jenkinsfile 声明式管道定义动态环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43879733/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com