首页 > 解决方案 > 如何使用管道访问 jenkins 插件中的 git 环境数据

问题描述

我想从插件中获取当前构建的 git commit 哈希(即,在扩展 hudson.tasks.Recorder 的 Java 类中)。

这适用于自由式项目:

EnvVars env = run.getEnvironment(listener);
String hash = env.get("GIT_COMMIT");

但是,在管道项目中,显然没有设置 GIT_COMMIT 环境变量,因此 hash 变为 null。即使对于 scm 签出步骤是隐式的声明性管道也是如此。

是否有另一种方法可以在管道项目中获取提交哈希?

编辑:为了澄清,这是关于从 Jenkins 插件中的 Java 代码获取 git commit hash,而不是在 groovy/Jenkinsfile 中。当插件用于管道作业时,环境变量似乎不存在,所以我正在寻找一种解决方法。

标签: jenkinsjenkins-pluginsjenkins-pipeline

解决方案


我有一个非常相似的问题 - 这就是我解决它的方法。诀窍是在你的StepExecution类中进行,因为它可以访问StepContext- 然后你可以从那里获取一组环境变量。代码是这样的:

public class MyExecution extends SynchronousNonBlockingStepExecution<ReturnType> {
    ...

    @Override
    protected ReturnType run() throws Exception {
        try {
            StepContext context = getContex();
            EnvVars env = context.get(EnvVars.class);
            ...
        } catch (Exception e) {
            e.printStackTrace();
            throw e;
        }
    }

    ...
}

推荐阅读