tutorial plugin example español ejecuciones disparadores jenkins jenkins-workflow jenkins-pipeline

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 a MAVEN_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 a MAVEN_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.