You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在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

火山引擎 最新活动