【问题标题】:How to build an efficient maven/jenkins build queue如何构建高效的 maven/jenkins 构建队列
【发布时间】:2011-10-10 02:19:09
【问题描述】:

我们使用 Jenkins 作为我们的 CI 系统,使用 Maven 作为我们的构建工具。我们的代码有一个 SVN 存储库,我们的人工制品有一个 Artifactory。

源代码被组织为一个多模块的 maven 项目。大多数模块对实际应用程序有贡献,但有些模块是我们在构建和测试过程中需要的应用程序。

我们目前有多个职位:

  • 一组快速提交测试
  • 更广泛的集成测试
  • 代码覆盖率和静态代码分析
  • 部署到测试环境
  • 针对该测试环境的冒烟测试

我们构建过程的一个弱点是我们在不同的工作中编译项目的不同部分,其中一些部分一遍又一遍地编译。相反,我更愿意在将其部署到工件后构建所有内容,然后将这些工件用于其他所有内容。

但我不知道如何确保:

  • 神器的大小不会爆炸,因为我们每天都会在里面倾倒数百个罐子
  • 下游构建使用由上一个上游构建作业生成的确切工件集,而不是一些奇怪的版本混合,因为它与下一个构建作业同时运行,下一个构建作业可能部署了新版本的工件 a 但不是工件b.

感谢任何帮助、指点或想法。

【问题讨论】:

  • 回应您的第二个顾虑:您可以非常轻松地配置 Jenkins,以便只有一个构建执行器,从而不会同时执行构建。
  • @Caps 我知道这个选项,但它使所有事情都按顺序排列,这会大大减慢速度。
  • 我们有一个使用 Jenkins 构建的 400 多个多模块项目。我们使用增量构建选项仅构建更改的模块 - 这大大缩短了编译时间。还有我们尚未尝试过的 Maven 3 并行构建选项。
  • 我从来没有注意到这个功能。去看看吧。
  • @JensSchauder 也可以试试锁和闩锁插件。这将阻止作业在您需要时同时执行。

标签: maven jenkins


【解决方案1】:

有很多方法可以回答这个问题。我目前在我的开发环境中使用相同的设置。

  • 您可以使用锁和闩锁插件来确保事情不会在您需要时同时执行。 https://wiki.jenkins-ci.org/display/JENKINS/Locks+and+Latches+plugin
  • 将此与 Maven 增量构建和并行构建相结合,以加快单个构建。
  • 添加一些 Jenkins 奴隶以获得更多“执行者”。
  • 为避免 Artifactory 在您的快照存储库中膨胀 - 可以将 Artifactory 配置为保留一定数量的快照。
  • 注意:避免在 Artifactory 和 Maven 3 中使用“非唯一”快照存储库。请参阅 http://wiki.jfrog.org/confluence/display/RTF/Local+Repositories
  • 对于更改频率较低的模块,请制作发布版本。把那些留在神器里。使用 Maven 发布插件将所有内容部署到 Artifactory 并制作所有正确的版本控制标签(除非您使用的是 Git,它与发布插件不兼容)。
  • 对要通过 Jenkins 中的本地存储库传播的快照工件使用 Jenkins“禁用自动工件归档”。
  • 在 Maven 构建中使用“-U”选项以确保使用最新的快照。

我个人的偏好是保持简单:我制作了一个执行整个应用程序的 maven 模块,其中只有不经常更改的代码被放入一个完全独立的模块树/作业中。为简单起见,我将作业数量保持在最低限度。

我们尝试使用单独的作业进行测试,但这使得追踪测试失败的根源变得很棘手,并且也使得“为产品分支”变得更加困难。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-30
    • 1970-01-01
    • 2014-11-13
    • 2014-07-11
    • 1970-01-01
    • 2016-02-21
    • 2015-12-30
    • 1970-01-01
    相关资源
    最近更新 更多