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

如何在不触发构建的情况下获取Jenkins已完成构建的状态?

解决方案:查询Jenkins已完成构建状态(不触发新构建)

你可以通过Jenkins核心API直接获取指定任务的已完成构建记录,无需触发新构建。核心思路是先获取任务实例,再提取其最后一次已完成的构建结果,替换掉原代码中触发构建的build job逻辑。

修改后的核心代码

Map buildResults = [:]
Boolean failedJobs = false

void notify_email(Map results) {
    echo "TEST SIMULATE notify: ${results.toString()}"
    // 这里可替换为实际邮件发送逻辑,比如用emailext插件
}

Boolean checkLastCompletedBuildStatus(String jobName, Map results) {
    // 获取Jenkins任务实例
    def job = Jenkins.instance.getItem(jobName)
    if (!job) {
        echo "任务 ${jobName} 不存在"
        results[jobName] = 'NOT_FOUND'
        return false
    }

    // 获取最后一次已完成的构建(跳过正在运行的)
    def lastCompletedBuild = job.getLastCompletedBuild()
    if (!lastCompletedBuild) {
        echo "任务 ${jobName} 无已完成构建记录"
        results[jobName] = 'NO_COMPLETED_BUILD'
        return false
    }

    def jobResult = lastCompletedBuild.getResult().toString()
    echo "任务 ${jobName} 最后一次已完成构建结果: ${jobResult}"
    results[jobName] = jobResult

    return jobResult == 'SUCCESS'
}

修改后的Pipeline片段

pipeline {
    agent any

    stages {
        stage('Check Build Statuses') {
            steps {
                parallel(
                    "testJob1": {
                        script {
                            if (!checkLastCompletedBuildStatus('testJob1', buildResults)) {
                                failedJobs = true
                            }
                        }
                    },
                    // 可添加更多需要检查的任务
                    "testJob2": {
                        script {
                            if (!checkLastCompletedBuildStatus('testJob2', buildResults)) {
                                failedJobs = true
                            }
                        }
                    }
                )
            }
        }
    }

    post {
        always {
            script {
                // 筛选出失败/异常状态的任务
                def failedJobList = buildResults.findAll { key, value -> 
                    value in ['FAILURE', 'ABORTED', 'NOT_FOUND', 'NO_COMPLETED_BUILD'] 
                }.keySet()
                if (!failedJobList.isEmpty()) {
                    notify_email(['failedJobs': failedJobList, 'allResults': buildResults])
                }
            }
        }
    }
}

关键说明

  • 无构建触发:通过Jenkins.instance.getItem(jobName)获取任务实例,再用getLastCompletedBuild()获取已完成的最新构建,全程不会触发新构建。
  • 边界处理:增加了任务不存在、无已完成构建的判断,避免Pipeline报错中断。
  • 结果筛选:在post阶段统一筛选失败/异常状态的任务,再调用邮件通知逻辑。
  • 权限注意:运行Pipeline的账号需要有对应任务的读取权限,否则无法获取构建信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 15:21:02