Как настроить одно задание Jenkins для создания процесса выпуска из магистрали или веток?

В настоящее время я улучшаю процесс выпуска наших проектов на Jenkins (1.430).

Текущие задания выпуска

Сегодня для одного конкретного проекта у нас есть одна работа, посвященная процессу выпуска. Полная процедура следующая:

  • Разработчик, который отвечает за выпуск, вручную изменяет версию всех файлов pom.xml(фактически используя mvn versions:set -DnewVersion=2.0), чтобы избавиться от -SNAPSHOT.
  • Затем он создает тег в SVN (http://my-svn-repo/project/tags/V_2_0, например).
  • Как только этот тег был создан, он регистрируется на нашем сервере Jenkins и запускает сборку Release.
  • Эта сборка спросит его, какой тег он хочет использовать для сборки. Задача сконфигурирована как сборка с параметрами, с тегами Subversion в списке параметров.
  • Затем Jenkins построит артефакты из этого тега и развернет их в нашем экземпляре Nexus.
  • Как только это будет сделано, разработчик установит версии pom.xml в новую версию разработки (т.е. 2.1-SNAPSHOT).

Преимущество этого метода в том, что у меня есть только работа Jenkins, так как сборка будет полагаться только на тег.

Однако эта процедура включает слишком много человеческих interventiosns (изменения pom.xml, коммитов, тегов и т.д.).

Новые задания для отпуска

Теперь я использую плагин выпуска Maven. Я создал задание, которое запрашивает три информации для пользователя, который запускает сборку:

  • версия выпуска (параметр releaseVersion плагина выпуска);
  • версия разработки после выпуска (параметр developmentVersion плагина выпуска);
  • имя тега (параметр tag плагина выпуска).

Это задание отлично работает, за исключением одной точки: задание основано на соединительной линии или на ветке в SVN. Это означает, что если у меня есть 2 ветки (в дополнение к багажнику), мне нужно будет создать 3 задания на выпуск: по одной ветки.

Одна идея сохранить лучшее из двух миров (т.е. использовать mvn-релиз, но сохранить 1 выпускное задание), чтобы добавить параметр сборки, который будет запрашивать у пользователя путь к соединительной линии/ветке. Поэтому вместо настройки http://my-svn-repo/project/trunk (или http://my-svn-repo/project/branches/BRANCH_V1) в конфигурации задания я установлю http://my-svn-repo/project/$FROM_BRANCH и попрошу пользователя ввести параметр FROM_BRANCH.

Проблема с этим решением заключается в том, что пользователю придется вводить либо trunk, либо branches/BRANCH_Vx, что может привести к ошибкам.

В идеале, мне бы хотелось иметь параметр построения, который позволяет мне выбирать ветку (включая тубус), поскольку существуют теги Subversion для списка параметров для выбора тегов...

Итак, мой вопрос: есть ли лучший способ настроить работу one Дженкинса, которая может работать на всех ветвях?

Спасибо.


Изменить: я нашел Validating String плагин Jenkins, который может быть интересен, чтобы гарантировать, что значение, определенное пользователем, соответствует некоторому регулярному выражению. Это полезно в моем случае...

Ответы

Ответ 1

Вам нужна версия 1.32 плагина subversion. В этой версии была реализована проблема JENKINS-10678.

Затем вы указываете только свой URL-адрес проекта (который должен содержать сундук, ветки и теги), и он предложит вам соединительную линию вместе с вашими ветками.

Ответ 2

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

Плагин subversion устанавливается по умолчанию в последних версиях (как и в сентябре 2015 г.).

Затем вы должны настроить свой проект следующим образом:

  • check "Эта сборка параметризуется" (этот проект параметризуется в новейших версиях)
  • выберите "Теги субверсии списка (и многое другое)"
  • в поле имени укажите переменное имя, на которое можно ссылаться позже в URL-адресе svn. Я выбираю svnbranch здесь.
  • в поле URL-адрес репозитория, укажите его URL-адрес проекта (который должен содержать соединительные линии, ветки и теги).
  • заполнить другое поле в соответствии с вашими потребностями.
  • в управлении исходным кодом, ссылайтесь на переменную, определенную ранее в вашем URL-адресе репозитория.

проверьте следующие скриншоты:

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

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