Увеличение версии проекта Maven с помощью Jenkins / Git - PullRequest
6 голосов
/ 21 марта 2012

Я использую Jenkins для создания Java-проектов Maven и развертывания их в репозитории Nexus. Я также использую Git, хотя я больше привык к Subversion, поэтому мои знания Git ограничены.

Я бы хотел, чтобы Дженкинс / Мейвен:

  1. Объединить функциональную ветвь с интеграционной ветвью
  2. Сборка объединенного кода, запуск модульных тестов
  3. Если они пройдут, увеличить номер версии Maven
  4. Передать объединенный код в ветку интеграции origin
  5. Развертывание артефакта в хранилище Nexus

Я понимаю, что слияние Git может быть достигнуто так: http://twasink.net/2011/09/20/git-feature-branches-and-jenkins-or-how-i-learned-to-stop-worrying-about-broken-builds/

Я также много читал о maven-release-plugin.

Я не уверен, как именно достичь вышеуказанных результатов. Если я жестко закодирую детали SCM в POM каждого проекта, то maven-release-plugin не будет действовать только на этом хранилище, а не на локальном хранилище Jenkins?

Если я использую решение о том, чтобы Дженкинс передал переменную окружения в Maven для указания номера версии, то я ожидаю, что в моей IDE возникнут проблемы с разрешением локальной версии.

1 Ответ

8 голосов
/ 05 мая 2012

ОК, это довольно сложно сделать. Но это выполнимо. Позвольте мне объяснить идею шаг за шагом.

  1. Сначала нам нужно объединить две ветви. Это довольно легко сделать с помощью плагина Jenkins Git, так как он имеет встроенную функцию : Объединить перед сборкой опция доступна в Advanced раздел в конфигурации вашего проекта.

  2. Итак, мы объединили код между этими двумя ветвями, и мы можем перейти к созданию проекта - обычного бизнеса, проекта Jenkins в стиле Maven.

  3. Теперь нам нужно увеличить версию проекта и его модулей, зафиксировать объединенную ветвь и отправить артефакты в хранилище. И здесь у нас есть два варианта:

    1. Используйте maven-release-plugin для работы. Да, это возможно, так как никто не сказал, что вам нужно будет поместить URL-адреса в ваш pom, поскольку это может быть предоставлено двумя различными способами. Плагин будет использовать тот, который снабжен переключателем командной строки -DconnectionUrl=. И если ничего не будет предоставлено, он проверит файл release.properties, чтобы получить его оттуда. Последний резерв - перейти к переменной pom.xml и get ${project.scm.connection}. Таким образом, вы можете легко использовать плагин для выполнения всей грязной работы без каких-либо хлопот и представить это свойство, используя различные методы, предоставляемые Jenkins.
    2. Вы можете использовать комбинацию maven-version-plugin (в частности, версии: установить и версии: зафиксировать цели) с maven-scm -plugin чтобы пометить и зафиксировать изменения.

    В обоих случаях вы можете использовать Post Steps с Запускать только при успешном построении и вызывать цель Maven верхнего уровня как обычно. Для всех настроек, упомянутых выше или описанных конкретным плагином, есть возможность легко указать их в текстовом поле. Для загрузки ваших артефактов в репозиторий Nexus я бы добавил встроенную функцию Jenkins в Развертывание артефактов в репозиторий Maven , которая доступна в конфигурации вашего проекта. Это потребует от вас указать конфигурацию хранилища в определении POM или в качестве свойства.

Надеюсь, что охватывает все ваши вопросы. Если вы хотите, чтобы я был более конкретным в любой области ответа, не стесняйтесь спрашивать.

...