簡體   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