所以,我已经配置了一个jenkins工作,从3个repos中检出master分支。 现在我想获得所有三个回购的最新变化。
目前,GIT_COMMIT env变量仅为配置中添加的最后一个repo提供了提交,而不是全部三个。
有没有办法获得所有三个存储库的先前提交和当前git提交?
答案 0 :(得分:2)
我遇到了同样的问题并决定分叉多个SCM插件以便修复它:https://github.com/JakeStoeffler/multiple-scms-plugin
如果您愿意,只需克隆我的仓库并运行mvn
即可构建HPI文件(位于target/multiple-scms.hpi
),您可以手动上传并安装在Jenkins中。如果您宁愿自己进行调整,请直接克隆the original repo,打开MultiSCM.java
,并使用以下内容替换buildEnvVars()
方法中的代码:
@Override
public void buildEnvVars(AbstractBuild<?,?> build, Map<String, String> env) {
// Add each SCM's env vars, appending indices where needed to avoid collisions
for (int i = 0; i < scms.size(); i++) {
try {
EnvVars currScmVars = new EnvVars();
scms.get(i).buildEnvVars(build, currScmVars);
for (Entry<String, String> entry : currScmVars.entrySet()) {
if (env.containsKey(entry.getKey())) {
// We have a collision; append the index of this SCM to the env var name
env.put(entry.getKey() + "_" + i, entry.getValue());
} else {
// No collision; just put the var as usual
env.put(entry.getKey(), entry.getValue());
}
}
}
catch(NullPointerException npe) {}
}
}
希望那里的评论非常明显。基本上,原始代码中的错误是,当您有多个具有相同环境变量名称的SCM时,变量会因为它们被迭代而被覆盖。我们通过阻止这些覆盖并将索引附加到变量名来解决这个问题。
以下是如何使用它的示例:如果我们的项目配置了3个Git SCM,我们现在可以使用env vars GIT_COMMIT
,{单独访问每个Git仓库的最新提交哈希值。 {1}}和GIT_COMMIT_1
。附加的索引对应于Jenkins项目配置中SCM的顺序。
显然这是一个快速而肮脏的解决方案,但它适用于我需要做的事情。随意定制它以满足您的需求。