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

无需检出代码,如何获取当前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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 16:12:40