防止Jenkins将Artifact安装到Local Maven Repository

时间:2011-09-28 11:08:12

标签: maven hudson jenkins nexus sonatype

Jenkins正在将最近构建的工件安装到本地Maven存储库,即使执行作业的目标只有clean package

如果有人意外提交了共享库的更新版本而没有增加库POM中的版本号,则会导致此问题。 Jenkins构建了jar,将其安装到本地Maven存储库,然后(按照配置)将工件部署到我们的共享Nexus存储库。 Nexus非常正确地拒绝接受新工件,因为它已经发布了具有给定版本号的版本。

一段时间后,Jenkins构建了一个依赖于该库的项目,并使用其本地 Maven存储库而不是Nexus的库副本。因此,该项目使用错误的代码版本构建。

似乎有两种可能的解决方案:

  1. 阻止Jenkins错误地将.jar安装到本地 存储库
  2. 防止在使用本地存储库时使用 构建依赖于库的项目

4 个答案:

答案 0 :(得分:3)

这是发布到本地存储库的安装目标......所以我对第一个问题没有答案。

第二个问题可以通过隔离每个构建来解决。将它们配置为使用自己的本地存储库,以便一个错误不会影响其他存储库:

mvn -s settings.xml compile package

在设置文件中声明构建作业的本地存储库的唯一路径

<settings>
  <localRepository>/data/job1/repository</localRepository>
  ..

定期清除本地存储库,强制清理构建可能是一个好主意。

答案 1 :(得分:0)

Jenkins作业配置中有一个设置可以使用私有存储库。通过这种方式,您可以避免Jenkins构建中的人工制品进入主存储库。您需要打开Maven构建的扩展选项才能看到该选项。

答案 2 :(得分:0)

我想知道是否有实际使用(共享)本地存储库的选项,但关闭写入它(即仅将工件部署到远程存储库)。这是为了减少并发更新的数量(但仍保持理智的磁盘使用情况:)

答案 3 :(得分:0)

您可以防止在Nexus中部署重复的工件。每个工件都应附加一个内部版本号以避免混淆。避免使用SNAPSHOT版本,因为它们会导致头痛。