[英]How to use Jenkins job(s) with dependent git repositories and multiple branches
我们有2个git存储库,分别是Platform和US(我们还有其他特定于地理位置的存储库,这就是为什么要拆分它们的原因,但它们在此处不一定相关)。 美国取决于平台。
我们正在使用git-flow(这意味着新功能在它们自己的分支中,例如feature/some-product
, develop
分支在某种程度上更稳定,并且代表可进行QA的构建, master
分支是稳定的并且可以发布)。 (如果某个功能同时具有Platform和US部分,则每个功能中都将有一个具有相同名称的分支。)我们决定,该功能的Jenkins作业不应运行mvn deploy
因为我们不想将它们发布到快照中存储库,可能不应该运行mvn install
因为我们不希望其他功能分支从Jenkins的本地存储库中获取它(尽管我们不太确定)。 我们相信他们只应确保所有内容都能编译并且单元测试通过( mvn verify
)。
这就是问题所在,因为它们是单独的git存储库,而我们对已编译的jar( install
或deploy
)不做任何事情,
mvn install
引起的担忧),或者 如果我们只有一个主动开发的分支(或者我们正在使用Subversion),那么这将不是问题。
我们有一些想法 (以及每个想法 )
8.1.0-SNAPSHOT-some-product
)。
git submodule
来检出Platform和US的feature/some-product
并使用mvn verify --reactor
或将顶层项目作为模块的简单pom文件。
--reactor
并不总是起作用。 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.