我希望在构建成功/失败时发送电子邮件以及一些有用的Git信息,例如提交SHA,以前成功的SHA,提交消息等。
我能够以旧的UI方式执行此操作,但现在我已经创建了声明性管道,现在我在收到的电子邮件中收到了GIT_BRANCH is not supported in this context
。我正在使用Jenkins 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 {
...
}
感谢任何帮助。提前谢谢。
答案 0 :(得分:1)
node {
withCheckout(scm) {
echo "GIT_COMMIT is ${env.GIT_COMMIT}"
}
}
答案 1 :(得分:0)
另一种方法是使用命令替换,这对我们有用:
post {
success {
sh '''
echo "Commit $(git rev-parse HEAD)" | mail -s "Deployment completed successfully" ADDRESS@EMAIL.COM
'''
}
}
答案 2 :(得分:-1)
您可以按照以下方式进行操作-尽管这可能不是声明性管道,但也许可以为您提供一些帮助-通过多分支管道设置...
node("my-node") {
withCredentials([string(credentialsId: 'my-credential-id', variable: 'MY_CREDENTIAL')]) {
def commitHash = checkout(scm).GIT_COMMIT
stage ("stage 1") {
// …
}
}
或在某个阶段(对我而言效果更好)
node("my-node") {
def scmVars
stage("stage-1") {
scmVars = git branch: env.BRANCH_NAME, credentialsId: 'my-git-credentials', url: 'https://myrepo.git'
commitHash = scmVars.GIT_COMMIT
}
}
我更喜欢一个阶段,因为checkout(scm).GIT_COMMIT
将获得目标分支的合并提交,而不是PR的最新提交