如何通过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
相关产品推荐
相关产品推荐

