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 искать обновления, но есть ли способ настроить его так, чтобы обновления репозитория происходили до моего сценария посткомпиляции?

1 ответ

Решение

Наконец-то разобрался! Я использую плагин 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')

Вероятно, все еще не является пуленепробиваемым, хотя, кто знает, какой другой вывод может прийти из этой команды, например, когда-нибудь вместо лидирующих строк [INFO], может быть, он выплевывает [ERROR] или что-то в этом роде

Во всяком случае, он пока затянут. Сначала я действительно думал, что это проблема Jenkins/Maven, но оказалось, что это была проблема с BASH!

Другие вопросы по тегам