【发布时间】:2011-10-10 02:19:09
【问题描述】:
我们使用 Jenkins 作为我们的 CI 系统,使用 Maven 作为我们的构建工具。我们的代码有一个 SVN 存储库,我们的人工制品有一个 Artifactory。
源代码被组织为一个多模块的 maven 项目。大多数模块对实际应用程序有贡献,但有些模块是我们在构建和测试过程中需要的应用程序。
我们目前有多个职位:
- 一组快速提交测试
- 更广泛的集成测试
- 代码覆盖率和静态代码分析
- 部署到测试环境
- 针对该测试环境的冒烟测试
我们构建过程的一个弱点是我们在不同的工作中编译项目的不同部分,其中一些部分一遍又一遍地编译。相反,我更愿意在将其部署到工件后构建所有内容,然后将这些工件用于其他所有内容。
但我不知道如何确保:
- 神器的大小不会爆炸,因为我们每天都会在里面倾倒数百个罐子
- 下游构建使用由上一个上游构建作业生成的确切工件集,而不是一些奇怪的版本混合,因为它与下一个构建作业同时运行,下一个构建作业可能部署了新版本的工件 a 但不是工件b.
感谢任何帮助、指点或想法。
【问题讨论】:
-
回应您的第二个顾虑:您可以非常轻松地配置 Jenkins,以便只有一个构建执行器,从而不会同时执行构建。
-
@Caps 我知道这个选项,但它使所有事情都按顺序排列,这会大大减慢速度。
-
我们有一个使用 Jenkins 构建的 400 多个多模块项目。我们使用增量构建选项仅构建更改的模块 - 这大大缩短了编译时间。还有我们尚未尝试过的 Maven 3 并行构建选项。
-
我从来没有注意到这个功能。去看看吧。
-
@JensSchauder 也可以试试锁和闩锁插件。这将阻止作业在您需要时同时执行。