【问题标题】:Jenkins: Should I use different local maven repositories for my builds?Jenkins:我应该为我的构建使用不同的本地 maven 存储库吗?
【发布时间】:2020-11-08 17:30:45
【问题描述】:

我有一个 Jenkins 实例运行多个微服务和库的构建。

目前,我将构建配置为所有作业都使用不同的本地存储库位置$WORKSPACE/.m2/repository

这很好,因为构建无法相互影响,但是,构建显然会更长,因为它们每次都需要下载所有依赖项。

您认为更好的解决方案是什么?我应该保留当前配置,还是对所有作业使用相同的本地 repo 位置是否足够安全?

有没有办法确保构建不会相互影响,即使本地 repo 相同?

我想到的是我可以配置项目,以便每次都更新所有 SNAPSHOT。这够了吗?我怎样才能通过我的settings.xml 做到这一点?


我在 cmets 中遇到了一些问题,我认为在这里回答比较好,所以:

为什么我要在每次构建之前删除我的存储库文件夹?

因为 repo 位于 jenkins 工作文件夹中(当前)。我清理了作业文件夹,因为有时我需要在构建过程中修改 pom。 (为发布更改版本)。

你有很多分店吗?您使用存储库管理器吗?

是的,我愿意。

你有多少个jenkins节点?

目前只有一个,但将来可能会改变。

你如何在 Jenkins 上构建(意思是)你在 Jenkins 中使用了哪个确切的 maven 执行命令?

我使用mvn clean deploy,还有一些附加属性

【问题讨论】:

  • 您是否在每次构建之前/之后删除.repository
  • 是的,我每次都从头开始。也许这是我可以提高性能的另一个方向
  • 你为什么要这样做?你如何在 Jenkins 上构建(意思)你在 Jenkins 中使用了哪个确切的 maven 执行命令?你有很多分支吗?另一件事是:您使用存储库管理器吗?你有多少个jenkins节点?
  • 我在编辑中回答了你的问题
  • 基于这种情况,我只会使用位于 Jenkins 中每个工作区的存储库。但是我不会在构建之前/之后为每个构建删除该空间。此外,我想知道您的构建需要多少时间?你有多少模块/测试/等?

标签: maven jenkins continuous-integration


【解决方案1】:

无论您做什么,请确保一个本地存储库一次不被多个构建使用。本地存储库对于并发使用是不安全的。如果两个构建尝试更新同一个 SNAPSHOT,您很容易破坏元数据。

【讨论】:

    【解决方案2】:

    我目前的解决方案是在 jenkins 家之外创建了一个目录,/maven/.m2/repository/。但这不是本地存储库本身。

    实际的存储库是:<localRepository>/maven/.m2/repository/${env.JOB_NAME}</localRepository>。这样,我会为每个作业获得不同的存储库,但在为作业删除工作区时它不会被删除。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-05
      • 2021-04-17
      • 1970-01-01
      • 1970-01-01
      • 2018-02-09
      • 2015-10-12
      相关资源
      最近更新 更多