J'ai un fichier Jenkins comme celui-ci:
pipeline { agent any options { buildDiscarder(logRotator(numToKeepStr: '7')) disableConcurrentBuilds() timeout(time: 10, unit: 'MINUTES') timestamps() } stages { stage('Admin') { steps { script { try { result = "FAIL" } catch(error) { result = "FAIL" } } } } stage('Normal') { steps { script { try { sh("echo 'hi'") } catch(error) { } } } } } }
Comment puis-je échouer à la première étape et l'afficher en rouge et faire continuer le pipeline pour plus d'étapes?
I ont regardé toutes les réponses SO pour cela et ne peuvent pas le faire fonctionner.
La configuration de result = "FAIL"
ne provoque pas l'échec de l'étape. Comment puis-je faire cela sans passer à l'étape suivante?
3 Réponses :
Vous pouvez marquer un état de construction comme ayant échoué en définissant une nouvelle valeur pour la variable globale jenkins currentBuild
. La variable a 3 états: SUCCESS
(vert), FAILURE
(rouge) et UNSTABLE
(jaune). Le catch
devrait empêcher la construction de se terminer afin que vous puissiez définir le statut de currentBuild
et continuer simplement.
try { //so something } catch(error) { //mark build as failed currentBuild.result = 'FAILURE' } }
Je pense que cela devrait travail. Malheureusement, je n'ai aucun moyen de valider ce guichet automatique. Si cela ne fonctionne pas, veuillez me le dire.
Cela marque l'échec de la construction mais ne me dit pas quelle étape a échoué.
Je pensais ainsi. Vous pouvez utiliser une commande «echo» avec un message d'erreur pour afficher qu'un échec s'est produit. D'un autre côté, vous pouvez toujours quitter le pipeline avec «exit 1» qui affichera également «l'échec en gras» sur l'interface graphique. Alors peut-être mettez votre autre étape dans catch () {} et utilisez la sortie 1 à la fin de catch ()?
Selon mes connaissances, nous pouvons mettre en œuvre la même chose que ci-dessous.
Utiliser l'action de script et le bloc try-catch
stage("example") { b = build(job: "example-job", propagate: false).result if(b == 'FAILURE') { echo "First job failed" currentBuild.result = 'FAILURE' // of FAILURE } } stage("test") { build("test-job") }
Vous pouvez utiliser propagate: false qui est disponible à l'étape de construction. Quelque chose comme ci-dessous
stage('someStage') { steps { script { try { //Do something } catch (err) { echo err } } echo currentBuild.result = 'FAILURE' } }
Liens:
https://jenkins.io/doc/pipeline/steps/pipeline-build -step /
https://medium.com/@Lenkovits/jenkins-pipelines-and-their-dirty-secrets-1-9e535cd603f4
Vous remarquerez que je n'utilise pas build et que l'étape 'sh' n'a pas de paramètre propogate
, j'en ai bien peur: jenkins.io/doc/pipeline/steps/workflow-durable-task-step/… < / a>
Voulez-vous afficher une étape "rouge" et toutes les autres (sans échec) "vertes"? Autant que je sache, ce n'est pas possible.
Voulez-vous savoir quelle étape échoue et laquelle fonctionne correctement? Eh bien, cela dépend de la façon dont vous voulez qu'il soit affiché
Le moyen le plus simple: comme suggéré dans une réponse précédente, vous pouvez utiliser "echo" pour l'imprimer dans la console
La méthode 'Je veux la pleine puissance': encapsulez un try-catch dans un autre try-catch et utilisez le signal "error":
stages { try { stage ('Normal') { try { /* Do your thing */ } catch (err) { /* Mark this stage as "failure" using error error 'Stage Normal failing' } } // stage 'Normal' } catch (err) { // here is the 'error' signal captured and omitted by now }
Stage Failing apparaît avec le texte "failed" affiché dans la case et dans un plus sombre rouge