Java 如何将Jenkins作业与相关git存储库和多个分支一起使用
我们有两个git存储库,平台和我们(我们还有其他特定于地理位置的存储库,这就是它们被拆分的原因,但它们在这里不一定相关)。我们依靠平台 我们使用的是git flow(这意味着新功能在它们自己的分支中,如Java 如何将Jenkins作业与相关git存储库和多个分支一起使用,java,git,maven,jenkins,continuous-integration,Java,Git,Maven,Jenkins,Continuous Integration,我们有两个git存储库,平台和我们(我们还有其他特定于地理位置的存储库,这就是它们被拆分的原因,但它们在这里不一定相关)。我们依靠平台 我们使用的是git flow(这意味着新功能在它们自己的分支中,如feature/some product,develope分支更稳定,代表QA就绪的构建,master分支稳定,适用于发行版)。(如果功能部件同时包含平台部件和美国部件,则每个部件中将有一个具有相同名称的分支。)我们决定这些特性的Jenkins作业不应该运行mvn deploy,因为我们不想将它们
feature/some product
,develope
分支更稳定,代表QA就绪的构建,master
分支稳定,适用于发行版)。(如果功能部件同时包含平台部件和美国部件,则每个部件中将有一个具有相同名称的分支。)我们决定这些特性的Jenkins作业不应该运行mvn deploy
,因为我们不想将它们发布到快照存储库,并且可能不应该运行mvn install
,因为我们不想让另一个特性分支从Jenkins的本地repo获取它(尽管我们对此不太确定)。我们认为,他们应该只确保所有内容都已编译,并且单元测试通过(mvn-verify
)
这就是问题所在,因为这些是独立的git存储库,我们没有对编译后的jar进行任何操作(install
或deploy
)
- 我们如何安全地将平台作业中编译的jar公开给美国,而不将它们公开给其他开发人员或作业(或者这仅仅是在执行
)或mvn安装
- Jenkins job如何与我们一起为特定分支机构构建平台
- 对于功能分支,请使用不同的版本(例如,
)。8.1.0-SNAPSHOT-some-product
- 对于每个功能分支来说,这似乎都需要做大量的工作
- 这似乎会用“陈旧”的罐子堵塞本地回购协议,我们需要担心清除它们
- 以某种方式使用
检查平台和美国的git子模块
,或者使用功能/某些产品
或简单的pom文件,将顶级项目作为模块。mvn verify--reactor
- 如何让Jenkins添加子模块
- 如果子模块已经存在,那么就需要一个完整的git回购,这似乎是多余的
——反应堆不总是工作
- 如何提供pom文件
- 只需执行
。mvn安装
可能只在我们身上,所以在平台feature/other thing
发布到Jenkins本地存储库之后(这可能与平台feature/other thing
非常不同,平台develop
通常是根据平台构建的),它会(我们认为)使我们feature/other thing
在错误的意义上失败(或通过!)(假设如果它是根据平台功能/其他东西
编译的,可能会得到不同的结果)开发
- 我不必亲自解决这个问题。。。。以下是我对这个问题的看法:
如果两个分支必须只有一个作业(一个坏主意),那么可以使用参数化构建插件传入文本字符串“US”或“Platform”,并在shell脚本中包含逻辑,该脚本将检查相关repo的分支
但是,这消除了让repo轮询启动构建的能力。您必须在cron上设置一个构建计划,并且无论发生什么,您都将获得一个新的构建,即使repo没有更改(除非您的批处理/shell脚本足够聪明,能够检查更改)
我看不出有任何理由不让詹金斯做两份独立的工作,每个部门一份
如果一个作业需要访问.jars(也称为构建工件),那么您可以始终从jenkins服务器上作业的“最新”URL引用任何其他jar的工件。确保作业指定了需要归档的工件。我最终解决这个问题的方法是使用maven版本插件。我必须确保所有模块都是顶级项目中的管理依赖项,但这可能是另一个问题。此外,我确信,美国项目将需要明确声明其版本,即使它与父项目相同 它们都轮询git,但如果它成功构建,平台作业也会触发我们 版本插件的工作方式要求您分两步完成。在作业中添加2个“调用顶级Maven目标”,第二个是
clean deploy
。第一点对于平台和我们来说有点不同
平台:mvn版本:set-DnewVersion=yourBranchName-${project.version}
美国:mvn版本:更新父级-DparentVersion=yourBranchName-${project.version}版本:set-DnewVersion=yourBranchName-${project.version}
如果分支只存在于美国存储库中,那么显然不要将平台设为一,而美国的命令与平台的命令相同
我遇到的最后一个问题是,最初我的新版本是
${project.version}-yourBranchName
,但这里的问题是,作业部署到的存储库只接受快照,因为版本没有以-SNAPSHOT
结尾,所以它给出了错误代码400。,因为它们可以。我真的不明白为什么人们不说出理由就投了反对票。你需要惩罚来改造。你怎么能在不知道自己错在哪里的情况下改造自己?