【发布时间】:2022-01-04 13:03:48
【问题描述】:
使用 Bamboo 版本 7.1.3。
上下文:
我刚刚开始处理来自 jenkins / ant+ivy 的竹子 / maven 项目,所以请耐心等待。我以前没有使用 maven 的经验,但除非我缺少基础知识,否则它应该与我想要实现的目标无关。
每种技术我们都有一个存储库,例如
JAVA_REPO
---| JavaProject1
---| JavaProject2
...
---| JavaProjectN.
REPORTS_REPO
---| ReportProject1
---| ReportProject2
...
---| ReportProjectN
目标:
作为 devOps 顾问,如果检测到更改,我希望竹子(使用 java-specs)仅构建 JavaProject3。此外,如果 JavaProject4 对 JavaProject3 有依赖关系,则也触发该构建,但仅此而已。
Jenkins 和 ant+ivy:
在旧世界,我会拥有
JAVA_REPO
---| JavaProject1
-------| ivy.xml
-------| build.xml
---| JavaProject2
-------| ivy.xml
-------| build.xml
...
---| JavaProjectN.
-------| ivy.xml
-------| build.xml
然后我会在 JENKINS 中安装一个 ivy 插件并创建一个 Ivy 项目。然后,Jenkins 将扫描整个存储库并根据它找到的 ivy.xml 创建“模块”。由于每个模块都将具有相同的 build.xml 结构和目标,因此您可以指定调用发布或任何您想要的目标。然后,Jenkins 将仅启动作为提交的一部分更改的模块,如果有其他项目依赖于该模块,那么这些项目也会排队。一切都是开箱即用的。
竹子/Maven:
即使我必须自己实现它,我也很难找到类似上述的东西。我一直在做研究,但不确定我是否缺少基础知识,因为我认为我不是第一个遇到这个问题的人。
我有什么:
JAVA_REPO
pom.xml (packaging pom)
---| JavaSpecProject
-------|pom.xml
---| JavaProject1
-------| pom.xml
---| JavaProject2
-------| pom.xml
...
---| JavaProjectN.
-------| pom.xml
目前,我只找到一个选项,即创建与我拥有的模块一样多的存储库连接,然后要求竹子只检查更改的文件“模式”等。我觉得这个解决方案很难看。
我在想,使用 java 规范我也许可以编写一堆代码来做我想做的事情,但我也觉得这有点难看。
你们是怎么做到的?
【问题讨论】:
-
项目 javaspecproject、javaproject1 是否在一个 git repo 中?您还使用看起来像这样的多模块构建(包装:pom)......它们是否相互依赖?如果是这样,则通过
mvn package或mvn deploy从根目录构建(如有必要)... -
是的,但这基本上会完成一个完整的构建。如果我有 50 个项目,我不想在只有一个项目需要构建的情况下创建 50 个新工件(目前我的 CI 环境中使用竹子正在发生这种情况)。 @khmarbaise
-
这50个项目之间是相互依赖还是相互独立的?
-
@khmarbaise 我有一个项目,但是公共代码由其他项目共享和使用。因此 49 个项目将依赖 1 个项目。但是,我实际上(暂时)并不关心自动触发依赖项。我只需要为更新的模块构建和发布工件。我希望这是有道理的。
-
我刚刚找到了你的项目@khmarbaise -> incremental-module-builder。我想,这就是我正在寻找的。你同意吗?
标签: maven module continuous-integration bamboo