Jenkins Pipeline 使用选择参数检查条件的最佳方式
Jenkins Pipeline best way to use choice parameter for checking conditions
管道执行两个作业:Job X
和 Job Y
。
管道有一个选择参数,Job Y
需要它。
选择参数选项:A
、B
和 C
.
Job Y
有 3 个条件:
if Choice==A
然后做 task 1
else if Choice==B
然后做 task 2
else
做task 3
在 Job Y
阶段声明选择条件时卡住。
p.s。尝试了 Active Choice 参数,无法通过它。
任何人都可以帮助解决这个问题的逻辑吗?
我假设作业 Y 作为下游作业从您的管道中调用。因此,在某个地方(可能是管道的尽头)您将拥有:
build job: 'CloudbeeFolder1/Path/To/JobY', propagate: false, wait: false, parameters: [[$class: 'StringParameterValue', name: 'MY_PARAM', value: "${env.SOME_VALUE}"]]
然后在 "other side" 上的 JobY 中,您有:
environment {
PARAM_FROM_PIPELINE = "${params.MY_PARAM}"
}
这会将您的参数值获取到 JobY 中的环境变量中。
根据任务是什么,您可以通过传递 PARAM_FROM_PIPELINE
在批处理(或 sh)文件中执行它们,如下所示:
stages {
stage("Do Tasks") {
steps {
bat "mybatchfile.bat ${env.PARAM_FROM_PIPELINE}"
}
}
}
最后,在 mybatchfile.bat 中,您可以像这样读取 ${env.PARAM_FROM_PIPELINE}
的值:
@ECHO OFF
SET PARAM_VAL=%1
ECHO PARAM VALUE IS: %PARAM_VAL%
IF %PARAM_VAL% = "A" (
REM DO TASK1
) ELSE (
IF %PARAM_VAL% = "B" (
REM DO TASK2
) ELSE (
REM DO TASK3
)
)
如果您不想在批处理文件中封装 if-else 逻辑,您可以在 Jenkinsfile 中使用 script {...}
块来使用脚本管道。
管道执行两个作业:Job X
和 Job Y
。
管道有一个选择参数,Job Y
需要它。
选择参数选项:A
、B
和 C
.
Job Y
有 3 个条件:
if Choice==A
然后做 task 1
else if Choice==B
然后做 task 2
else
做task 3
在 Job Y
阶段声明选择条件时卡住。
p.s。尝试了 Active Choice 参数,无法通过它。
任何人都可以帮助解决这个问题的逻辑吗?
我假设作业 Y 作为下游作业从您的管道中调用。因此,在某个地方(可能是管道的尽头)您将拥有:
build job: 'CloudbeeFolder1/Path/To/JobY', propagate: false, wait: false, parameters: [[$class: 'StringParameterValue', name: 'MY_PARAM', value: "${env.SOME_VALUE}"]]
然后在 "other side" 上的 JobY 中,您有:
environment {
PARAM_FROM_PIPELINE = "${params.MY_PARAM}"
}
这会将您的参数值获取到 JobY 中的环境变量中。
根据任务是什么,您可以通过传递 PARAM_FROM_PIPELINE
在批处理(或 sh)文件中执行它们,如下所示:
stages {
stage("Do Tasks") {
steps {
bat "mybatchfile.bat ${env.PARAM_FROM_PIPELINE}"
}
}
}
最后,在 mybatchfile.bat 中,您可以像这样读取 ${env.PARAM_FROM_PIPELINE}
的值:
@ECHO OFF
SET PARAM_VAL=%1
ECHO PARAM VALUE IS: %PARAM_VAL%
IF %PARAM_VAL% = "A" (
REM DO TASK1
) ELSE (
IF %PARAM_VAL% = "B" (
REM DO TASK2
) ELSE (
REM DO TASK3
)
)
如果您不想在批处理文件中封装 if-else 逻辑,您可以在 Jenkinsfile 中使用 script {...}
块来使用脚本管道。