git, maven и jenkins - управление версиями, разработка и выпуск


12

Каков предпочтительный способ сделать следующее с git, maven и jenkins:

Я разрабатываю приложение, которое я хотел бы поддерживать в ветвях «dev» и «release». Я хотел бы, чтобы Дженкинс построил оба. Возможно, что артефакты релиза будут иметь версии, подобные 1.5.2, а dev-build будет просто 0.0.1-SNAPSHOT. Я хотел бы, чтобы не было 2 разных файлов pom.xml.

Я просмотрел профили, но, похоже, они не могут менять версии артефактов. Одним из способов, которым я мог воспользоваться, было добавление «квалификатора» в тестовые сборки. Конечно, я мог бы просто переименовать файл, потому что реальная информация об артефактах на этом не важна, потому что приложение является автономным.

Какой предпочтительный способ сделать это? Или как бы вы это сделали?

Ответы:


3

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

Высвобождение

Я предполагаю, что вы могли бы сделать что-то вроде слияния готового кода из ветви dev в ветку release, а затем выполнить релиз Maven (через Jenkins или вручную). Это автоматически сворачивает номера версий до следующей сборки. Таким образом, вы объединяете код 1.4.7-SNAPSHOT с этой веткой, выполняете выпуск и сокращаете версию 1.4.7, и Maven автоматически переводит вашу рабочую копию в 1.4.8-SNAPSHOT.

Обновление базовой линии (необязательно)

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

Повышение от базовой линии до ветки разработчика

Важно, чтобы ваша ветка разработки была в курсе актуального производственного кода. Вам необходимо объединить код от базовой линии (или ветки релиза, в зависимости от реализации) до вашей ветки разработки. Это важно в вашем случае, потому что это означает, что изменения pom, которые произошли во время процесса выпуска, который изменил версию на 1.4.8-SNAPSHOT, перенесены в эту ветку.


Основываясь на чтении, которое я сделал (а также на процессах в моей организации), это кажется довольно стандартным и эффективным использованием выпусков и снимков Maven, и вместо того, чтобы поддерживать полностью отключенные номера версий в разных ветвях, легко сказать что любая сборка 1.4.7-SNAPSHOT на самом деле была непосредственным предшественником релиза 1.4.7. Они связаны. Я бы сказал, что если вы не объединяетесь между этими ветвями, вы ошибаетесь как в версиях SCM, так и в Maven, и вы подвергаете себя риску разработки против кода, который не соответствует продукту. повторно вводит ошибки в производство и т. д.


Под "maven release" вы подразумеваете плагин maven-release-plugin?
Вареса

Ага. Вы также можете настроить определенные сборки в Jenkins как сборки Maven Release, которые вызывают плагин maven-release-plugin.
RonU

Это как "ключ", который искали. Благодарность!
Вареса

1

Переосмыслите свой подход.

Очень распространено использовать, например, 1.4.2 для версии выпуска, а затем 1.4.3-SNAPSHOT для разработки следующей версии.

Когда вам нужно поддерживать релиз 1.4.2, ТОГДА ветвите его из коммита, который создал ваш артефакт 1.4.2.

Затем вы сообщаете Jenkins местоположение вашего репозитория и имя ветки, в результате чего набор файлов извлекается, а затем вы говорите Jenkins использовать maven в вашем проекте для его сборки.

Примечание. Я обнаружил, что очень полезно использовать один файл pom.xml для создания фактического артефакта, а другой файл pom.xml - для создания фактических битов, отправляемых клиенту.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.