Jenkins下游任务构建失败时如何给上游任务的触发用户发送邮件
问题根因
你当前使用buildUser()报错且无法获取上游触发用户的原因有两点:
buildUser()依赖Build User Vars Plugin,未安装该插件会直接报错- 即使插件正常,
buildUser()默认获取的是下游任务本身的触发者,当上游任务自动触发下游时,下游的触发身份为Jenkins系统内置账号,并非触发上游任务的实际用户
实现方案
这里提供两种可直接落地的方案,按需选择即可:
方案1:上游传递用户参数(可控性最高,推荐)
前置依赖
安装Build User Vars Plugin插件
上游流水线修改
在上游提前获取触发用户信息,作为参数传递给下游:
pipeline { agent any environment { // 插件安装后可直接读取内置的构建用户变量 TRIGGER_USER = "${BUILD_USER}" TRIGGER_USER_EMAIL = "${BUILD_USER_EMAIL}" } stages { stage('Hello') { steps { build job: 'test-app', parameters: [ string(name: 'dummy', value: ""), // 新增两个参数传递给下游 string(name: 'UPSTREAM_TRIGGER_USER', value: "${TRIGGER_USER}"), string(name: 'UPSTREAM_TRIGGER_EMAIL', value: "${TRIGGER_USER_EMAIL}") ] } } } }
下游流水线修改
首先在下游任务的配置页新增两个字符串类型的构建参数:UPSTREAM_TRIGGER_USER、UPSTREAM_TRIGGER_EMAIL,可配置默认收件人避免手动触发下游时报错,再修改流水线代码:
pipeline { agent any stages { stage('Hello - downstream') { steps { script { try{ sh '需要执行的命令' } catch(e){ emailext body: "下游任务构建失败,请查看:$BUILD_URL \n 上游触发用户:${UPSTREAM_TRIGGER_USER}", subject: 'Build Failed', to: "${UPSTREAM_TRIGGER_EMAIL}" } } } } } }
方案2:使用Email Extension内置能力(无需传参,更简洁)
无需额外传递参数,直接使用Email Extension插件自带的upstreamBuilders收件人提供者,自动识别上游构建的触发用户:
pipeline { agent any stages { stage('Hello - downstream') { steps { script { try{ sh '需要执行的命令' } catch(e){ emailext body: "下游任务构建失败,请查看:$BUILD_URL", subject: 'Build Failed', recipientProviders: [upstreamBuilders()] } } } } } }
注意事项
- 两种方案都需要提前安装
Email Extension Plugin插件 - 请提前在Jenkins系统配置中验证SMTP邮件发送功能正常
- 方案2仅适用于上游通过
build步骤触发下游的场景,确保上下游构建的父子关联关系正常
内容的提问来源于stack exchange,提问作者Narasinga Rao
相关产品推荐
相关产品推荐

