web-dev-qa-db-fra.com

Jenkins pipeline déclaratif conditionnel post action

J'utilise le pipeline déclaratif Jenkins et souhaite effectuer certaines actions après la construction en fonction du statut de la construction.

Pour être plus précis, je souhaite envoyer un courrier électronique lorsque l'état de la construction a changé (de succès en échec, de succès en instable ou d'échec en succès).

Voici mon pipeline:

pipeline {
    agent none
    stages {
        stage('test') {
            agent any
            steps {                
                sh './tests.sh'
            }
        }
    }
    post {
        changed {
            // Send different emails depending on build status
            // Success       -> anything else
            // Anything else -> Success
        }
    }
}

Une idée ?

6
Mikael Gibert

Pour les conditions d'écriture, vous pouvez définir vos propres méthodes. 

Par exemple, si vous souhaitez envoyer un courrier électronique uniquement lorsque le statut de la construction change:

def notifyStatusChangeViaEmail(buildStatus) {
    def status

    switch (buildStatus) {
        case 'SUCCESS':
            status = 'is now green again!'
            break

        case 'UNSTABLE':
            status = 'has become unstable..'
            break

        case 'FAILURE':
            status = 'has turned RED :('
            break
    }

    emailext (
        subject: "Job '${env.JOB_NAME}' ${status}",
        body: "See ${env.BUILD_URL} for more details",
        recipientProviders: [
            [$class: 'DevelopersRecipientProvider'], 
            [$class: 'RequesterRecipientProvider']
        ]
    )
}

pipeline {
    ...

    post {
        changed {
            // Will trigger only when job status changes: GREEN -> RED, RED -> GREEN, etc
            notifyStatusChangeViaEmail(currentBuild.currentResult)
        }
    }
}

Idéalement, vous voudriez également mettre la définition de la méthode notifyStatusChangeViaEmail dans votre bibliothèque de pipeline partagée afin qu'elle puisse être réutilisée dans d'autres travaux/pipelines.

9
Jonas Masalskis

Exemple: échec & instable au succès

if (currentBuild.result == 'SUCCESS') {  if(hudson.model.Result.FAILURE.equals(currentBuild.rawBuild.getPreviousBuild()?.getResult()) || hudson.model.Result.UNSTABLE.equals(currentBuild.rawBuild.getPreviousBuild()?.getResult())) {
SEND MAIL()
}
}

pour envoyer un email: https://jenkins.io/blog/2017/02/15/declarative-notifications/

0
Benathmane

Reportez-vous à ce pipeline:

post {
        success {
            emailext ( 
                subject: '${DEFAULT_SUBJECT}'+'SUCESSFUL', 
                body: '${DEFAULT_CONTENT}',
                to: '${EMAIL_RECIPIENTS}'
                );
                slackSend (color: 'good', message: ":csp_operational: ${env.JOB_NAME} - #${env.BUILD_NUMBER} Success (<${env.BUILD_URL}|Open>)");


        }
        failure {
            emailext ( 
                subject: '${DEFAULT_SUBJECT}'+'FAILED!', 
                body: '${DEFAULT_CONTENT}',
                to: '${EMAIL_RECIPIENTS}'
                );
                slackSend (color: 'danger', message: ":x: ${env.JOB_NAME} - #${env.BUILD_NUMBER} Failure (<${env.BUILD_URL}|Open>)");


        }

    }

Vous pouvez définir les paramètres de messagerie par défaut en utilisant Extended Email Plugin, Jenkins-> Configurer Jenkins -> Extended Email Configuration.

0
psalvi21