У меня есть работа Jenkins Maven, в которой есть сценарий пост-сборки, написанный на BASH. Периодически во время выполнения почтового сценария кажется, что какая-то операция 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 искать обновления, но есть ли способ настроить его так, чтобы обновления репо происходили перед мой скрипт сборки поста?
Наконец разобрался! Я использую плагин 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 обращается за обновлениями модулей (я думаю). Вот где ложный Скачивание вывод исходит из, что гадости с моим назначением сверху.
Теперь я изменил команду следующим образом
version_override=$(mvn org.apache.maven.plugins:maven-help-plugin:2.1.1:evaluate -Dexpression=project.version | egrep -v '[INFO]|Downloading:' | tr -d ' \n')
Скорее всего, все еще не пуленепробиваемый, кто знает, какой еще результат может быть получен из этой команды, например, когда-нибудь вместо того, чтобы вести [ИНФОРМАЦИЯ] линии, может быть, выплевывает [ОШИБКА] или что-то...
Во всяком случае, пока он затянут. Сначала я действительно думал, что это проблема Jenkins / Maven, но оказалось, что это просто проблема со сценарием BASH!