Actuellement, mon pipeline échoue (rouge), lorsqu'un travail maven est instable (jaune).
node {
stage 'Unit/SQL-Tests'
parallel (
phase1: { build 'Unit-Tests' }, // maven
phase2: { build 'SQL-Tests' } // Shell
)
stage 'Integration-Tests'
build 'Integration-Tests' // maven
}
Dans cet exemple, le résultat du test unitaire du travail est instable, mais il apparaît comme ayant échoué dans le pipeline.
Comment puis-je modifier les travaux/pipeline/jenkins pour que (1) l'étape du pipeline soit instable au lieu d'échouer et (2) l'état du pipeline instable au lieu d'échouer.
J'ai essayé d'ajouter le MAVEN_OPTS
paramètre -Dmaven.test.failure.ignore=true
, mais cela n'a pas résolu le problème. Je ne sais pas comment envelopper le build 'Unit-Test'
dans une logique qui peut capturer et traiter le résultat.
Ajouter un sous-pipeline avec cette logique ne fait pas l'affaire, car il n'y a pas d'option pour extraire de Subversion (cette option est disponible dans un travail Maven normal). Je ne voudrais pas utiliser le paiement en ligne de commande si possible.
Quelle que soit l'étape instable ou échouée, le résultat final de la construction dans votre script sera échoué.
Vous pouvez ajouter propagate à false par défaut pour éviter l'échec du flux.
def result = build job: 'test', propagate: false
À la fin du flux, vous pouvez rendre le résultat final en fonction de ce que vous avez obtenu de la variable "résultat".
Par exemple
currentBuild.result='UNSTABLE'
Voici un exemple détaillé Comment définir le résultat de la construction actuelle dans Pipeline
Br,
Tim
Leçons apprises:
currentBuild.result
valeur qui peut être SUCCESS
, UNSTABLE
ou FAILURE
( source ).build job: <JOBNAME>
peut être stocké dans une variable. Le statut de génération est dans variable.result
.build job: <JOBNAME>, propagate: false
empêchera tout le build de tomber en panne immédiatement.currentBuild.result
ne peut qu'empirer . Si cette valeur était précédemment FAILED
et reçoit un nouveau statut SUCCESS
via currentBuild.result = 'SUCCESS'
il restera FAILED
Voici ce que j'ai finalement utilisé:
node {
def result // define the variable once in the beginning
stage 'Unit/SQL-Tests'
parallel (
phase1: { result = build job: 'Unit', propagate: false }, // might be UNSTABLE
phase2: { build 'SQL-Tests' }
)
currentBuild.result = result.result // update the build status. jenkins will update the pipeline's current status accordingly
stage 'Install SQL'
build 'InstallSQL'
stage 'Deploy/Integration-Tests'
parallel (
phase1: { build 'Deploy' },
phase2: { result = build job: 'Integration-Tests', propagate: false }
)
currentBuild.result = result.result // should the Unit-Test be FAILED and Integration-Test SUCCESS, then the currentBuild.result will stay FAILED (it can only get worse)
stage 'Code Analysis'
build 'Analysis'
}