plugin - jenkinsfile
¿Cómo implementar la etapa Post-Build utilizando el plugin Jenkins Pipeline? (3)
Después de leer el tutorial Jenkins que explica el complemento de Pipeline , parece que el complemento debería posibilitar la implementación de los pasos de Post-compilación . Sin embargo, la documentación es bastante limitada con respecto a las instrucciones específicas.
Por ejemplo, me pregunto cómo implementar:
- Ejecutar solo si la construcción tiene éxito
- Ejecutar solo si la construcción tiene éxito o es inestable
- Ejecutar independientemente del resultado de compilación
Ejecutar solo si la construcción tiene éxito
stage ''build'' ... build ... tests stage ''post-build'' ...
(O agregue
-Dmaven.test.failure.ignore=false
aMAVEN_OPTS
)Ejecutar solo si la construcción tiene éxito o es inestable
stage ''build'' ... build try { ... tests } catch { ... } stage ''post-build'' ...
(O agregue
-Dmaven.test.failure.ignore=true
aMAVEN_OPTS
)Ejecutar independientemente del resultado de compilación : ¿podría hacerse usando
try / catch / finally
?try { stage ''build'' ... } catch { ... } finally { stage ''post-build'' ... }
(He notado que el estado de compilación final se establece como SUCCESS aunque algunas etapas, es decir, ''compilación'', han fallado ya que se estableció en función de la última etapa. ¿ currentBuild.result = ''UNSTABLE''
significa que el estado de compilación final debe establecerse explícitamente, es decir, currentBuild.result = ''UNSTABLE''
?)
La mejor forma es usar acción post compilación en el script de interconexión.
Manejo de fallas
Declarative Pipeline admite el manejo robusto de fallas por defecto a través de su sección de publicación, lo que permite declarar una serie de diferentes "condiciones de publicación", tales como: siempre, inestable, éxito, falla y cambio. La sección Sintaxis de canalización proporciona más detalles sobre cómo usar las diversas condiciones de publicación.
Jenkinsfile (canal declarativo)
pipeline {
agent any
stages {
stage(''Test'') {
steps {
sh ''make check''
}
}
}
post {
always {
junit ''**/target/*.xml''
}
failure {
mail to: [email protected], subject: ''The Pipeline failed :(''
}
}
}
La documentación está debajo de https://jenkins.io/doc/book/pipeline/syntax/#post
Si está utilizando try / catch y desea que una construcción se marque como inestable o fallida, entonces debe usar currentBuild.result = ''UNSTABLE'', etc. Creo que algunos complementos como el complemento JUnit Report lo establecerán por usted si falla pruebas en los resultados junit. Pero en la mayoría de los casos, debe configurarlo usted mismo si está detectando errores.
La segunda opción si no desea continuar es volver a generar el error.
stage ''build''
... build
try {
... tests
} catch(err) {
//do something then re-throw error if needed.
throw(err)
}
stage ''post-build''
...
try-catch
bloques try-catch
se pueden configurar para manejar errores como en el código de aplicación real.
Por ejemplo:
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''
}
Y aquí hay un ejemplo de salida con dos interrupciones.
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
Por supuesto, esto funciona para cualquier excepción que ocurra durante la ejecución.