如何在Jenkinsfile中实现构建失败时通知触发构建的Git提交者
实现Jenkins构建失败后通知对应Git提交者的方法
我刚好做过类似的需求,分享一下具体的实现思路和代码示例,亲测可行!核心逻辑就是在流水线中动态捕获触发构建的Git提交者邮箱,然后在构建失败的后置阶段把这个邮箱传入通知的to字段。
1. 动态获取Git提交者邮箱
有两种可靠的方式拿到提交者的邮箱,按需选择:
- 方式一:用Jenkins内置环境变量
如果你的Jenkins配置正常,触发本次构建的提交者邮箱会自动被注入到环境变量GIT_COMMITTER_EMAIL里,直接拿来用就行。 - 方式二:用Git命令手动提取(更稳妥)
怕环境变量缺失的话,可以在拉取代码后执行Git命令,获取最后一次提交的邮箱:
这个命令会返回纯邮箱地址,def committerEmail = sh( script: 'git log -1 --pretty=format:"%ce"', returnStdout: true ).trim()trim()是为了去掉多余的换行和空格。
2. 构建失败时发送通知
用Jenkins Pipeline的post阶段来做后置处理,指定failure条件下执行通知逻辑。下面是完整的Jenkinsfile示例,以邮件通知为例,也可以适配企业微信、钉钉等工具:
完整Jenkinsfile代码
pipeline { agent any environment { // 提前定义变量存提交者邮箱 COMMITTER_EMAIL = '' } stages { stage('拉取代码') { steps { checkout scm script { // 获取提交者邮箱并赋值给环境变量 COMMITTER_EMAIL = sh( script: 'git log -1 --pretty=format:"%ce"', returnStdout: true ).trim() echo "本次构建的提交者邮箱:${COMMITTER_EMAIL}" } } } stage('构建项目') { steps { // 替换成你的实际构建命令,比如mvn clean install、npm run build sh 'your-build-command-here' } } // 可以添加测试、部署等其他阶段... } post { failure { script { // 邮件通知示例(需要先安装Jenkins的Email Extension插件) emailext( to: COMMITTER_EMAIL, subject: "构建失败:${JOB_NAME} #${BUILD_NUMBER}", body: """ 项目名称:${JOB_NAME} 构建编号:${BUILD_NUMBER} 提交者邮箱:${COMMITTER_EMAIL} 构建状态:失败 日志地址:${BUILD_URL}console """.stripIndent() ) // 如果是企业微信/钉钉通知,也可以在这里调用对应API,比如: // sh "curl -X POST '你的机器人webhook地址' -H 'Content-Type: application/json' -d '{\"text\":{\"content\":\"构建失败:${JOB_NAME} #${BUILD_NUMBER},请${COMMITTER_EMAIL}查看日志\"}}'" } } } }
3. 注意事项
- 确保
checkout scm步骤已经执行,不然Git命令没法读取仓库的提交信息。 - 如果用邮件通知,要提前安装并配置好Jenkins的Email Extension Plugin,保证邮件服务器能正常发信。
- 如果是合并请求触发的流水线(比如GitHub PR、GitLab MR),可以调整Git命令来获取PR提交者的邮箱,比如GitLab场景可以用:
COMMITTER_EMAIL = sh( script: 'git log origin/$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME -1 --pretty=format:"%ce"', returnStdout: true ).trim()
内容的提问来源于stack exchange,提问作者user2835563




