Из прошлого опыта работы с кодовой базой Big Ball Of Mud, которая развивалась естественным образом на протяжении многих лет в руках многих неконтролируемых начинающих разработчиков, я хотел бы указать, что происходит, когда вы не практикуете CI с этими разработчиками.
Редактирование / обновление : согласно комментарию RubberDuck; в этом ответе предполагается, что целью объединения для интеграции является ветвь разработки, а не ветвь оценки или выпуска.
- Очевидно, что должен быть намного больший контроль над кодом для выпуска и оперативного развертывания; если нет отдельной производственной ветви, то стоит рассмотреть изменение вашей стратегии ветвления / слияния, чтобы запустить основную ветку разработки (которая используется для интеграционного тестирования, а не для выпуска) вместе с основной веткой выпуска. Это сохраняет все преимущества CI и частых слияний, не рискуя нарушить производственный код.
1. Младшие разработчики реже общаются со своими коллегами или руководителем
Непрерывная интеграция - это не просто слияние кода, это момент, когда разработчик вынужден взаимодействовать с другими заинтересованными сторонами.
Коммуникация важна, и, не желая чрезмерно обобщать, она, как правило, является приобретенным навыком, который менее естественен для неопытных разработчиков, чем для тех, кто привык работать в командной среде.
Если вы позволите начинающим разработчикам сидеть в своем кабинете и неделями разбираться с кодом, не требуя частых отчетов / обзоров, тогда они с большей вероятностью вообще избегают общения.
2. Код, который они создают, вероятно, нуждается в более тщательном рассмотрении.
Вы когда-нибудь просматривали что-то настолько плохое, что хотели, чтобы вы взяли его раньше и не писали? Это часто случается.
Вы не можете предотвратить написание плохого кода, но вы можете ограничить потерянное время. Если вы совершаете частые проверки и слияния, вы сводите к минимуму потерянное время.
В худшем случае вы можете оставить младшего разработчика на несколько недель в одиночестве в его собственном миниатюрном проекте, и когда они, наконец, будут готовы к рассмотрению кода, у них просто не останется времени, чтобы бросить весь беспорядок прочь и начни снова с нуля.
Многие проекты превращаются в большой шарик грязи просто потому, что было написано множество плохого кода, когда никто не обращал внимания, пока не стало слишком поздно.
3. Вы должны быть менее уверены, что младший разработчик или другой новый член команды понял требования
Иногда разработчик может найти идеальное решение для неправильной проблемы; Это грустно, потому что обычно это простые недоразумения, которых было бы так легко избежать, если бы только кто-то задал правильный вопрос (ы) ранее в процессе.
Опять же, это проблема, которая с большей вероятностью затронет неопытных разработчиков, которые с большей вероятностью примут «плохие» требования по номиналу, вместо того, чтобы отталкиваться и подвергать сомнению разумность требования.
4. Вероятно, они менее знакомы с общими шаблонами, архитектурой существующего кода, а также с хорошо известными инструментами и решениями.
Иногда разработчик тратит массу времени на то, чтобы заново изобрести колесо, просто потому, что они не знали, что лучшего решения вообще не существует. Или они могут провести дни, пытаясь вбить квадратный колышек в круглое отверстие, не понимая, что они делают неправильно.
Опять же, такого рода вещи более вероятны для неопытных разработчиков, и лучший способ решить эту проблему - обеспечить регулярные обзоры.
5. Длительные периоды между фиксацией / слиянием кода затрудняют выявление и устранение дефектов
Когда ошибка возникает сразу после того, как в основную ветвь были объединены изменения кода на протяжении многих недель, задача определения того, какое изменение могло вызвать ошибку, становится более сложной.
Очевидно, что ваша общая стратегия ветвления также вступает в игру здесь; в идеале все ваши разработчики будут либо работать в своих собственных ветвях, либо в функциональных ветвях (или в обеих), и никогда не будут работать напрямую от master / trunk.
Я видел ситуации, когда целые команды работали одновременно непосредственно с мастером / стволом, и это ужасная среда для КИ, но, к счастью, решение отвлечь всех от мастера / ствола обычно обеспечивает достаточную стабильность для индивидуальной работы. пункты / билеты / и т.д..
Любой разработчик должен всегда быть в порядке, чтобы разорвать ветку master / trunk, понимая, что объединение должно происходить на такой регулярной основе, что разрывные изменения и дефекты должны быть выявлены быстрее и, следовательно, устранены быстрее. Худшие дефекты, как правило, те, которые остаются незамеченными в течение нескольких месяцев или даже лет.
В итоге; Основными преимуществами непрерывной интеграции / непрерывного развертывания являются:
- Улучшается связь между вашей командой
- Качество кода обычно поддерживается на более высоком уровне
- Требования с меньшей вероятностью будут пропущены или неверно истолкованы
- Проблемы архитектуры и дизайна должны обнаруживаться быстрее,
- Дефекты с большей вероятностью будут обнаружены и устранены на более ранней стадии
Поэтому, если вы не практикуете КИ со своими младшими разработчиками, то вы принимаете на себя значительный ненужный риск, поскольку это члены вашей команды, которые нуждаются в этом больше, чем остальные.
it is more scary to wait a week to deploy all micro services at once to make sure that everything works together, than to strictly enforce api versioning, write lots of automatic tests (...), and auto deploy to production as soon as your commit passes as tests on stage
- это основано на мнении;) ИМХО, гораздо сложнее добиться успеха при независимом развертывании службы, чем при монолитном подходе: softwareengineering.stackexchange.com/a/342346/187812 . А с истинным CI (без функций / веток интеграции) вам не придется ждать неделю.