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

如何获取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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 08:35:23