Подтвердить что ты не робот

Дженкинс: Как использовать переменную из оболочки pre-build в Maven "Цели и параметры"

У меня есть работа Maven в Дженкинсе. Перед фактическим этапом сборки у меня есть шаг предварительной сборки "Выполнение оболочки". В этой оболочке я устанавливаю переменную:

REVISION=$(cat .build_revision)

Я хотел бы использовать эту переменную в задании сборки Maven в "Цели и параметры":

clean install -Drevision=${REVISION}

Но это не работает! "Drevision" установлен на "$ {REVISION}", а не на фактическое значение ${REVISION}. Выход:

Executing Maven:  -B -f /home/gerrit/.jenkins/jobs/<job_name>/workspace/pom.xml clean install -Drevision=${REVISION}

Он работает с переменными окружения Jenkins:

clean install -Dbuild=${BUILD_NUMBER}

Он устанавливает "Dbuild" в фактический номер сборки. Выход:

Executing Maven:  -B -f /home/gerrit/.jenkins/jobs/<job_name>/workspace/pom.xml clean install -Dbuild=54

Мой вопрос: как использовать переменную оболочки в Maven "Цели и параметры"?

EDIT:

Я попытался использовать Jenkins EnvInject Plugin для "Внедрить переменные среды" после оболочки pre-build, и моя переменная теперь доступна, например, post-build shells, но он по-прежнему недоступен в Maven "Цели и параметры".

Затем можно установить "Инъекционные переменные среды для процесса сборки" с помощью EnvInject Plugin, что фактически делает эти переменные доступными в Maven "Цели и параметры", но они устанавливаются сразу после проверки SCM, строить шаги и не поддерживать оценки выражений.

4b9b3361

Ответ 1

Вы на правильном пути здесь, но пропустили третью функцию EnvInject-Plugin: шаг сборки "Inject environment variables", который может вставлять переменные в следующие шаги сборки на основе результата script или свойств,

Мы используем плагин EnvInject именно так; A script устанавливает ресурс и передает его параметры с использованием свойств, которые затем распространяются плагином как переменные среды.

то есть. создание временной базы данных для сборки: Create a database for the build

Ответ 2

У меня была очень похожая проблема, пытаясь вычислить версию сборки и вставить ее в сборку. После того, как вы столкнулись со всеми теми же проблемами (не расширяя и т.д.), Я использовал параметр "Создать переменные среды из script", который интерпретирует результат как пары tag = value в переменных Jenkins. script:

  #generate a version code that is high enough to surpass previously published clients
  val=`expr 150000 + $BUILD_NUMBER`
  echo VERSION_CODE=$val

После этого мне удалось ввести $VERSION_CODE в maven следующим образом:

  -Dbuild.vercode=${VERSION_CODE}

Надеюсь, что это сработает для вас.

Ответ 3

Эта проблема вызвана ошибкой в ​​проекте Jenkins Maven Project Plugin, как описано в этот отчет об ошибках открыт в 2012-06-22. Плагин еще не исправлен с версии 2.1.

Исправление было предложено для плагина Maven Project, но еще не интегрировано. Вот ссылка на запрос на pull: https://github.com/jenkinsci/maven-plugin/pull/14

Если вы создаете плагин самостоятельно с применением патча запроса на перенос, переменные вводятся и становятся доступными для поля "цели и параметры", как ожидалось.

Ответ 4

Я думаю, что ваш лучший снимок - попробовать EnvInject плагин для этого вместе с вашим начальным шагом до scm.

  • Вы запускаете предварительный scm, как вы уже знаете.
  • Вы используете инъекцию env для загрузки файла для основных шагов построения задания

Рассмотрите возможность загрузки содержимого вашего файла (формата свойств) или выполните script, который будет загружать файл по вашему желанию и сделать переменную доступной для остальной части задания с помощью "Подготовьте среду для запуска",.

Надеюсь, это поможет.

Ответ 5

Я вижу, что есть принятый ответ, но для новичков в Дженкинсе мне было трудно понять все это. Поэтому я добавил бы немного подробней в этот ответ и покажу, как я это сделал.

Поскольку @jjungnickel предположил, что для Дженкинса необходимо установить EnvInject Plugin. Затем в разделе Сборка > Добавить шаг сборки вы получите опцию "Инъекционные переменные среды".

В основном идея такова:

  • Добавить переменные, которые вы хотите получить позже, в файл (может быть добавлен оболочкой script или это может быть файл из файловой системы).
  • Ввести файл с переменными.
  • Используйте переменные.

Здесь пример настройки:

введите описание изображения здесь

Поскольку я хочу использовать их в maven цели, мне нужно установить флажок Inject Build Variables.

Затем в конце сборки я удаляю файл только потому, что хочу сохранить среду, как это было до сборки.