Идеальный Continuous Integration/Continuous Delivery

18.03.2018

Вот уже несколько лет Continuous Integration/Continuous Delivery(CI/CD) набирает популярность, а что это такое?

В IT многие понимают CI/CD по-своему. Думаю, ближе всего будет аналогия с конвейером на автомобоильном заводе, где у нас есть разные части-детали(двигатель, двери, колеса, фары и т.д.), которые производятся и проверяются отдельно. Затем готовые детали отправляются на конвейер, из которых собираются готовый автомобиль. После этого собранный автомобиль проверяется на тестовых площадках и отправляется в салон или к конечному покупателю. За то, чтобы это “конвейер” работал непрерывно отвечает Build Engineer.

В этой заметке я хочу пофантазировать на тему “Каким я вижу идеальный процесс CI/CD”

Continuous Integration, CI( Непрерывная Сборка )

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

Непрерывная сборка включает в себя несколько этапов:

  1. Внесение изменений в исходный код и сохранение в общую систему контроля версий. Система контроля версий(Version Control System, VCS, например git) хранит всю историю изменений в программе и позволяет сравнить в любое время.

  2. Статический анализ кода - Позволяет найти ошибки ещё до выполнения программы. Бывает несколько видов.

  3. Сборка или Компиляция - исходный код собирается в один файл(бинарный или архив) для последующей доставки в рабочее окружение.

  4. Сохранение собранной или скомпилированной программы на сервер-хранилище.

  5. Доставка на Development окружение - проверяет, что программа запускается на общем Рабочем Окружении для разработчиков.

  6. Тестированние запущеной программы в Development окружении и интеграционные тесты - определяем, что программа запустилась и корректно работает с остальными сервисами в системе. В основном производится автоматически без вмешательства человека.

Continuous Delivery, CD( Непрерывная доставка )

Если все 6 пунктов завершились успешно, значит эта версия программы готова отправляться дальше по конвейеру на другие окружения и проходить остальные проверки - это и называется непрерывной доставкой

Какие могут быть Рабочие Окружения:

  • Development окружение - Сервер или набор серверов, на котором запущено приложение. Имеет минимальную кофигураци. Используется как часть CI.

  • Testing или QA Окружение - сервер или набор серверов, на котором тестировщики в ручную и при помощи автоматизации проверяют, что программа работает корректно. Чаще всего более полные и глубокие тесты, чем в случае CI.

  • Staging(Performance testing) окружение - набор серверов, по конфигурации такой же как и Production окружение. Используется для нагрузочного тестирования. Позволяет выловить узкие места по производительности до того момента, как код пойдет дальше.

  • Production(Live) окружение - то, что видит конечный пользователь. Так как пользователей много и приходит большой трафик, нужно чтобы сервера были мощные. Ошибки найденнные на Production исправляются дороже всего, потому что пользователь может уйти при виде ошибки, что чревато потерями.

Логично предположить, что чем раньше выявляется ошибка или дефект, тем быстрее и дешевле его устранение. Представьте, например, если пользователь нашёл ошибку на Production. Для того, чтобы её исправить нужно найти где ошибка в коде, исправить, пройти проверки на всех оборудованиях и этапах, и только после этого выкатить исправленную программу на Production

Пока на этом всё. В будущем хочу проиллюстрировать идеальный CI/CD примерами и кодом. Так что приготовьтесь … Строим CI/CD на практике. Часть 1

comments powered by Disqus



По годам

2022 (1)
2020 (3)
2019 (8)
2018 (12)
2017 (2)