如何构建高效的maven / jenkins构建队列

时间:2011-07-21 09:54:40

标签: maven jenkins

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

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

我们目前有多个职位:

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

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

但我不知道如何确保:

  • 神器的大小不会爆炸,因为我们每天都会丢弃数百个罐子
  • 下游构建使用上一个上游构建作业产生的确切工件集,而不是一些奇怪的版本混合,因为它同时运行到下一个构建作业,该作业可能已经部署了新版本的工件而不是工件湾

赞赏任何帮助,指示或想法。

1 个答案:

答案 0 :(得分:14)

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

  • 您可以使用锁定和锁存插件来确保在您需要时不会同时执行任务。 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模块来完成整个应用程序,其中只有不经常更改的代码被放入一个完全独立的模块树/作业中。为简单起见,我将工作数量保持在最低限度。

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