我想创建一个Jenkins(v2.126)声明性语法管道,该管道具有用when()子句检查环境变量值的阶段。具体来说,我想设置一个Jenkins作业参数(因此,“使用参数构建”,而不是管道参数),并由它确定是否执行了阶段。
我有这样的阶段代码:
stage('plan') {
when {
environment name: ExecuteAction, value: 'plan'
}
steps {
sh 'cd $dir && $tf plan'
}
}
参数名称为ExecuteAction。但是,当通过Job“ Choice”参数将ExecuteAction设置为:plan时,此阶段不会运行。通过添加以下调试阶段,我可以看到适当的值是通过环境变量传入的:
stage('debug') {
steps {
sh 'echo "ExecuteAction = $ExecuteAction"'
sh 'env'
}
}
然后我得到控制台输出,如下所示:
[Pipeline] stage
[Pipeline] { (debug)
[Pipeline] sh
[workspace] Running shell script
+ echo 'ExecuteAction = plan'
ExecuteAction = plan
[Pipeline] sh
[workspace] Running shell script
+ env
...
ExecuteAction=plan
...
我使用Jenkins book pipeline syntax中的when声明式语法,大约在页面的中间部分,内置条件为when。
Jenkins在Gnu / Linux上运行。
有什么主意我可能做错了吗?
答案 0 :(得分:1)
Du!您需要在when子句中引用环境变量的名称。
stage('plan') {
when {
environment name: 'ExecuteAction', value: 'plan'
}
steps {
sh 'cd $dir && $tf plan'
}
}
答案 1 :(得分:0)
我认为您需要使用 参数 ,而不是 环境 。请尝试以下操作:
when {
expression { params.ExecuteAction == 'plan' }
}