Непрерывная интеграция и непрерывная доставка с помощью git -flow
Мы осуществляем непрерывную интеграцию и непрерывную доставку, так как с Subversion фиксируется, когда триггеры конвейера. Недавно мы начали использовать git в некоторых проектах с git -flow, и мы пытаемся решить, какая из ветвей git -flow следует использовать для запуска непрерывной интеграции и непрерывных конвейеров доставки.
Вот два подхода:
1. Использовать ветвь разработки
Проблема: при использовании git -flow мы должны развернуть выпускную (или ведущую) ветвь в производстве, поэтому нам нужно будет построить два разных конвейера: один для непрерывной интеграции (разветвление) и один для непрерывной доставки ( мастер ветвления). Это может привести к ошибкам в производстве, поскольку версия в производстве не будет такой же, как в других средах (интеграция, тестирование, этап).
2. Использовать главную ветвь:
Проблема. Таким образом, у нас не было бы по-настоящему непрерывной интеграции, так как изменения в этих ветвях не были бы очень неточными.
Какая ветвь жесткости используется в трубопроводах?
Ответы
Ответ 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. Таким образом, мастер-ветвь инициирует сборку соединительных линий, которая будет строить решение, протестировать его и пакет для развертывания (теперь пакет хранится с кандидатом на выпуск или основным суффиксом).
- Если сборка соединительных линий успешно завершена (она должна работать), этап тестирования приемочного тестирования будет развертывать и проверять приемочные тесты на интеграционную среду. И в случае успеха новая версия готова к производству. В противном случае, в случае ошибки на этапе сборки коммита или этапа принятия, слияние возвращается.