无需检出代码,如何获取当前Jenkinsfile的提交哈希值?
如何获取Jenkinsfile的提交哈希值(无需检出操作)
你提到Jenkins日志中会显示类似这样的信息,无需检出代码就能看到Jenkinsfile的提交哈希:
Obtained Jenkinsfile from 6d24a57f9359fe4a503dbc00179393a3eddd30c3
以下分别说明在流水线Groovy脚本和自定义插件中获取该哈希的方法:
一、流水线Groovy脚本实现
env.GIT_COMMIT获取的是流水线检出的业务代码仓库哈希,并非Jenkinsfile本身的提交哈希。要直接获取Jenkinsfile的哈希,可通过Jenkins内部的Action对象实现:
// 获取Jenkinsfile对应的提交哈希 def jenkinsfileCommit = currentBuild.rawBuild.getAction(org.jenkinsci.plugins.workflow.cps.CpsScmFlowDefinitionAction)?.getScmRevision()?.getHash() // 打印结果 if (jenkinsfileCommit) { echo "Jenkinsfile commit hash: ${jenkinsfileCommit}" } else { echo "无法获取Jenkinsfile的提交哈希" }
注意:该方法需要在Jenkins全局安全配置中,授权脚本访问currentBuild.rawBuild及相关方法(可通过脚本安全插件添加签名或授权)。
二、自定义插件实现
在插件代码中,通过Run对象获取存储Jenkinsfile SCM信息的CpsScmFlowDefinitionAction,即可提取提交哈希,示例Java代码:
import org.jenkinsci.plugins.workflow.cps.CpsScmFlowDefinitionAction; import hudson.model.Run; public String fetchJenkinsfileCommitHash(Run<?, ?> buildRun) { // 获取存储Jenkinsfile SCM信息的Action CpsScmFlowDefinitionAction scmAction = buildRun.getAction(CpsScmFlowDefinitionAction.class); if (scmAction != null && scmAction.getScmRevision() != null) { // 返回Jenkinsfile的提交哈希 return scmAction.getScmRevision().getHash(); } return null; }
Jenkins日志中显示的Obtained Jenkinsfile from ...信息,正是从这个CpsScmFlowDefinitionAction中读取的哈希值。
关于你之前尝试方法的说明
env.GIT_COMMIT:仅对应流水线检出的业务代码仓库提交,和Jenkinsfile的哈希不一定一致(若Jenkinsfile单独存储在其他仓库则完全不同)- 查阅Run文档:该哈希并非直接存储在Run对象中,而是属于Workflow插件特有的
CpsScmFlowDefinitionAction对象,需针对性查找相关类文档
内容的提问来源于stack exchange,提问作者Zerint
相关产品推荐
相关产品推荐

