如何获取Jenkins流水线内各Job执行结果并邮件发送?
解决Jenkins流水线单个Job执行结果收集与邮件发送方案
核心思路:流水线内直接捕获结果 + 共享库复用逻辑
放弃外部API的方式,直接在Jenkins流水线内部追踪每个Job的执行状态,同时通过共享库(Shared Library)封装通用逻辑,彻底解决重复编码、维护成本高的问题。
方案1:声明式流水线内直接收集结果
如果用声明式流水线,可以通过环境变量存储结果,在流水线结束后统一生成文件并发送邮件:
pipeline { agent any // 定义存储结果的环境变量 environment { JOB_EXEC_RESULTS = '' } stages { stage('执行JobA') { steps { script { // propagate: false 避免单个Job失败终止整条流水线 def jobBuild = build job: 'JobA', propagate: false JOB_EXEC_RESULTS += "JobA: ${jobBuild.result} | 构建链接: ${jobBuild.absoluteUrl}\n" } } } stage('执行JobB') { steps { script { def jobBuild = build job: 'JobB', propagate: false JOB_EXEC_RESULTS += "JobB: ${jobBuild.result} | 构建链接: ${jobBuild.absoluteUrl}\n" } } } // 继续添加其他需要追踪的Job } post { always { // 将结果写入文件 writeFile file: 'single_job_results.txt', text: JOB_EXEC_RESULTS // 发送邮件(需提前配置Jenkins邮件插件的SMTP服务) emailext( subject: "[Jenkins] 单个Job执行结果汇总", body: "以下是本次流水线中各Job的执行结果:\n\n${JOB_EXEC_RESULTS}", to: "your-email@company.com" ) } } }
方案2:共享库封装通用逻辑(推荐)
将结果收集、文件生成、邮件发送的逻辑封装成共享库函数,所有流水线只需调用该函数即可,后续维护仅需修改共享库代码,无需逐个修改流水线:
步骤1:创建共享库函数
在Jenkins共享库的vars目录下新建collectSingleJobResults.groovy文件:
def call(List jobNameList, String targetEmail) { def jobResults = [:] // 遍历执行所有目标Job并收集结果 jobNameList.each { jobName -> def buildInstance = build job: jobName, propagate: false jobResults[jobName] = [ result: buildInstance.result, buildUrl: buildInstance.absoluteUrl, buildNumber: buildInstance.number ] } // 生成结果文本 def resultContent = jobResults.collect { jobName, details -> "* ${jobName}: 状态=${details.result} | 构建号=${details.buildNumber} | 链接=${details.buildUrl}" }.join('\n') // 写入文件 writeFile file: 'job_execution_results.txt', text: resultContent // 发送邮件 emailext( subject: "[Jenkins] 单个Job执行结果汇总", body: "本次流水线各Job执行详情:\n\n${resultContent}", to: targetEmail ) }
步骤2:流水线中调用共享库
所有需要收集单个Job结果的流水线,只需引入共享库并调用函数:
// 引用你的Jenkins共享库,替换成实际库名 @Library('jenkins-shared-lib') _ pipeline { agent any stages { stage('批量执行并收集Job结果') { steps { script { // 传入需要追踪的Job列表和目标邮箱 collectSingleJobResults(['JobA', 'JobB', 'JobC'], "your-email@company.com") } } } } }
关键注意事项
propagate: false是必须配置的参数,否则单个Job执行失败会直接终止整条流水线,导致无法收集后续Job的结果。- 如果需要更详细的执行信息(如日志片段、测试报告链接),可以在共享库函数中扩展
buildInstance的属性获取逻辑。 - 确保Jenkins已安装并配置好
Email Extension Plugin,否则邮件发送功能无法生效。
内容的提问来源于stack exchange,提问作者Gustavo Rodrigues Lima
相关产品推荐
相关产品推荐

