Instead of killing the whole job on a single failure we can capture the exit code of external programs, collect them and report at the end if one of them failed.
Collect exit code of commands
def commands = ["xyz", "abc", "pwd"]
def errors = ''
commands.each {
def res = sh(script: it, returnStatus: true)
println("cmd: $it res $res")
if (res !=0 ) {
errors += " $it"
}
}
//if (params.expected == 'Success') {
// sh "pwd"
//} else {
// sh "xyz"
//}
if (errors) {
error(errors)
}
{JENKINS+_URL}/pipeline-syntax/globals
examples/jenkins/experiment.jenkinsfile
pipeline {
agent { label 'master' }
parameters {
choice(choices: ['Success', 'Failure'], description: 'Expected status', name: 'expected')
}
stages {
stage('build') {
steps {
echo "Hello World!"
sh "pwd"
sh "printenv | sort"
println("Number: ${currentBuild.number}")
println("Result: ${currentBuild.result}")
println("Display name: ${currentBuild.displayName}")
println("Expected: ${params.expected}")
script {
//manager.addShortText("Foo Bar ${params.expected}")
//manager.addShortText("\nSome text", "black", "yellow", "0px", "white")
//currentBuild.displayName = "hello"
//currentBuild.description = "hello this is going to be a long line and I don't know what will happen now\nworld\nhow\nare\nyou"
def description = ""
description = "First\n"
description += "Second\n"
description += "Third\n"
description += "Fourth\n"
description += "Fifth\n"
description += "Sixth\n"
currentBuild.description = "${description}"
//manager.addBadge("star-gold.gif", "Successful build")
def commands = ["xyz", "abc", "pwd"]
def errors = ''
commands.each {
def res = sh(script: it, returnStatus: true)
println("cmd: $it res $res")
if (res !=0 ) {
errors += " $it"
}
}
//if (params.expected == 'Success') {
// sh "pwd"
//} else {
// sh "xyz"
//}
if (errors) {
error(errors)
}
}
}
}
}
post {
always {
echo "post always"
println("Number: ${currentBuild.number}")
println("Result: ${currentBuild.result}")
println("Display name: ${currentBuild.displayName}")
script {
text = "Result: ${currentBuild.result}"
}
println('----------')
println(currentBuild.getPreviousBuild())
println(currentBuild.getPreviousBuild().result)
println('----------')
}
success {
echo "post success"
echo text
}
failure {
echo "post failure"
}
}
}