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

时间:2015-08-06 01:56:29

标签: git jenkins jenkins-plugins

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

目前,GIT_COMMIT env变量仅为配置中添加的最后一个repo提供了提交,而不是全部三个。

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

1 个答案:

答案 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的顺序。

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