56 votes

post équivalent dans le pipeline scripté ?

Quelle est la syntaxe de "post" dans un pipeline scripté par rapport à un pipeline déclaratif ? https://jenkins.io/doc/book/pipeline/syntax/#post

92voto

jayfah Points 716

Dans le cas d'un pipeline scripté, tout doit être écrit de manière programmatique et la plupart du travail est effectué dans l'espace de travail de l'utilisateur. finally bloc :

Jenkinsfile (Scripted Pipeline) :

node {
    try {
        stage('Test') {
            sh 'echo "Fail!"; exit 1'
        }
        echo 'This will run only if successful'
    } catch (e) {
        echo 'This will run only if failed'

        // Since we're catching the exception in order to report on it,
        // we need to re-throw it, to ensure that the build is marked as failed
        throw e
    } finally {
        def currentResult = currentBuild.result ?: 'SUCCESS'
        if (currentResult == 'UNSTABLE') {
            echo 'This will run only if the run was marked as unstable'
        }

        def previousResult = currentBuild.getPreviousBuild()?.result
        if (previousResult != null && previousResult != currentResult) {
            echo 'This will run only if the state of the Pipeline has changed'
            echo 'For example, if the Pipeline was previously failing but is now successful'
        }

        echo 'This will always run'
    }
}

https://jenkins.io/doc/pipeline/tour/running-multiple-steps/#finishing-up

7 votes

N'y a-t-il pas une meilleure façon de procéder ? Sommes-nous censés reproduire toute cette logique dans nos pipelines scriptés ?

0 votes

Merci de l'avoir souligné. C'est beaucoup de "bruit de code" à parcourir à chaque fois.

2 votes

Le bloc try peut-il encapsuler plusieurs étapes ? De cette façon, je n'aurais besoin de créer cette monstruosité qu'une seule fois pour l'ensemble du pipeline.

17voto

smelm Points 181

Vous pouvez modifier la solution de @jf2010 en utilisant des fermetures pour qu'elle soit un peu plus soignée (à mon avis).

try {
    pipeline()
} catch (e) {
    postFailure(e)
} finally {
    postAlways()
}

def pipeline(){
    stage('Test') {
        sh 'echo "Fail!"; exit 1'
    }
    println 'This will run only if successful'
}

def postFailure(e) {
    println "Failed because of $e"
    println 'This will run only if failed'

}

def postAlways() {
    println 'This will always run'
}

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