首次设置Jenkins CI系统时,我想知道如何处理快照依赖项和本地Maven存储库。
我们有一个带有依赖关系Y的工件X.Jenkins被配置为每次Y提交时都构建X.
策略A(工作区Maven存储库):
本地Maven存储库配置为“工作区本地”。这意味着每个构建的作业都有自己的存储库。提交Y会触发构建(“mvn clean install”),但由于构建X和Y的存储库是隔离的,因此X使用Y的最后部署的版本,而不是最后一次提交。
使用此策略似乎有助于检测是否还部署了所有依赖项,但它没有检测到集成问题(损坏的Y提交中断X)。
策略B(常见的Maven存储库):
Jenkins使用公共的本地Maven存储库。提交(损坏的)Y快照会触发使用当前Y快照的X的构建,并检测到集成问题。缺点是,这不会检测是否所有构建依赖项都部署到中央快照存储库(因为CI系统确实将它们都安装在本地存储库中)。
是否有结合A和B优势的策略?
答案 0 :(得分:2)
我们最终使用了策略C :
策略C(让Jenkins部署):
每个作业都有其本地工作空间的本地存储库,如策略A中所示。但是,Jenkins配置为在每个作业上执行“-U clean deploy”,而不是默认的“干净安装”目标。因此,如果Y被破坏并提交,Jenkins将构建它并将其部署到中央快照存储库。 Jenkins检测到依赖关系Y的构建,并使用最新的Y快照构建X.
这个策略很有用 - 至少在Maven 3中 - 在中央快照存储库上运行自动清理作业,因为会有很多带时间戳的快照。