Comments 6
А в том известном меме про
А ты точно DevOps?
на пассажирке ремень безопасности застёгнут?
Что значит "Выполняется откат". Вроде никакой Откат не выполняется, т.е. никакие коммиты не отменяются (и т.п.) Просто не выкладывается новый дистрибутив и разработчики продолжают работать (тестироваться) на предыдущем. А ошибки, приведшие к сбою, правятся новыми коммитами и попадают в следующую попытку сборки.
несуществование
НЕСУЩЕСТВОВАНИЕ, Карл!
Отсутствие.
Отсутствующие есть?
Вы сузили для себя понятие CI до выполнения тестов, из-за чего исказилось восприятие процесса: ошибки у вас оказываются «подсвечены зелёным».
CI — это прежде всего формирование продуктовой сборки. В сложных системах это само по себе нетривиальная задача. Тестирование — этап крайне важный, но не определяющий.
Следующий шаг — развёртывание сборки в промышленное окружение. И вот здесь начинается настоящая головная боль, особенно если новая версия требует обновления формата уже накопленных данных.
Обратите внимание: на всех этих этапах должен соблюдаться принцип транзакционности — после неудачной операции система обязана быстро и корректно вернуться в исходное состояние.
Формально развёртывание в production относят к CD, но на практике граница между CI и CD проходит не по названию этапа, а по моменту необратимости изменений. До тех пор пока система может транзакционно откатиться в исходное состояние, это всё ещё часть интеграционного контура.
Вместо этого вы сфокусировались на нестабильных тестах. В ряде случаев это вообще нормально — например, при тестировании на большой выборке случайных данных, разумеется после прогона нескольких эталонных псевдослучайных последовательностей.
Fowler вообще определяет ci как альтернативу feature branching'у:
https://martinfowler.com/articles/branching-patterns.html#ComparingFeatureBranchingAndContinuousIntegration
Главная цель Continuous Integration — это провал