Есть ли способ избежать запуска сломанного или непроверенного кода с помощью CI? - PullRequest
0 голосов
/ 21 января 2020

Я недавно заставил свою команду перейти на CI. Мы все еще в стадии разработки, но до сих пор мы начали использовать эту стратегию ветвления , и она отлично работает. У нас еще нет автоматизированных тестов, и мы проводим все тесты вручную. В настоящее время мы также делаем еженедельные выпуски, поэтому мы создаем ветку выпусков из нашей ветки Dev в понедельник днем, проводим дополнительные тесты во вторник и отправляем их в нашу ветку Master в среду утром и следим за днем. Проблема в том, что иногда наша команда QA не может вовремя протестировать все наши функции, или функция не проходит QA, но уже находится в ветке Dev и может быть запущена до устранения проблем. Есть ли способы смягчить это? Это все довольно ново для нас, поэтому я готов изменить все при необходимости.

Надеюсь, эта диаграмма является хорошим объяснением того, как все работает в настоящее время: weekly release strategy

1 Ответ

0 голосов
/ 22 января 2020

Вы не делаете Непрерывная интеграция (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;)

...