Maven 干擾 Jenkins 後期建構腳本
我有一個 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 腳本問題!