Невозможно получить автоматическую версию с помощью Hudson + Git + Maven Release Plugin

Как говорится в названии, я пытаюсь получить работу по автоматическому выпуску, работающую над Hudson. Это проект Maven, и весь код находится в Git. Вручную, я делаю выпуск на своей личной машине так:

git checkout master
mvn -B release:prepare release:perform

Это прекрасно работает. Плагин релиза Maven корректно помещает тег релиза в исходный репозиторий, а также следующий коммит, который ударяет версию на следующий SNAPSHOT.

Однако, когда я запускаю эту же работу Maven через Hudson (либо создав собственное задание "release", либо используя M2 Release Plugin), это не работает так хорошо. Тег релиза выталкивается в исходный репозиторий, и релиз выталкивается в наш репозиторий Nexus, но последующая фиксация, которая ударяет версию на следующий SNAPSHOT, не исчезает. Кроме того, ветвь "master" в исходном репозитории вообще не изменяется. Однако я просмотрел рабочую область Хадсона для этой работы, и версия была обновлена.

Посмотрев на результат задания Хадсона, похоже, что плагин Git фактически не проверяет "мастер", а скорее его SHA1 id. То есть, если метка ветки "master" указывает на фиксацию "f6af76f541f1a1719e9835cdb46a183095af6861", Хадсон делает

git checkout -f f6af76f541f1a1719e9835cdb46a183095af6861

вместо

git checkout -f master

В результате изменения, которые делает плагин выпуска Maven, фактически не находятся в какой-либо ветке (конечно, не на "master" ), и эти изменения не попадают в исходный репозиторий. Он работает на правильном коде, но бухгалтерия - мудрый, изменения, похоже, теряются, потому что ни одна метка отрасли не указывает на них.

Кто-нибудь получил сборку Hudson + Git + Maven Release Plugin для правильной работы? Есть ли какая-то дополнительная конфигурация, где я могу установить, чтобы это произошло? Или это ошибка в плагине Hudson Git?

Спасибо заранее.

Ответы

Ответ 1

После того, как я немного поработал с вещами, я попытался установить автоматическую версию как автономное задание (т.е. не использовать M2 Release Plugin). Вместо того, чтобы задание было настроено на "создание проекта maven2", я сделал это над проектом "Создавать проект в свободном стиле". Первое, что он делает, это выполнить команду оболочки:

git checkout master

Следующий шаг - вызов Maven, настроенный таким образом:

-e -B release:prepare release:perform

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

Хотя это технически отвечает на мой собственный вопрос, мне все же любопытно, как с опытом других людей с этой комбинацией плагина Hudson + Git + Maven Release.

Спасибо

Ответ 2

Отредактировано для удаления устаревшей информации.

См. этот ответ для текущего (не-хаки) решения.

Ответ 3

Если я правильно понимаю, это поведение преднамеренно, потому что Найджел не верит, что maven должен передать SCM. Существует относительно безболезненное обходное решение (хотя было бы лучше не обойтись ничем). Я использую плагин Hadson M2 Extra Steps и делаю шаг предварительной сборки:

git checkout master || git checkout -b master

git reset --hard origin/master

Это выполняется после того, как git проверил sha-1, но прежде, чем maven начнет строить. Выполнение этого способа позволяет мне установить мастер на то, что проверил плагин git. Затем я использую maven-release-плагин для выполнения выпусков, а изменения и развертывание SCM прекрасны.

Ответ 4

@meowsqueak: У меня была та же проблема и исправил плагин, чтобы добавить переменную под названием "GIT_BRANCH" в среду сборки. Если вы хотите попробовать, модифицированный плагин доступен для скачивания @github: http://github.com/jberkel/Hudson-GIT-plugin/downloads. Я также связался с автором вверх, чтобы объединить его с основной линией. Конечно, это не решает проблему отсоединенной HEAD, но по крайней мере ваши скрипты сборки знают, в какой ветки вы находитесь.

Ответ 5

Я знаю этот старый вопрос, но все же отвечаю за хороший ответ. Сделайте то, что предлагается здесь: https://blogs.adobe.com/jzitting/maven-release-builds-with-jenkins-and-git/ "Решение заключалось в том, чтобы установить опцию" Checkout/merge to local branch (optional) "в расширенных настройках Git на экране конфигурации сборки Jenkins". Я разместил там "ГОЛОВКУ" и знаю, что вы выпускаете.