В настоящее время я улучшаю процесс выпуска наших проектов в 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-тегов .
- Затем Дженкинс создаст артефакты из этого тега и развернет их на нашем Nexus.instance.
- Как только это будет сделано, разработчик установил версии pom.xml для новой версии разработки (т.е.
2.1-SNAPSHOT
).
Преимущество этого метода заключается в том, что яесть только задание Jenkins, поскольку сборка будет опираться только на тег.
Однако эта процедура включает слишком много вмешательств человека (изменения pom.xml, commitits, tags и т. д.).
Новые задания релиза
Теперь я использую плагин релиза Maven.Я создал задание, которое запрашивает у пользователя, запускающего сборку, три информации:
- версия релиза (параметр
releaseVersion
плагина релиза); - версия разработки, после выпуска (параметр
developmentVersion
плагина релиза); - имя тега (параметр
tag
плагина релиза).
Thisзадание работает нормально, за исключением одного момента: задание основано на соединительной линии или ветви в 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 тегов существует для выбора тегов ...
Поэтому мой вопрос: есть ли лучший способ настроить одну работу Jenkins, которая может работатьна всех ветках?
Спасибо.
Редактировать : Я обнаружил плагин Jenkins для Validating String , который может быть интересен, чтобы гарантировать, что значение, определенное пользователем, уважает некоторое регулярное выражение.Это полезно в моем случае ...