Выпуск с помощью Maven, SVN и Hudson (Дженкинс)

#svn #maven #hudson #release #jenkins

#svn #maven #хадсон #выпуск #дженкинс

Вопрос:

Я хотел бы сделать «выпуск», который имеет несколько иное значение, чем то, которое предполагает плагин Maven release.

У меня есть веб-проект (который я хотел бы «выпустить»), который зависит от различных других проектов, которые также создаются тем же hudson (но не как модули).

«Выпуск» должен выполнить следующее:

  • создайте все зависимые ^ зависимые проекты с помощью hudson
  • создание веб-проекта (добавление увеличивающегося номера версии в МАНИФЕСТ)
  • развертывание веб-проекта в tomcat (это уже в обычной сборке)
  • создайте новый тег, который включает номер версии в расположении svn x
  • скопируйте все текущие исходные коды svn / head проектов, которые ранее создавались, в новый тег
  • измените все версии pom всех задействованных проектов на $ {VersionNumber}.0.1-СНИМОК в SVN / head

Я полагаю, что это то, что все должны делать, просто очень сложно найти реальное решение через Google.

Комментарии:

1. Ваше последнее предположение является интересным. Почему вы так думаете?

Ответ №1:

Если у вас есть конкретные потребности, то я думаю, что самый простой способ их достижения — это создание сценариев. В качестве этапов сборки в Hudson можно использовать несколько языков сценариев.

Ответ №2:

Звучит очень похоже на наши требования. Мы еще не создали это полностью в Jenkins.

Итак, у нас есть следующая процедура:

  1. объявите о замораживании кода, чтобы все команды могли иметь «правильный» код в магистрали и синхронизировать код друг с другом.

  2. Мы запускаем (домашний) инструмент Java, который проверяет код, создает ветки для выпуска и теги выпуска. начиная со следующей итерации, он также обновит магистраль новой версией моментального снимка. Инструмент имеет собственные файлы конфигурации, чтобы он знал, какие номера версий есть / будут и какие проекты (и где они расположены) необходимо обновить.

  3. Мы запускаем наше задание «сборка выпуска», которое в значительной степени отключено от всех наших внутренних корпоративных репозиториев (оно знает только о сторонних и внешних репозиториях). Задание очищает локальное репозиторий maven (у него есть собственное репозиторий, который не используется другим заданием). Я загружаю все вложенные папки, относящиеся к нашим проектам (нам нужно настроить это в задании), используя subversion-tag-parameter для каждого и дополнительный pom мегапроекта, который объявляет все загруженные проекты как модули (необходимо перейти в корневую папку). Эта работа также выполняет всю необходимую упаковку (архивирование статического содержимого, объединение статических файлов из разных проектов в один архив, …).

  4. развертывание

  5. функциональное тестирование

Пока у 2 есть своя собственная работа, а 3 полностью автоматизирован, нам просто нужно запустить его вручную. Шаг 4 находится в разработке для CI, а шаг 5 запланирован для CI. Шаг 4 — это горячий кандидат на автоматизацию (даже если он выполняется только по частям) процесса выпуска.

Я надеюсь, что это немного поможет и даст вам несколько идей.