Comment mettre en œuvre l'étape de post-construction en utilisant le plug-in de Jenkins Pipeline?
Après la lecture de Jenkins tutoriel expliquer Pipeline plug-in, il semble que le plug-in permettent de mettre en oeuvre Post-Build les étapes. Toutefois, la documentation est plutôt limitée en ce qui concerne les instructions spécifiques.
Par exemple, je me demande comment mettre en place:
- Exécuter seulement si construire réussit
- Exécuter seulement si construire réussit ou est instable
- courir indépendamment de construire résultat
Exécuter seulement si construire réussit
stage 'build' ... build ... tests stage 'post-build' ...
(Ou ajouter
-Dmaven.test.failure.ignore=false
MAVEN_OPTS
)Exécuter seulement si construire réussit ou est instable
stage 'build' ... build try { ... tests } catch { ... } stage 'post-build' ...
(Ou ajouter
-Dmaven.test.failure.ignore=true
MAVEN_OPTS
)exécuter quel que soit le résultat de la compilation - pourrait-il être fait à l'aide de <!--7 ?
try { stage 'build' ... } catch { ... } finally { stage 'post-build' ... }
(j'ai remarqué que l'état final de construction est défini comme SUCCESS même si certaines étapes, c'est à dire. "construire", ont échoué comme il s'est fixé sur la dernière étape. Cela signifie finale construire statut devez définir explicitement, c'est à dire.<!--8? )
3 réponses
La meilleure façon est d'utiliser l'action de post build dans le script de pipeline.
Managing Failures
Un Pipeline déclaratif soutient une défaillance robuste gestion par défaut via sa section post qui permet de déclarer un nombre de différentes "conditions de poste" telles que: toujours, instable, le succès, l'échec, et de les modifier. La section Syntaxe du Pipeline fournit plus de détails sur la façon d'utiliser les différents post conditions.
Jenkinsfile (Declarative Pipeline)
pipeline {
agent any
stages {
stage('Test') {
steps {
sh 'make check'
}
}
}
post {
always {
junit '**/target/*.xml'
}
failure {
mail to: team@example.com, subject: 'The Pipeline failed :('
}
}
}
la documentation est ci-dessous https://jenkins.io/doc/book/pipeline/syntax/#post
si vous utilisez try / catch et que vous voulez qu'une compilation soit marquée comme unstable ou failed, alors vous devez utiliser currentBuild.result = 'UNSTABLE' etc. Je crois que certains plugins comme le plugin de rapport JUnit vous le définiront s'il trouve des tests échoués dans les résultats de junit. Mais dans la plupart des cas, vous devez le régler vous-même si vous attrapez des erreurs.
La deuxième option si vous ne voulez pas continuer à relever de l'erreur.
stage 'build'
... build
try {
... tests
} catch(err) {
//do something then re-throw error if needed.
throw(err)
}
stage 'post-build'
...
try-catch
les blocs peuvent être configurés pour gérer les erreurs comme dans le code d'application réel.
Par exemple:
try {
node {
sh 'sleep 20' // <<- can abort here
}
} catch (Exception e) {
println 'catch'
} finally {
println 'finally'
}
node {
println 'second'
}
try {
node {
sh 'sleep 20' // <<- can abort here again
}
} catch (Exception e) {
println 'catch'
} finally {
println 'finally'
}
Et voici un exemple de sortie avec deux abandons.
Started by user me
Replayed #3
[Pipeline] node
Running on my-node in /var/lib/jenkins-slave/workspace/my-job
[Pipeline] {
[Pipeline] sh
[my-job] Running shell script
+ sleep 20
Aborted by me
Sending interrupt signal to process
/var/lib/jenkins-slave/workspace/my-job@tmp/durable-9e1a15e6/script.sh: line 2: 10411 Terminated sleep 20
[Pipeline] }
[Pipeline] // node
[Pipeline] echo
catch
[Pipeline] echo
finally
[Pipeline] node
Running on my-node in /var/lib/jenkins-slave/workspace/my-job
[Pipeline] {
[Pipeline] echo
second
[Pipeline] }
[Pipeline] // node
[Pipeline] node
Running on my-node in /var/lib/jenkins-slave/workspace/my-job
[Pipeline] {
[Pipeline] sh
[my-job] Running shell script
+ sleep 20
Aborted by me
Sending interrupt signal to process
/var/lib/jenkins-slave/workspace/my-job@tmp/durable-d711100c/script.sh: line 2: 10416 Terminated sleep 20
[Pipeline] }
[Pipeline] // node
[Pipeline] echo
catch
[Pipeline] echo
finally
[Pipeline] End of Pipeline
Finished: ABORTED
bien sûr, cela fonctionne pour toutes les exceptions qui se produisent pendant l'exécution.