2015-09-03 4 views
23

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

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

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

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

2. Используйте мастер ветви:

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

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

+3

По моему опыту git-flow более подходит для _packaged software_ (что-то вы выпускаете по случаю, с дискретными номерами версий, возможно, с несколькими более старыми версиями в дикой природе). Это ваше дело? Для более _web based_ подхода (выпущенного постоянно, единственная версия, которая имеет значение, является одной вживую), я нашел более простой [рабочий процесс филиала] (https://www.atlassian.com/git/tutorials/comparing-workflows/ feature-branch-workflow) или [github flow] (https://guides.github.com/introduction/flow/) подходит гораздо более подходящим образом. –

+0

Можно ли интегрировать, протестировать и организовать в другой ветке, затем мастер? –

ответ

9

Истина лежит между двумя. Если вы хотите принять ГИТ-поток в строгом трубопроводе CD, вы должны использовать релиз-филиал для CI:

  1. Для каждых (партий) разработать ветви коммят (s), пусть ваш сервер CI автоматически создайте ветвь релиза и запустите все свои тесты.
  2. Если это не удается, сообщите об этом и/или удалите ветку, иначе слейте ее, чтобы выполнить мастер.

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

4

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

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

1. Развивать филиал

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

2. Мастер филиал

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

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

+1

Вы избегаете CI ваших непроверенных коммитов. Использование CI для управления ведущей ветвью и только фиксация в ветке разработки просто прекрасна. – Alex

+1

Нет, Алекс. Дело в том, что зрелая команда в состоянии проверить изменения достаточно хорошо, прежде чем совершать их, поэтому нет «непроверенных коммитов». Области функций - это бандаж, который позволяет выполнять низкокачественные коммиты. Удалите ленту и научитесь делать качественные коммиты! – xpmatteo

+1

Я и моя команда совершают более 20 раз в день каждый день в филиале для определенной функции. Только когда функция завершена, я возвращаюсь обратно или создаю запрос на растяжение. Это буквально эквивалентно турне так называемых высококачественных коммитов. Кроме того, мы можем работать удаленно и сохранять работу, если жесткий диск инженера не удался. – Alex

Смежные вопросы