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

Jas*_*son 8 git jenkins jenkins-plugins

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

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

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

Jak*_*ler 2

我遇到了同样的问题,并决定分叉多个 SCM 插件来修复它:https://github.com/JakeStoeffler/multiple-scms-plugin

如果您愿意,只需克隆我的存储库并运行mvn以构建 HPI 文件(位于target/multiple-scms.hpi),您可以手动上传该文件并安装在 Jenkins 中。如果您想自己进行调整,请直接克隆原始存储库,打开 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) {}
    }
}
Run Code Online (Sandbox Code Playgroud)

希望那里的评论是不言自明的。基本上,原始代码中的错误是,当您有多个具有相同环境变量名称的 SCM 时,变量在迭代时会被覆盖。我们通过防止这些覆盖并在变量名称后附加索引来解决这个问题。

下面是如何使用它的示例:如果我们的项目配置了 3 个 Git SCM,我们现在可以使用环境变量GIT_COMMITGIT_COMMIT_1和单独访问每个 Git 存储库的最新提交哈希值GIT_COMMIT_2。附加索引对应于 Jenkins 中项目配置中 SCM 的顺序。

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