在我们的Jenkins Pipeline工作中,我们有两个阶段,我想要的是,如果其中任何一个阶段失败,那么停止构建,而不继续进行下一个阶段。
这是其中一个阶段的示例:
stage('Building') { def result = sh returnStatus: true, script: './build.sh' if (result != 0) { echo '[FAILURE] Failed to build' currentBuild.result = 'FAILURE' } }
该脚本将失败,并且生成结果将更新,但是作业将继续进行到下一个阶段。发生这种情况时,我该如何中止或停止工作?
基本上,这就是该sh步骤的作用。如果不将结果捕获到变量中,则可以运行:
sh
sh "./build"
如果脚本生成非零的退出代码,则将退出。
如果您需要先做一些事情,并且需要捕获结果,则可以使用Shell步骤退出工作
stage('Building') { def result = sh returnStatus: true, script: './build.sh' if (result != 0) { echo '[FAILURE] Failed to build' currentBuild.result = 'FAILURE' // do more stuff here // this will terminate the job if result is non-zero // You don't even have to set the result to FAILURE by hand sh "exit ${result}" } }
但是以下内容将为您带来相同的效果,但似乎更明智
stage('Building') { try { sh './build.sh' } finally { echo '[FAILURE] Failed to build' } }
也可以在代码中调用return。但是,如果您在内部stage,它将仅退出该阶段。所以
stage
stage('Building') { def result = sh returnStatus: true, script: './build.sh' if (result != 0) { echo '[FAILURE] Failed to build' currentBuild.result = 'FAILURE' return } echo "This will not be displayed" } echo "The build will continue executing from here"
不会辞职,但是
stage('Building') { def result = sh returnStatus: true, script: './build.sh' } if (result != 0) { echo '[FAILURE] Failed to build' currentBuild.result = 'FAILURE' return }
将。