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

如何通过Jenkins Pipeline获取其他Job指定构建的Git提交哈希值

嘿,刚好我之前解决过类似的需求,给你两个实用的方案,直接就能套进你的Pipeline里!

方案1:通过Jenkins核心API直接获取(适合权限宽松的环境)

这个方案直接调用Jenkins内部API,能精准拿到目标构建的Git提交哈希,逻辑和你写的伪代码思路一致,我帮你修正了语法并补充了完整逻辑:

pipeline {
    agent any
    parameters {
        string(name: 'TARGET_JOB_NAME', description: '目标Job的全名(比如folder/jobName,根目录Job直接写名称)')
        string(name: 'TARGET_BUILD_NUMBER', description: '要查询的构建号')
    }
    stages {
        stage('提取Git提交哈希') {
            steps {
                script {
                    // 定位目标Job对象
                    def targetJob = Jenkins.instance.getAllItems(Job).find { it.fullName == params.TARGET_JOB_NAME }
                    if (!targetJob) {
                        error "找不到指定的Job:${params.TARGET_JOB_NAME}"
                    }

                    // 获取指定构建号的构建实例
                    def targetBuild = targetJob.getBuildByNumber(params.TARGET_BUILD_NUMBER as Integer)
                    if (!targetBuild) {
                        error "Job ${params.TARGET_JOB_NAME} 不存在构建号 ${params.TARGET_BUILD_NUMBER}"
                    }

                    // 提取Git提交哈希(适配新版Git插件)
                    def gitAction = targetBuild.actions.find { it instanceof jenkins.plugins.git.GitRevisionState }
                    if (!gitAction) {
                        // 兼容旧版Git插件的写法
                        gitAction = targetBuild.actions.find { it instanceof jenkins.plugins.git.GitBuildData }
                        if (!gitAction) {
                            error "该构建未关联Git提交信息"
                        }
                        def gitCommitHash = gitAction.lastBuiltRevision.sha1String
                        echo "目标构建的Git提交哈希:${gitCommitHash}"
                        echo "短哈希版本:${gitCommitHash.substring(0,7)}"
                    } else {
                        def gitCommitHash = gitAction.revision.sha1String
                        echo "目标构建的Git提交哈希:${gitCommitHash}"
                        echo "短哈希版本:${gitCommitHash.substring(0,7)}"
                    }
                }
            }
        }
    }
}

注意事项:

  • 权限要求:调用Jenkins.instance需要在Jenkins后台的In-process Script Approval中通过相关签名(路径:Manage Jenkins → In-process Script Approval)
  • Git插件兼容性:不同版本的Git插件存储提交信息的类不同,代码里已经做了新旧版本兼容,直接用就行
方案2:通过Jenkins REST API获取(无需脚本审批)

如果你的Jenkins环境权限管控严格,不想开放脚本审批,可以用REST API的方式,全程通过curl调用,不需要触碰内部API:

pipeline {
    agent any
    parameters {
        string(name: 'TARGET_JOB_NAME', description: '目标Job的全名')
        string(name: 'TARGET_BUILD_NUMBER', description: '要查询的构建号')
    }
    stages {
        stage('通过API提取Git哈希') {
            steps {
                script {
                    def jenkinsBaseUrl = env.JENKINS_URL
                    // 转换Job名称为API路径格式(文件夹Job需要替换成/job/xxx/job/yyy)
                    def jobApiPath = params.TARGET_JOB_NAME.split('/').collect { "job/${it}" }.join('/')
                    def apiUrl = "${jenkinsBaseUrl}${jobApiPath}/${params.TARGET_BUILD_NUMBER}/api/json?tree=actions[lastBuiltRevision[SHA1]]"

                    // 调用API(如果Jenkins开启了权限验证,需要加--user 用户名:API令牌)
                    def apiResponse = sh(script: "curl -s ${apiUrl}", returnStdout: true).trim()
                    def responseJson = readJSON text: apiResponse

                    // 提取哈希值
                    def gitCommitHash = responseJson.actions.find { it.lastBuiltRevision }?.lastBuiltRevision?.SHA1
                    if (!gitCommitHash) {
                        error "无法从API获取目标构建的Git提交信息"
                    }

                    echo "目标构建的Git提交哈希:${gitCommitHash}"
                    echo "短哈希版本:${gitCommitHash.substring(0,7)}"
                }
            }
        }
    }
}

优势:

  • 不需要任何脚本审批,适合严格管控的Jenkins集群
  • 只要能访问Jenkins的Web UI,就能调用这个API

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 09:03:28