Вы не делаете Непрерывная интеграция (CI) .
В CI у вас есть только одна ветвь (master / main / et c) - на котором работает инструмент CI - и, возможно, очень недолговечные дочерние ветви, которые объединяются в эту ветку, в идеале за <1 день. В значительной степени является синонимом <a href="https://trunkbaseddevelopment.com/" rel="nofollow noreferrer"> разработки на основе соединительных линий .
В традиционных CI поломки являются нормальным явлением, частью процесса - плохие изменения определяются инструментом CI (одна из причин, по которой вы используете для начала) после они объединяются в ветку. Обрывы должны быть исправлены как можно скорее , поскольку они блокируют критический путь проекта. К сожалению, это требует вмешательства человека, что может быть серьезным ударом по скорости для крупных проектов.
Существует также стробирование CI , которое выполняет автоматизированную оркестрованную проверку изменений до объединить их в филиал, отклонить тех, кто не прошел проверку, и автоматически включить в филиал успешные, тем самым гарантируя, что филиал всегда будет поддерживать минимальный уровень качества. ИМХО единственный удобный и детерминированный способ c интеграции, особенно в крупных проектах. У AFAIK есть только 2 таких инструмента: Zuul и ApartCI (это мой ребенок).
Этапы QA / релиза - это только последующие шаги в вашем CI / CD конвейер, который автоматически достигается, если пройдены предыдущие шаги, см. рисунок в этот ответ . При желании вы можете извлекать ветки релизов из соответствующих контрольных точек, что позволит создавать сложные многократные версии, оперативные исправления и т. Д. c. Но эти ветви никогда не объединяются со своими родителями, вместо этого исправления дважды фиксируются / выбираются вишней в основную ветвь, потенциально с дополнительными изменениями, как того требует другой контекст ветки.
GitFlow не является CI:
- у вас есть несколько ветвей (силосов), которые вы сливаете только время от времени.
- слияния ветвей могут быстро стать кошмаром, особенно в больших проекты, в которых вы можете иметь более одной активной ветки одновременно. Попытайтесь добавить 1, а затем еще 2 параллельные ветви объектов на вашем рисунке, а также дополнительные восходящие ветви слияний, которые необходимо выполнить за до , вы можете выполнить слияния, которые вы уже показываете. И дополнительные QA-исполнения, которые могут вам понадобиться из-за этих дополнительных слияний. Просто чтобы понять, насколько сильно масштабируется такая стратегия.
- тесты, выполненные в этих изолированных ветвях, находятся вне контекста - ветви не отражают общую интеграцию проекта. Даже если эти тесты пройдут, главная ветвь может их потерпеть неудачу или будет просто повреждена после слияния. Посмотрите пример того, как только 2 простых изменения могут вызвать такие проблемы, не говоря уже о ветвях с несколькими изменениями.
Как вы, наверное, уже догадались, я не большой поклонник GitFlow, он очень похож на методы интеграции до CI, которые мне пришлось долго терпеть go;)