Jenkins在阶段级别上的后期操作受buildResult的影响
在我的jenkins管道中,我在不同的阶段中有几个成功后操作,它们根据阶段结果(在成功案例中)定义环境变量。我也在使用并行和顺序阶段,但我不认为这会影响结果。以下是一段经过整理的摘录:Jenkins在阶段级别上的后期操作受buildResult的影响,jenkins,jenkins-pipeline,Jenkins,Jenkins Pipeline,在我的jenkins管道中,我在不同的阶段中有几个成功后操作,它们根据阶段结果(在成功案例中)定义环境变量。我也在使用并行和顺序阶段,但我不认为这会影响结果。以下是一段经过整理的摘录: stage('stage1') { agent { label 'agent1' } when { expression { return Jenkins.instance.getItem("${'job1'}&quo
stage('stage1') {
agent {
label 'agent1'
}
when {
expression {
return Jenkins.instance.getItem("${'job1'}").isBuildable()
}
environment name: 'job0', value: 'success'
}
steps {
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
build job: 'job1'
}
}
post {
success {
script {
env.job1 = "success"
echo "job1: ${env.job1} !"
}
}
}
}
现在,每当构建结果在一个阶段内设置为FAILURE by catchError时,其他阶段中的所有post操作都不会评估相关的阶段结果,而是评估构建结果,这是我不想要的(我认为他们不应该这样做),指的是:
后段定义了管道或阶段运行完成后运行的一个或多个附加步骤(取决于后段在管道中的位置)
但是在我的例子中,在第一个错误之后,不再执行阶段级的成功后操作。。
到目前为止,我的解决方法是修改catcherror,添加一个设置另一个变量的失败后操作,该变量在最后一个阶段进行评估,以设置构建结果:
stage('stage1') {
steps {
catchError(buildResult: 'SUCCESS', stageResult: 'FAILURE') {
build job: 'job1'
}
}
post {
success { .. }
failure {
script {
env.testFail = "true"
echo "testFail: ${testFail} !"
}
}
}
}
..
stage('set buildResult') {
when {
environment name: 'testFail', value: 'true'
}
steps {
script {
bat '''
echo "testFail variable found. Changing buildresult to FAILURE."
exit 1
'''
}
}
}
文件中有我遗漏的东西吗,或者有人能证实这种行为吗?我将很感激删除我的变通方法,让catchError为我做所有的工作。
我已经搜索了官方文件和邮件列表,包括詹金斯问题,但在任何地方都没有找到关于这个问题的信息
这是我第一次参与stackoverflow,所以如果我犯了错误或者没有清楚地表达自己,请原谅我(离开只读模式)
詹金斯-v2.204.2
管道-v2.6
管道声明性-v1.8.4