Jenkins

Maven 干擾 Jenkins 後期建構腳本

  • October 8, 2013

我有一個 Jenkins Maven 工作,它有一個用 BASH 編寫的後期建構腳本。定期,當 post 腳本執行時,似乎某種 Maven 操作正在干擾 BASH 腳本,導致建構失敗。

這是 Jenkins 控制台的一些範例輸出

+ version_override='Downloading: http://clojars.org/repo/org/apache/maven/plugins/maven-metadata.xml
Downloading: http://clojars.org/repo/org/codehaus/mojo/maven-metadata.xml
Downloading: http://oss.sonatype.org/content/repositories/releases/org/apache/maven/plugins/maven-metadata.xml
Downloading: http://oss.sonatype.org/content/repositories/releases/org/codehaus/mojo/maven-metadata.xml

看看我的 BASH 變數是如何從 Maven 下載中獲得賦值的?現在我不會肯定地說這就是正在發生的事情。也許只有兩個輸出流同時進入控制台,一個來自 Maven 更新儲存庫,另一個來自我的 BASH 建構後腳本。無論哪種方式,Maven 下載似乎都會干擾我的 BASH 腳本,因為它最終會使建構崩潰。

+ read config_path
+ '[' '!' -z http://clojars.org/repo/org/apache/maven/plugins/maven-metadata.xml ']'
+ http://clojars.org/repo/org/apache/maven/plugins/maven-metadata.xml
/usr/share/build-utils/lib/java.sh: line 115: http://clojars.org/repo/org/apache/maven/plugins/maven-metadata.xml: No such file or directory

這絕對看起來像 Maven 輸出正在潛入我的 BASH 腳本!

我幾乎可以肯定這是 Maven 正在尋找更新。奇怪的是為什麼它會與後期建構腳本並行執行。即便如此,它怎麼可能會干擾所述腳本的執行時間?真是離奇!

我確定我的後期建構腳本沒有任何問題的另一個原因。每次出現此錯誤時,我都會再次執行建構並且它可以工作。只有在 Maven 更新時,建構才會失敗。

我不在乎 Maven 是否要查找更新,但是有沒有辦法配置它,以便在我的後期建構腳本之前發生 repo 更新?

終於想通了!我正在使用 Maven 外掛通過 Maven 外掛提取模組版本,基於這篇 SO 文章

該命令產生這樣的輸出

[INFO] --- maven-help-plugin:2.1.1:evaluate (default-cli) @ master-parent ---
[INFO] No artifact parameter specified, using 'com.myorg:master-parent:pom:0.3.02' as project.
[INFO] 
0.3.02
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO] 

我最初的 BASH 呼叫以提取版本號

version_override=$(mvn org.apache.maven.plugins:maven-help-plugin:2.1.1:evaluate -Dexpression=project.version | grep -v '[INFO]')

然而,每隔一段時間(但不確定在哪裡控制它),Maven 會聯繫更新模組(我認為)。這就是虛假的Downloading輸出的來源,這與我從上面的分配相混淆。

我現在修改了命令如下

version_override=$(mvn org.apache.maven.plugins:maven-help-plugin:2.1.1:evaluate -Dexpression=project.version | egrep -v '[INFO]|Downloading:' | tr -d ' \n')

不過可能仍然不是防彈的,誰知道這個命令可能會產生什麼其他輸出,例如有一天而不是領導*$$ INFO $$線條,也許它會吐出來$$ ERROR $$*或者其他的東西…

總之,暫時收緊了。起初我確實認為這是一個 Jenkins/Maven 問題,但事實證明這只是一個 BASH 腳本問題!

引用自:https://serverfault.com/questions/543937