使用Jenkins中的Multiple-SCM-Plugin无法获得多个repos的git提交

所以,我已经配置了一个jenkins工作,从3个repos中检出master分支.
现在我想获得所有三个回购的最新更改.

目前,GIT_COMMIT env变量仅提供对配置中添加的最后一个repo的提交,而不是所有三个提交.

有没有办法获得所有三个存储库的先前提交和当前git提交?

最佳答案
我遇到了同样的问题并决定分叉Multiple SCMs插件以修复它:https://github.com/JakeStoeffler/multiple-scms-plugin

如果您愿意,只需克隆我的repo并运行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_COMMIT_1和GIT_COMMIT_2单独访问每个Git仓库的最新提交哈希.附加的索引对应于Jenkins中项目配置中SCM的顺序.

显然这是一个快速而肮脏的解决方案,但它适用于我需要做的事情.随意定制它以满足您的需求.

转载注明原文:使用Jenkins中的Multiple-SCM-Plugin无法获得多个repos的git提交 - 代码日志