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

Jen*_*der 18 maven jenkins

我们使用Jenkins作为CI系统,使用Maven作为构建工具.我们的代码和Artifactory的SVN存储库用于我们的工件.

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

我们目前有多个职位:

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

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

但我不知道如何确保:

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

任何帮助,指针或想法赞赏.

Jos*_*vis 15

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

  • 您可以使用锁定和锁存插件来确保在需要时不会同时执行任务.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分支"变得更加困难.