管道执行两个作业:作业X和作业Y。 管道具有作业Y所需的选择参数。 选择参数选项:A,B和C。
工作Y具有3个条件:如果Choice == A,则执行任务1 否则,如果Choice == B,则执行任务2 否则执行任务3
在宣布职位Y的阶段的选择条件时陷入困境。
p.s。尝试过的Active Choice参数,无法使用它。
有人可以帮忙解决此问题的逻辑吗?
答案 0 :(得分:2)
我假设作业Y作为下游作业从您的管道中调用。因此,在某个地方(可能是管道的末端),您将拥有:
build job: 'CloudbeeFolder1/Path/To/JobY', propagate: false, wait: false, parameters: [[$class: 'StringParameterValue', name: 'MY_PARAM', value: "${env.SOME_VALUE}"]]
然后在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逻辑封装在批处理文件中,则可以在Jenkins文件中使用script {...}
块来使用脚本化管道。