【问题标题】:How to build only updated modules in bamboo in 2022如何在 2022 年只用竹子构建更新的模块
【发布时间】: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 packagemvn deploy 从根目录构建(如有必要)...
  • 是的,但这基本上会完成一个完整的构建。如果我有 50 个项目,我不想在只有一个项目需要构建的情况下创建 50 个新工件(目前我的 CI 环境中使用竹子正在发生这种情况)。 @khmarbaise
  • 这50个项目之间是相互依赖还是相互独立的?
  • @khmarbaise 我有一个项目,但是公共代码由其他项目共享和使用。因此 49 个项目将依赖 1 个项目。但是,我实际上(暂时)并不关心自动触发依赖项。我只需要为更新的模块构建和发布工件。我希望这是有道理的。
  • 我刚刚找到了你的项目@khmarbaise -> incremental-module-builder。我想,这就是我正在寻找的。你同意吗?

标签: maven module continuous-integration bamboo


【解决方案1】:

创建与我拥有的模块一样多的存储库连接,然后要求竹子仅检查更改的文件“模式”

这是唯一的方法:每个 maven 项目单独计划。添加 Maven 依赖处理器任务,计划将根据它们的依赖关系依次构建。

增量模块构建器

这需要共享状态并且不适用于我们公司,因为我们使用临时代理和干净的工作目录。

【讨论】:

  • 谢谢。我设法编写了一个比较 HEAD 与 HEAD^ 的 bash 脚本,然后查看哪个模块已更改并发出 mvn clean -pl $module install / deploy。
  • 当我将两个提交与一个 PR 合并时,这将不起作用。
  • 谢谢 - 我还没有实际测试过这种情况。当您对一个 PR 进行 2 次或更多次提交时,您是否知道如何完成它?也许与最新的标签不同?合并时用竹子标记分支?
  • Bamboo 不会自动标记。唯一可靠的方法是从当前分支查询 Bamboo API 以获取最新的绿色构建,并获取它的 git rev,然后您可以根据它进行差异化。恕我直言,与每项目计划与模式匹配设置相比,这变得不必要地过于复杂并且容易出现错误/边缘情况。
  • 是的 - 我在以前的合同中已经做过好几次了。我在一个利基领域工作,其中大部分构建/部署工作都是通过 ant 完成的。所以我选择了ivy来实现依赖管理。 Jenkins 有一个 ivy 插件,基本上扫描所有 ivy.xml 并构建所有内容,然后仅触发提交时更改的模块。不过现在不能使用 jenkins - 他们已经选择了竹子。
猜你喜欢
  • 1970-01-01
  • 2022-11-25
  • 1970-01-01
  • 2013-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-22
  • 2013-04-21
相关资源
最近更新 更多