如何将 Jenkins 作业与相关的 git 存储库和多个分支一起使用

How to use Jenkins job(s) with dependent git repositories and multiple branches

我们有 2 个 git 存储库,Platform 和 US(我们还有其他特定于地理区域的存储库,这就是它们分开的原因,但它们在这里不一定相关)。美国依赖于平台。

我们正在使用 git-flow(这意味着新功能在它们自己的分支中,例如 feature/some-productdevelop 分支更稳定并且代表 QA 就绪构建,master 分支是稳定的并且用于发布)。 (如果一个功能同时具有平台部分和美国部分,那么每个部分都会有一个同名的分支。)我们决定这些功能的 Jenkins 作业不应该 运行 mvn deploy 因为我们不想要将它们发布到快照存储库并且可能不应该 运行 mvn install 因为我们不希望不同的功能分支从 Jenkins 的本地存储库中获取它(虽然我们不太确定)。我们认为他们应该只确保所有内容都可以编译并且单元测试通过 (mvn verify)。

这就是问题所在, 因为这些是单独的 git 存储库,我们没有对编译的 jar 做任何事情(installdeploy),

如果我们只有一个活跃开发的分支(或者我们使用的是颠覆),这将不是问题。

我们有一些想法(以及对每个想法的担忧)

我不必亲自解决这个问题....这是我对如何看待这个问题的看法:

如果您必须为两个分支只做一份工作(一个坏主意),您可以使用参数化构建插件来传递文本字符串 "US" 或 "Platform" 并在 shell 将检查相关回购分支的脚本。

但是,这消除了让回购轮询启动构建的能力。你必须在 cron 上设置一个构建计划,无论如何你都会得到一个新的构建,即使 repo 没有改变(除非你的批处理/ shell 脚本足够聪明来检查变化) .

我看不出有任何理由不拥有两个独立的 Jenkins Jobs,每个分支一个。

如果一个作业需要访问 .jars(又名构建工件),那么您始终可以从 jenkins 服务器上的作业 "LATEST" URL 引用任何其他 jar 的工件。确保作业指定需要存档的工件。

我最终解决这个问题的方法是使用 maven 版本插件。我必须确保所有模块都是顶级项目中的托管依赖项,但这可能是一个不同的问题。另外,我确定这一点,即使与父项目相同,美国项目也需要明确声明其版本。

他们都轮询 git,但如果构建成功,平台作业也会触发 US。

版本插件的工作方式要求您分两步完成。在job中添加2个"Invoke top-level Maven targets",第二个就是clean deploy。第一个对于平台和美国来说有点不同。

平台:mvn versions:set -DnewVersion=yourBranchName-${project.version}.

美国:mvn versions:update-parent -DparentVersion=yourBranchName-${project.version} versions:set -DnewVersion=yourBranchName-${project.version}

如果 b运行ch 仅存在于 US 存储库中,那么显然不要将 Platform 设为一个,而 US 一个与 Platform one 的命令相同。

我 运行 进入 的最后一个问题最初是我将新版本作为 ${project.version}-yourBranchName 但这里的问题是作业正在部署的存储库只接受快照,并且因为版本没有以 -SNAPSHOT 结尾,所以它给出了错误代码 400。