jenkins - 如何使用管道访问 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 中。当插件用于管道作业时,环境变量似乎不存在,所以我正在寻找一种解决方法。
解决方案
我有一个非常相似的问题 - 这就是我解决它的方法。诀窍是在你的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;
}
}
...
}
推荐阅读
- sql - 分组和构造消息
- git - 带有嵌套子模块的 git add 后“未暂存更改”
- php - 浏览器中 AJAX 调用和“复制为 cURL”的不同行为
- reactjs - 如何在多对一关系中将子数据数组发送到 api 平台?
- ibm-cloud - 无法再在 Watson Assistant 中选择多个词作为上下文实体
- php - Bootstrap 4 分页在 Larave 8 中无法正常工作
- pyspark - Spark 读取 csv 模式
- javascript - 在不使用父对象的情况下访问对象子属性
- java - 如何防止/禁用 Groovy 脚本中的 AST 转换?
- asp.net-core - 何时在 IHttpClientFactory 中使用 Named HttpClient 和 Basic HttpClient