如何在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
相关产品推荐
相关产品推荐

