繁体   English   中英

如何使用具有相关git存储库和多个分支的Jenkins作业

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

我们有2个git存储库,分别是Platform和US(我们还有其他特定于地理位置的存储库,这就是为什么要拆分它们的原因,但它们在此处不一定相关)。 美国取决于平台。

我们正在使用git-flow(这意味着新功能在它们自己的分支中,例如feature/some-productdevelop分支在某种程度上更稳定,并且代表可进行QA的构建, master分支是稳定的并且可以发布)。 (如果某个功能同时具有Platform和US部分,则每个功能中都将有一个具有相同名称的分支。)我们决定,该功能的Jenkins作业不应运行mvn deploy因为我们不想将它们发布到快照中存储库,可能不应该运行mvn install因为我们不希望其他功能分支从Jenkins的本地存储库中获取它(尽管我们不太确定)。 我们相信他们只应确保所有内容都能编译并且单元测试通过( mvn verify )。

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

  • 我们如何才能安全地将已编译的jar从Platform作业公开给美国,而又不将它们暴露给其他开发人员或工作(或者甚至只是在执行mvn install引起的担忧),或者
  • 詹金斯(Jenkins)的工作如何为特定分支机构共同构建Platform和US?

如果我们只有一个主动开发的分支(或者我们正在使用Subversion),那么这将不是问题。

我们有一些想法 (以及每个想法

  • 对于功能分支,请使用其他版本(例如8.1.0-SNAPSHOT-some-product )。
    • 每个功能分支似乎都要做很多工作。
    • 似乎它会用“陈旧”的罐子堵塞本地存储库,我们需要担心清除它们。
  • 以某种方式使用git submodule来检出Platform和US的feature/some-product并使用mvn verify --reactor或将顶层项目作为模块的简单pom文件。
    • 如何使Jenkins添加子模块?
    • 如果子模块已经存在,则需要一个完整的git repo,这似乎是多余的。
    • --reactor并不总是起作用。
    • 如何提供pom文件?
  • 只需执行mvn install
    • feature/other-thing可能仅在美国销售,因此在平台feature/some-product发布到Jenkins本地存储库(可能与平台develop (美国feature/other-thing通常会针对该平台进行develop非常不同)之后) (我们认为)会导致美国feature/other-thing在错误的意义上失败(或通过!)(假设如果针对平台develop进行编译,则可能会得到不同的结果)。

我不必亲自解决此问题。...这是我对问题的看法:

如果两个分支都只能有一份工作(一个坏主意),则可以使用参数化的构建插件来传递文本字符串“ US”或“ Platform”,并在Shell脚本中包含逻辑,以检查出相关仓库的分支。

但是,这消除了回购轮询启动构建的能力。 您将必须在cron上设置构建时间表,并且无论回购没有变化,无论如何都将获得新的构建(除非您的批处理/ shell脚本足够聪明以检查更改)。

我看不出没有两个单独的詹金斯·乔布斯的理由,每个分支一个。

如果一个作业需要访问.jar(也称为构建工件),则您始终可以从jenkins服务器上作业的“最新” URL引用任何其他jar的工件。 确保作业指定需要归档的工件。

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

他们都轮询git,但是Platform工作如果成功构建,也会触发US。

版本插件的工作方式需要您分两个步骤进行。 在工作中添加2个“调用顶级Maven目标”,第二个是clean deploy 对于平台和美国而言,第一个有点不同。

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

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

如果该分支仅存在于美国存储库中,那么显然不要将其作为平台,而美国将与该平台相同。

我遇到的最后一个问题最初是我的新版本为${project.version}-yourBranchName但是这里的问题是作业正在部署到仅接受快照的存储库,并且因为该版本未以-SNAPSHOT结尾输入错误代码400。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM