我正在尝试在Jenkins脚本化管道中运行条件步骤,但是我不确定如何仅在上一步成功的情况下运行步骤。例如,在下面的示例中,如果“测试”阶段成功,我只想运行“推送工件”阶段:
node ('docker2') {
stage ('Build') {
// build application
}
stage ('Test') {
// run tests
}
stage ('Push Artifacts') {
if (Tests Were Successful) {
// push to artifactory
}
}
}
我知道声明性管道允许您使用“ post”条件,但是我对Jenkins中的声明性管道与脚本化管道的理解是,脚本化管道提供了更大的灵活性。有没有一种方法可以基于脚本管道中其他阶段的成功来运行阶段?
答案 0 :(得分:1)
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测试”),则您可以这样编写:
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
}
}