59 votes

Comment mettre en œuvre de Post-Build scène à l'aide de Jenkins Pipeline plug-in?

Après la lecture de Jenkins tutoriel expliquant Pipeline plug-in, il semble que le plug-in doit permettre la mise en œuvre Post-Construire les étapes. Toutefois, la documentation est assez limité en ce qui concerne les instructions spécifiques.

Par exemple, je me demande comment mettre en œuvre:

  • Exécuter uniquement si l'génération réussit
  • Exécuter uniquement si l'génération réussit ou est instable
  • Exécuter, indépendamment de construire résultat
  • Exécuter uniquement si l'génération réussit

    stage 'build'
    ... build
    ... tests
    stage 'post-build'
    ...
    

    (Ou ajoutez - -Dmaven.test.failure.ignore=false de la MAVEN_OPTS)

  • Exécuter uniquement si l'génération réussit ou est instable

    stage 'build'
    ... build
    try {
        ... tests
    } catch {
        ...
    }
    stage 'post-build'
    ...
    

    (Ou ajoutez - -Dmaven.test.failure.ignore=true de la MAVEN_OPTS)

  • Exécuter, indépendamment de construire résultat - pourrait-il être fait en utilisant try / catch / finally ?

    try {
        stage 'build'
        ...
    } catch {
        ...
    } finally {
        stage 'post-build'
        ...
    }
    

(J'ai remarqué que la version finale statut est défini comme le SUCCÈS , même si certains stades, à savoir. la "construction", ont échoué car elle basée sur la dernière étape. Cela signifie finale construire statut devez définir explicitement, c'est à dire.currentBuild.result = 'UNSTABLE'? )

55voto

La meilleure façon est d'utiliser des post-construction de l'action dans le pipeline de script.

La Manipulation Des Échecs
Déclarative Pipeline soutient robuste échec la manipulation par défaut par l'intermédiaire de sa section de poteau qui permet de déclarer une certain nombre de différents "post conditions" telles que: toujours, instable, le succès, l'échec, et de les modifier. Le Pipeline de la Syntaxe section fournit des plus de détails sur la façon d'utiliser les différents post conditions.

Jenkinsfile (Déclarative 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 ci-dessous https://jenkins.io/doc/book/pipeline/syntax/#post

5voto

DanielD Points 316

Si vous utilisez try/catch et que vous voulez une génération d'être marqué comme instable ou pas alors vous devez utiliser currentBuild.résultat = 'INSTABLE' etc. Je crois que certains plugins comme JUnit Rapport plugin sera réglé pour vous si il trouve échec de tests junit résultats. Mais dans la plupart des cas, vous devez définir votre auto si vous êtes à la capture 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'
...

2voto

allprog Points 9189

try-catch blocs peuvent être mis en place pour gérer les erreurs dans le code de l'application.

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 passe lors de l'exécution.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X