【问题标题】:Prevent Jenkins from Installing Artifact to Local Maven Repository阻止 Jenkins 将工件安装到本地 Maven 存储库
【发布时间】:2011-11-26 18:59:50
【问题描述】:

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

当有人不小心提交了共享库的更新版本而没有增加库的 POM 中的版本号时,这会导致问题。 Jenkins 构建了 jar,将其安装到本地 Maven 存储库,然后(按照配置)将工件部署到我们共享的 Nexus 存储库。 Nexus 完全正确地拒绝接受新工件,因为它已经有一个具有给定版本号的版本。

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

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

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

【问题讨论】:

    标签: maven hudson jenkins nexus sonatype


    【解决方案1】:

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

    【讨论】:

    • 谢谢,但这个问题是指本地存储库,而不是远程存储库。
    • 我很抱歉——我读得太快了。在这种情况下,每次构建隔离本地 maven 存储库似乎是一种更明智的方法。然后应将每个构建配置为仅从“发布”存储库中检索经过全面测试的工件。这意味着在为消费者发布公共库时要进行良好的规划/沟通。
    【解决方案2】:

    我想知道是否有一个选项可以实际使用(共享)本地存储库但关闭对其的写入(即仅将工件部署到远程存储库)。这是为了减少并发更新的数量(但仍然保持正常的磁盘使用:)

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 我已经尝试过了,遗憾的是它没有任何区别。我手边没有 JIRA 链接,但我相信这是 Jenkins 中的一个已知问题。
      【解决方案4】:

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

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

      mvn -s settings.xml compile package
      

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

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

      定期清除本地存储库,强制进行干净的构建可能是个好主意。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-05-20
        • 1970-01-01
        • 1970-01-01
        • 2016-11-07
        • 1970-01-01
        • 2019-03-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多