Подтвердить что ты не робот

Непрерывная интеграция и непрерывная доставка с помощью git -flow

Мы осуществляем непрерывную интеграцию и непрерывную доставку, так как с Subversion фиксируется, когда триггеры конвейера. Недавно мы начали использовать git в некоторых проектах с git -flow, и мы пытаемся решить, какая из ветвей git -flow следует использовать для запуска непрерывной интеграции и непрерывных конвейеров доставки.

Вот два подхода:

1. Использовать ветвь разработки

Проблема: при использовании git -flow мы должны развернуть выпускную (или ведущую) ветвь в производстве, поэтому нам нужно будет построить два разных конвейера: один для непрерывной интеграции (разветвление) и один для непрерывной доставки ( мастер ветвления). Это может привести к ошибкам в производстве, поскольку версия в производстве не будет такой же, как в других средах (интеграция, тестирование, этап).

2. Использовать главную ветвь:

Проблема. Таким образом, у нас не было бы по-настоящему непрерывной интеграции, так как изменения в этих ветвях не были бы очень неточными.

Какая ветвь жесткости используется в трубопроводах?

4b9b3361

Ответ 1

Истина лежит между ними. Если вы хотите принять git -flow в строгом CD-конвейере, вы должны использовать ветвь release для вашего CI:

  • Для каждого (пакетного) commit-branch commit (ов), пусть ваш CI-сервер автоматически создает ветвь release и запускает все ваши тесты на ней.
  • Если это не удается, дайте ему отчет и/или удалите ветку, иначе слейте ее для мастеринга.

Основная идея исходит от Джона Фергюсона Smart Slide о CI/CD в проектах Java Maven (BDD in Action, Jenkins Definite Guide).

Ответ 2

Git - поток и непрерывная интеграция по определению несовместимы. Филиалы - это механизм задержки интеграции: когда вы передаете ветку, отличную от master (или trunk, если вы пришли из Subversion), вы избегаете непрерывной интеграции. Выполнение непрерывной интеграции прост, но нелегко.

Ответ 3

На мой взгляд, если вы хотите применить git -flow в непрерывной доставке, у вас должно быть два разных конвейера, как вы сказали в своем первом подходе.

Я бы предложил такой подход:

1. Развить отрасль

  • Развертывание ветки приведет к созданию Commit Build: как только функция добавляется в ветку разработки (при запросе на слияние или вытягивание), CI будет строить, тестировать (Unit Testing и Code revision) и упаковывать решение (с помощью "-develop-vX" ). Таким образом, команда может быстро реагировать в случае сбоя.
  • Как только Commit Build завершится успешно, задача выполнена (в противном случае изменение отменяется, и разработчик, совершивший изменение, должен немедленно исправить его). Параллельно на этапе тестирования приемочного тестирования начинается развертывание предыдущей сборки в среду разработки для выполнения приемочных тестов (например, функциональное и регрессионное тестирование) без блокировки работы разработчика. Как только он будет завершен, статус ветки будет передан команде. Таким образом, команда знает о стабильности решения во время текущего Sprint: если этап тестового тестирования успешно завершается, продукт готов к слиянию с ведущей веткой (в противном случае он будет исправлен).

2. Мастер-ветвь

  • Как только Sprint будет завершен, стабильная ветвь разработчика (стабильная) будет объединена и помечена в Master Branch. Таким образом, мастер-ветвь инициирует сборку соединительных линий, которая будет строить решение, протестировать его и пакет для развертывания (теперь пакет хранится с кандидатом на выпуск или основным суффиксом).
  • Если сборка соединительных линий успешно завершена (она должна работать), этап тестирования приемочного тестирования будет развертывать и проверять приемочные тесты на интеграционную среду. И в случае успеха новая версия готова к производству. В противном случае, в случае ошибки на этапе сборки коммита или этапа принятия, слияние возвращается.