web-dev-qa-db-ja.com

Jenkins宣言型パイプラインのポストフェーズとemailextで$ GIT_COMMITにアクセスする方法

ビルドが成功または失敗したときに、コミットSHA、以前の成功したSHA、コミットメッセージなどの便利なGit情報とともにメールを送信したい今私はGIT_BRANCH is not supported in this context受信メール内。ジェンキンスver。を使っています。 2.89.3。私のスクリプト:

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'
        }
    }
}

printenvは、「チェックアウト」段階と成功後の両方で、GIT_COMMITを含め、私が期待するすべてのものを出力します。このスクリプトは10を超えるJenkinsジョブで再利用するため、パラメーターやものを渡すために手動のUI作業を追加することは避けたいです。

stagesの前に環境を宣言しようとしましたが、emailextのコンテキストからは使用できませんでした。

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

どんな助けでもありがたいです。前もって感謝します。

5
Genki

それを行う別の方法は、コマンド置換を使用することです。これは私たちにとってはうまくいきます:

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

JENKINS-261 提案

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