web-dev-qa-db-fra.com

Comment accéder à $ GIT_COMMIT dans la post-phase et l'emailext du pipeline déclaratif de Jenkins?

Je veux envoyer un e-mail lorsque les builds réussissent/échouent avec des informations Git utiles telles que la validation SHA, la précédente réussite SHA, le message de validation, etc. maintenant je reçois GIT_BRANCH is not supported in this context dans l'e-mail reçu. J'utilise Jenkins ver. 2.89.3. Mon script:

pipeline {
    agent { 
        ...
    }
    stages {
        stage('Checkout') {
            steps {
                sh 'printenv'
                checkout scm: [$class: 'GitSCM', branches: [[[name: '*/development']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [url: 'https://github.com/myrepo/']]]
                sh 'git submodule foreach --recursive \'git submodule sync\''
                sh 'git submodule update --init --recursive'
            }
        }
        stage('Build') {
            steps {
               ...         
            }
        }
    }
    post {
        success {
            sh 'printenv'
            emailext body: '$PROJECT_DEFAULT_CONTENT Commit message: ${FILE, path="commit_message.txt"}\nThis commit: ${GIT_COMMIT}Build URL: ${BUILD_URL}',
            recipientProviders: [[$class: 'DevelopersRecipientProvider'], [$class: 'CulpritsRecipientProvider'], [$class: 'RequesterRecipientProvider']],
            subject: 'Some subject'
        }
    }
}

Le printenv imprimera tout ce que j'attends, y compris le GIT_COMMIT, à la fois au stade de la "vérification" et après la réussite. Étant donné que je vais réutiliser ce script pour plus de 10 travaux Jenkins, je veux éviter d'ajouter un travail d'interface utilisateur manuel pour passer des paramètres et des choses.

J'ai essayé de déclarer l'environnement avant le stages mais je n'ai pas pu l'utiliser à partir du contexte de emailext:

agent {
    ...
}
environment {
    MY_GIT_COMMIT = "${GIT_COMMIT}"
}
stages {
    ...
}

Toute aide est appréciée. Merci d'avance.

5
Genki

Une autre façon de le faire est avec la substitution de commandes, ce travail pour nous:

post {
        success {
        sh  '''    
            echo "Commit $(git rev-parse HEAD)" | mail -s "Deployment completed successfully" [email protected]
            '''                  
        }
    }
1
Mario Jacobo

JENKINS-261 suggère

node {
    withCheckout(scm) {
         echo "GIT_COMMIT is ${env.GIT_COMMIT}"
    }
}
1
David van Laatum