【问题标题】:Build Pipelining and Continuous Integration with Maven and Hudson使用 Maven 和 Hudson 构建流水线和持续集成
【发布时间】:2011-02-16 13:37:51
【问题描述】:

目前,我的团队正在考虑将我们的单个 CI 构建流程拆分为更精简的多阶段流程,以加快基本构建反馈并隔离不同的 CI 关注点。我们的想法是让 Hudson 中的每个阶段都作为具有正确 maven 目标或 maven 插件执行的不同构建存在,然后使用 Hudson 的构建后挂钩将它们链接在一起。

但是,据我所知,Maven 作为构建工具要求任何执行的生命周期阶段都会自动构建之前的每个生命周期阶段。这带来了许多问题,其中最重要的是 maven 正在使用每个不同的调用重新创建构建资源,而不是使用前一阶段的那些。这不仅破坏了构建生命周期的一致性,而且会产生更多不必要的处理开销。

有没有办法使用 Maven 通过 CI 完成流水线操作?假设有,有没有办法让 Hudson 知道在下一阶段使用从上一阶段构建的资源?

【问题讨论】:

    标签: maven-2 continuous-integration hudson


    【解决方案1】:

    我认为这没有得到很好的支持(请参阅sharing build artifacts between jobs in hudson),使用 Maven 时甚至更少。

    【讨论】:

      【解决方案2】:

      除了通过外部存储库(例如结构化文件共享)共享构建工件的一般方法之外,您可以使用 Hudson 的板载选项归档所需的工件或使用Clone Workspace Plugin。看看问题HUDSON-682 可以创建这个插件。

      【讨论】:

        【解决方案3】:

        我在 CI 中通过管道构建 Maven 取得了巨大成功(尽管使用 Bamboo,而不是 Hudson)。我使用GMaven 来运行一个创建一次性pom.xml 的脚本。生成的pom.xml 包含:

        • <property> 用于在阶段 1 中定义的每个属性
        • <dependency> 用于第 2 阶段所需的每个依赖项(即测试类路径)。关键是使用scope=system 并包含上一阶段构建的工件的路径。

        然后将其与构建的工件一起压缩并传递到第 2 阶段。您可以轻松地将其转换为 Maven 插件,尤其是在您使用 GMaven 时。

        我写了一篇关于构建管道 here 的博客,但没有太多关于它的 Maven 部分的详细信息。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-02-01
          • 1970-01-01
          • 2012-06-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多