繁体   English   中英

CI服务器上的Maven并发构建

[英]Maven concurrent builds on CI server

在我看来,我有一个有趣的案例。 我们正在使用 maven,由于我们必须支持我们产品的多个版本,因此我们有时会使用 1.x 和 2.x 构建结构。 当 1.x 和 2.x 并行构建时,有时我们会看到

安装工件的元数据时出错:安装元数据时出错:更新组存储库元数据时出错

据我所知,本地用户存储库中的 maven-metadata-local.xml(对于工件,而不是工件的版本)正在同时被另一个 maven 进程写入。 有没有办法让 maven 并行构建这两个,但等待文件上的写锁来更新它?

听起来您正在为所有构建作业使用相同的本地存储库,而您已经知道这些作业将无法正常工作。 Jenkins/Hudson/CI 的重点是为每个构建作业使用本地 maven 存储库。 您需要在 Jenkins 中使用本地 maven 存储库进行配置以避免此类情况。

您还可以安装并发安全本地存储库访问maven 插件,这将允许您使用相同的本地存储库。 (如果您正在动态配置代理,则很有用)

使用 Maven 设置 (Admin/Configure) 下的第二个或第三个选项: 在此处输入图像描述

这些选项来自: Maven 项目插件

现在可以从maven 3.8.2开始同时访问存储库

需要手动安装和配置库以实现并发安全访问

这里是在/opt/mvn中设置 maven 3.8 并具有并发安全 repo 访问权限的片段(需要本地 redis 安装)。 可以在 Dockerfile RUN中使用,也可以直接使用:

cd /opt \
  && wget https://dlcdn.apache.org/maven/maven-3/3.8.6/binaries/apache-maven-3.8.6-bin.zip \
  && unzip apache-maven-*.zip && rm apache-maven-*.zip \
  && ln -s /opt/apache-maven-* /opt/mvn \
  && wget https://gist.githubusercontent.com/valodzka/85bc9fa1af8b6f8c876e99267d22933f/raw/4d18ae882cd624382d508c0217682a874a0744b2/redisson-sync-context-urls.txt \
  && wget --directory-prefix=/opt/mvn/lib/ext/redisson --input-file=redisson-sync-context-urls.txt \
  && sed --in-place '/logging/a load ${maven.home}/lib/ext/redisson/*.jar' /opt/mvn/bin/m2.conf \
  && rm redisson-sync-context-urls.txt

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM