我正在尝试在Jenkins脚本化管道中运行条件步骤,但是我不确定如何仅在上一步成功的情况下运行步骤。例如,在以下情况中,如果“测试”阶段成功,我只想运行“推送工件”阶段:
node ('docker2') { stage ('Build') { // build application } stage ('Test') { // run tests } stage ('Push Artifacts') { if (Tests Were Successful) { // push to artifactory } } }
我知道声明性管道允许您使用“后”条件,但是我对Jenkins中的声明性管道与脚本化管道的理解是,脚本化管道提供了更大的灵活性。有没有一种方法可以基于脚本管道中其他阶段的成功来运行阶段?
在詹金斯管道中没有成功步骤或失败步骤的概念。只有构建状态(成功,失败,不稳定等)
您可以通过两种方式解决问题:
第一。如果测试失败(使用“错误” jenkins步骤),则可以使管道失败。例如:
stage('Build') { // build application } stage('Test') { def testResult = ... // run command executing tests if (testResult == 'Failed') { error "test failed" } } stage('Push Artifacts') { //push artifacts }
或者,如果您的命令在测试失败时传播错误(例如“ mvn test”),则可以这样编写:
stage('Build') { // build application } stage('Test') { sh 'mvn test' } stage('Push Artifacts') { }
在这些情况下,如果测试失败,您的管道就会失败。“测试”阶段之后的任何阶段都不会执行。
第二。如果只想执行某些步骤,则应根据执行的步骤将测试结果写入变量。您可以在运行步骤之前分析该变量的值。例如:
stage('Build') { // build application } boolean testPassed = true stage('Test') { try{ sh 'mvn test' }catch (Exception e){ testPassed = false } } stage('Push Artifacts') { if(testPassed){ //push to artifactory } }