Непрерывная интеграция - переломные изменения - PullRequest
0 голосов
/ 22 ноября 2018

Допустим, Developer1 работает над Module1, Developer2 работает над Module2, а Module1 зависит от Module2.Developer2 сегодня закончил работу над Module2, но его изменения сломают Module1, если он передаст свои изменения серверу CI.Но разработчику1 понадобится еще несколько дней, чтобы адаптировать Модуль 1 к изменениям в Модуле 2.

Что должен делать Разработчик 2 в отношении непрерывной интеграции?

  1. Зафиксируйте его ежедневную работу и прервите сборку?
  2. Подождите, пока Developer1 завершит работу над Module1, а затем выполните коммит вместе?(Будет ли это против CI?)
  3. Зафиксируйте ветвь компонента (что нормально, если она не может быть собрана) вместо ветки Master, и когда Developer1 завершит свою работу над веткой Feature, объедините ее с Master.ветка.(Будет ли это против CI?)
  4. Напишите другой класс вместо изменения существующего.И когда Developer1 закончит свою работу, он перейдет на новый класс.(Вроде как открытый / закрытый принцип SOLID, я думаю)
  5. Или какой-то другой вариант?

1 Ответ

0 голосов
/ 23 ноября 2018

Это хорошо известная проблема во многих абстракциях развития.В микросервисах и библиотеках среда разработки обычно всегда обеспечивает обратную совместимость в некоторой степени.Это дает время другим службам, которые зависят от него, обновлять, пока старые функциональные возможности не будут удалены.Если это не вариант, так как он имеет много недостатков и требует много планирования и культуры, чтобы сделать это правильно, я бы посоветовал никогда не ломать мастера.

Поэтому мой ответ будет 3 - ветви функцийЭто хороший вариант в этом случае, так как он подходит практически для любого рабочего процесса, и его легко заставить работать с любой командой.

Причина моего выбора:

  • Предложение 1 Я бы не стал использовать в качестве мастера каноническую версию программного обеспечения, если эта версия сломана, программное обеспечение сломано.Некоторые рабочие процессы разработки даже не позволяют разработчикам фиксироваться в master, где слияние выполняется только CI после прохождения всех тестов и проверок кода.Он требует затрат на управление CI, анализ кода и требует четко определенной культуры в команде.
  • Предложение 2 Я предполагаю, что это означает, что разработчик 2 находится в состоянии подготовки «готового» кода.в своем компьютере просто ждет зависимости, чтобы быть готовым.У него есть место сделать что-то не так, работая над другой задачей или испортить что-то.Я всегда стараюсь зафиксировать любой код, который будет значимым или незаконченным в конце дня, чтобы избежать потери.Обычно в тематической ветке.Это спасло меня пару раз.
  • Предложение 3 Подходит для меня в этом списке.Это сохраняет 2 работы разработчика, не ломает мастера и доступно для команды.Что касается взлома сборки, есть некоторые системы CI, в которых флаг в коммите мог избежать сборки, если известно, что она порвется.
  • Предложение 4 Это похоже на случай обратной совместимости, но это звучит неправильно, если предположить, что эта система не похожа на такой подход, как библиотеки, платформы или микросервисы.Я также предполагаю, что у этой функциональности нет запланированного срока действия устаревания, поскольку она выглядит просто с одним модулем, зависящим от него.

Я не уверен, применимо ли это к вашему случаю, но с использованием git submodulesможет решить эту проблему, где каждый модуль будет иметь свой собственный репозиторий.Каждая зависимость - это ссылка на репозиторий другого модуля, исправленная в определенной версии.Это позволяет избежать проблем с нарушением зависимости за счет установки и обновления версии вручную.Это может быть довольно трудоемким, так как число модулей и зависимостей растет.

...