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=falseMAVEN_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=trueMAVEN_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? )

32
demandé sur luka5z 2016-04-15 18:39:37

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

23
répondu Mohamed Thoufeeque 2017-08-03 06:27:05

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'
...
4
répondu DanielD 2016-06-21 17:30:58

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.

1
répondu allprog 2016-11-07 14:58:27