groovy - scm - Cómo realizar acciones para compilaciones fallidas en Jenkinsfile
jenkinsfile parameters (2)
Actualmente también estoy buscando una solución a este problema. Hasta ahora, lo mejor que se me ha ocurrido es crear una función envoltura que ejecute el código de la tubería en un bloque try catch. Si también desea notificar el éxito, puede almacenar la excepción en una variable y mover el código de notificación a un bloque finally. También tenga en cuenta que debe volver a lanzar la excepción para que Jenkins considere que la compilación falló. Tal vez algunos lectores encuentren un enfoque más elegante para este problema.
pipeline(''linux'') {
stage ''Pull''
stage ''Deploy''
echo "Deploying"
throw new FileNotFoundException("Nothing to pull")
// ...
}
def pipeline(String label, Closure body) {
node(label) {
wrap([$class: ''TimestamperBuildWrapper'']) {
try {
body.call()
} catch (Exception e) {
emailext subject: "${env.JOB_NAME} - Build # ${env.BUILD_NUMBER} - FAILURE (${e.message})!", to: "[email protected]",body: "..."
throw e; // rethrow so the build is considered failed
}
}
}
}
¿Hay alguna manera de realizar la limpieza (o reversión) si la construcción en Jenkinsfile falló?
Me gustaría informar a nuestra instancia de Atlassian Stash que la compilación falló (haciendo un curl
en la URL correcta).
Básicamente sería un paso posterior cuando el estado de compilación está configurado para fallar.
¿Debería usar try {} catch ()
? Si es así, ¿qué tipo de excepción debería detectar?
Desde 2017-02-03, Declarative Pipeline Syntax 1.0 se puede usar para lograr esta funcionalidad posterior al paso de compilación.
Es una nueva sintaxis para construir Pipelines, que extiende Pipeline con una estructura predefinida y algunos nuevos pasos que permiten a los usuarios definir agentes, publicar acciones, configuraciones de entorno, credenciales y etapas.
Aquí hay una muestra de Jenkinsfile con sintaxis declarativa:
pipeline {
agent label:''has-docker'', dockerfile: true
environment {
GIT_COMMITTER_NAME = "jenkins"
GIT_COMMITTER_EMAIL = "[email protected]"
}
stages {
stage("Build") {
steps {
sh ''mvn clean install -Dmaven.test.failure.ignore=true''
}
}
stage("Archive"){
steps {
archive "*/target/**/*"
junit ''*/target/surefire-reports/*.xml''
}
}
}
post {
always {
deleteDir()
}
success {
mail to:"[email protected]", subject:"SUCCESS: ${currentBuild.fullDisplayName}", body: "Yay, we passed."
}
failure {
mail to:"[email protected]", subject:"FAILURE: ${currentBuild.fullDisplayName}", body: "Boo, we failed."
}
}
}
El bloque de código postal es lo que maneja esa acción de paso posterior
La referencia de la sintaxis de la tubería declarativa está aquí