You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Jenkins Pipeline邮件通知中添加构建原因信息?

在Jenkins Pipeline邮件中添加构建原因的实现方法

我刚好做过类似的需求,给你分享几个实用的技巧,能轻松把构建触发人、Git提交备注这些关键信息加到邮件通知里:

1. 核心思路:利用Jenkins内置对象和Git命令获取信息

Jenkins的currentBuild对象存储了构建的所有上下文信息,结合Git命令就能拿到我们需要的内容,再通过常用的emailext邮件插件把这些信息插入到邮件模板里。

2. 具体实现代码示例

下面是完整的Groovy Pipeline脚本片段,包含了获取触发人、构建原因、Git提交备注的逻辑,以及邮件通知的部分:

pipeline {
    agent any
    stages {
        stage('Checkout') {
            steps {
                script {
                    // 执行git命令获取最近一次提交的备注和作者
                    gitCommitInfo = sh(
                        script: 'git log --oneline -1 --pretty=format:"提交备注: %s | 提交人: %an"',
                        returnStdout: true
                    ).trim()
                }
            }
        }
        // 你的其他构建阶段(编译、测试、打包等)...
    }
    post {
        always {
            script {
                // 1. 获取构建触发人
                def triggerUser = "未知触发人"
                def userIdCause = currentBuild.rawBuild.getCause(hudson.model.Cause.UserIdCause)
                if (userIdCause) {
                    triggerUser = userIdCause.getUserName()
                }

                // 2. 获取构建原因详情
                def buildReason = "未知原因"
                def buildCauses = currentBuild.getBuildCauses()
                buildCauses.each { cause ->
                    switch (cause._class) {
                        case "hudson.model.Cause$UserIdCause":
                            buildReason = "用户手动触发(触发人:${triggerUser})"
                            break
                        case "hudson.triggers.TimerTrigger$TimerTriggerCause":
                            buildReason = "定时任务自动触发"
                            break
                        case "jenkins.scm.impl.headless.SCMTriggerCause":
                            buildReason = "SCM代码变更触发"
                            break
                        case "hudson.model.Cause$UpstreamCause":
                            buildReason = "上游任务触发(任务名:${cause.upstreamProject})"
                            break
                        default:
                            buildReason = "其他原因:${cause.shortDescription}"
                    }
                }

                // 3. 组装邮件内容
                def emailContent = """
                <h3>构建通知</h3>
                <p><strong>构建状态:</strong>${currentBuild.currentResult}</p>
                <p><strong>构建原因:</strong>${buildReason}</p>
                <p><strong>最近Git提交:</strong>${gitCommitInfo}</p>
                <p><strong>构建链接:</strong><a href="${currentBuild.absoluteUrl}">点击查看详情</a></p>
                """

                // 发送邮件(需提前配置好Jenkins邮件服务器)
                emailext(
                    to: "your-email@example.com",
                    subject: "Jenkins构建通知:${currentBuild.projectName} #${currentBuild.number} ${currentBuild.currentResult}",
                    body: emailContent,
                    mimeType: 'text/html'
                )
            }
        }
    }
}

3. 关键部分说明

  • 触发人获取:通过currentBuild.rawBuild.getCause(UserIdCause.class)捕捉用户手动触发的场景,自动触发的情况会显示预设的默认值。
  • 构建原因分类:遍历buildCauses判断不同的触发类型,把机器识别的类名转换成人类友好的描述,覆盖了手动触发、定时触发、代码变更触发、上游任务触发等常见场景。
  • Git提交信息:用git log命令直接从本地仓库获取最近一次提交的备注和作者,简单高效。如果是多分支或PR场景,也可以结合checkout步骤返回的scm对象来获取更详细的提交信息。

4. 注意事项

  • 确保Jenkins已经安装了Email Extension Plugin(即emailext插件),并在全局配置中设置好邮件服务器信息。
  • 如果你的Pipeline是在容器化Agent中运行,要保证Agent环境里已经安装了Git命令。
  • 对于更特殊的触发场景(比如GitHub PR触发),可以对应添加cause._class的判断分支,比如org.jenkinsci.plugins.github.pullrequest.GitHubPRCause,根据实际需求扩展即可。

内容的提问来源于stack exchange,提问作者chilu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:05:32