Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jenkins在阶段级别上的后期操作受buildResult的影响_Jenkins_Jenkins Pipeline - Fatal编程技术网

Jenkins在阶段级别上的后期操作受buildResult的影响

Jenkins在阶段级别上的后期操作受buildResult的影响,jenkins,jenkins-pipeline,Jenkins,Jenkins Pipeline,在我的jenkins管道中,我在不同的阶段中有几个成功后操作,它们根据阶段结果(在成功案例中)定义环境变量。我也在使用并行和顺序阶段,但我不认为这会影响结果。以下是一段经过整理的摘录: stage('stage1') { agent { label 'agent1' } when { expression { return Jenkins.instance.getItem("${'job1'}&quo

在我的jenkins管道中,我在不同的阶段中有几个成功后操作,它们根据阶段结果(在成功案例中)定义环境变量。我也在使用并行和顺序阶段,但我不认为这会影响结果。以下是一段经过整理的摘录:

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