Dans notre travail Jenkins Pipeline, nous avons quelques étapes, et ce que j'aimerais, c'est si l'une des étapes échoue, alors arrêter la construction et ne pas continuer vers les étapes suivantes.
Voici un exemple d'une des étapes:
stage('Building') {
def result = sh returnStatus: true, script: './build.sh'
if (result != 0) {
echo '[FAILURE] Failed to build'
currentBuild.result = 'FAILURE'
}
}
Le script échouera et le résultat de la construction sera mis à jour, mais le travail se poursuivra aux étapes suivantes. Comment puis-je abandonner ou interrompre le travail lorsque cela se produit?
Fondamentalement, c'est ce que fait l'étape sh
. Si vous ne capturez pas le résultat dans une variable, vous pouvez simplement exécuter:
sh "./build"
Cela se fermera si le script contient un code de sortie différent de zéro.
Si vous devez d'abord effectuer des tâches et capturer le résultat, vous pouvez utiliser une étape Shell pour quitter le travail
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}"
}
}
Mais ce qui suit vous donnera la même chose, mais semble plus sensé à faire
stage('Building') {
try {
sh './build.sh'
} finally {
echo '[FAILURE] Failed to build'
}
}
Il est également possible d'appeler le retour dans votre code. Cependant, si vous êtes dans un stage
, il ne sortira que de cette étape. Alors
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"
ne quittera pas le travail, mais
stage('Building') {
def result = sh returnStatus: true, script: './build.sh'
}
if (result != 0) {
echo '[FAILURE] Failed to build'
currentBuild.result = 'FAILURE'
return
}
volonté.
Une autre façon d'obtenir ce comportement consiste à lever une exception. En fait, c'est exactement ce que Jenkins fait. De cette façon, vous pouvez également définir l'état de la génération sur ABORTED
ou FAILURE
. Cet exemple abandonne la génération:
stage('Building') {
currentBuild.rawBuild.result = Result.ABORTED
throw new hudson.AbortException('Guess what!')
echo 'Further code will not be executed'
}
Sortie:
[Pipeline] stage
[Pipeline] { (Building)
[Pipeline] }
[Pipeline] // stage
[Pipeline] End of Pipeline
ERROR: Guess what!
Finished: ABORTED
Depuis Jenkins v2, cela devrait également fonctionner
error('Failed to build')
Le travail se terminera par:
ERROR: Failed to build
Finished: ERROR