CI/CD — это практика, которая сегодня сменяет архаические подходы к разработке программного обеспечения. Она названа по первым буквам фразы «Continuous Integration/Continuous Delivery», что переводится, как непрерывная интеграция и непрерывное развертывание. Иногда CD означает еще и Continuous Delivery, непрерывная доставка (кода).
Наши инженеры давно успешно используют CI/CD в своей работе, ведь он позволяет ускорить выпуск, снизить риски производства и повысить качество проектов. В этой статье мы хотим рассказать о том, что такое CI/CD, про преимущества и недостатки этого подхода, про его цели и принципы.
Что такое Continuous Integration (CI) непрерывная интеграция
Интеграция — это процесс объединения части кода, написанной программистом, с остальными частями ПО. В CI/CD интеграция автоматизированна и поэтому происходит без прерывания остальных процессов разработки ПО, почему и называется «непрерывная интеграция» — это бесшовный процесс. Цель CI — автоматически интегрировать изменения в общий код и проверить его работоспособность после этого.
Что такое Continuous Delivery (CD) непрерывная доставка
Доставка кода — это процесс логистики измененной версии проекта в эксплуатацию. В непрерывной доставке он также автоматизирован, что позволяет ускорить процесс, сделать его прозрачным для остальных разработчиков и минимизировать влияние человеческого фактора.
Что такое Continuous Deployment (CD) непрерывное развертывание
Развертывание — это процесс автоматизированного развертывания свежей версии ПО в тестовое или рабочее окружение. Это составная часть доставки кода, поэтому в аббревиатуре подхода обозначается теми же буквами: CD.
В чем отличие от DevOps. Роль CI/CD в DevOps
CI/CD — это DevOps-практика. DevOps (акроним от англ. development & operations, разработка и операции) представляет собой более широкий подход к организации всех процессов в IT-компании, в которых задействованы и команды разработки, и финансисты, и менеджеры. CI/CD — основной элемент этого подхода; методология, которая относится непосредственно к процессам разработки ИТ-продукта.
DevOps и CI/CD являются Agile-практиками, они оптимизируют работу компании-разработчика: DevOps как общая философия быстрой и качественной разработки, а CI/CD как метод создания и вывода продукта на рынок, у которого есть четкие цели, принципы и этапы. Можно сказать, что DevOps без CI/CD с его частыми выпусками обновлений с помощью автоматического пайплайна невозможен.
Цели и принципы CI/CD
Цель CI/CD-практики проста: ускорить выпуск программного продукта, повысив его качество и снизив риски. Чтобы достичь этих целей, в CI/CD придерживаются четырех принципов:
Разделение ответственности между всеми заинтересованными сторонами.
Этими интересантами являются как различные специалисты по разработке программного продукта, так и пользователи. Стадии жизненного цикла проекта разделяются между ними в зависимости от компетенций участников. Команда может быть разной, но в среднем разделение следующее: программисты и дизайнеры отвечают за бизнес-логику и опыт пользовательского взаимодействия с системой; инженеры по качеству занимаются тестированием и вводом сквозных функций; DevOps-инженеры берут на себя работу по доставке кода; пользователи (или заказчики) дают обратную связь о работе продукта, к которой относится следующий принцип.
Быстрая обратная связь.
Медленное внесение изменений в ПО может вести к финансовым и репутационным рискам его владельцев, а порой и к более серьезным последствиям (например, если это медицинское приложение). Возможность быстрого добавления и тестирования нового функционала, внесения правок в проект обеспечивает короткий цикл обратной связи с пользователями программного продукта. Сокращению этого цикла способствует автоматизация процессов сборки и тестирования, а также минимизирование посредников в передаче информации.
Снижение рисков.
Участники проекта, ответственные за свой этап его жизненного цикла, должны стремиться к тому, чтобы минимизировать возможность ошибок. Для этого они используют инструменты, позволяющие контролировать, оптимизировать и мониторить соответствующие процессы разработки и поддержки ПО.
Общая среда.
Реализация единого окружения, в котором работает команда разработки, позволяет эффективно и прозрачно построить процессы CI/CD: версионность кода, контроль качества, тестирование, масштабирование, сборка и другие действия при разработке продукта.
Этапы CI/CD
Непрерывная разработка программного обеспечения проходит семь этапов, которые зацикливаются по достижении последнего. Один семиэтапный цикл называется итерацией. Эти итерации происходят бесшовно, а иногда и параллельно, в чем и заключается непрерывность процессов создания ПО.
Планирование
На этом этапе формируются запросы на функциональность продукта и разрабатывается план работ. Формирование запросов происходит либо на основании технического задания (ТЗ) от заказчика, либо на основании обратной связи от пользователей уже готового продукта, и тогда это запрос на новую функциональность, на доработки.
Кодинг
Это этап программирования ПО, написания его кода. Каждый программист пишет свою часть кода, относящуюся к определенному модулю проекта. После ручного тестирования своей части кода кодеры добавляют ее к общей ветке текущей версии проекта. Когда все закончат внесение своих модулей, разработка переходит на следующую стадию.
Сборка
Этап автоматической сборки всех частей кода в общий код. Здесь же происходит общая авто-проверка проекта на работоспособность. Если обнаружены ошибки, проект возвращается на предыдущую ступень для их исправления.
Тестирование
Автоматически протестированная версия отправляется на более пристальное, ручное тестирование, которое позволяет обнаружить нюансы, из-за которых проект может работать неправильно или недостаточно эффективно. После этого этапа каждая новая сборка кода получает номер кандидата на релиз.
Релиз
Здесь появляется версия рабочая версия кода и осуществляется переход на следующий этап.
Развертывание
Происходит автопубликация кода на production-сервере. Версия становится клиентской, потому что пользователи могут взаимодействовать с программным продуктом.
Поддержка и мониторинг
Разработчики осуществляют поддержку программного решения, получает обратную связь от конечных пользователей и производит анализ пользовательского опыта. На его основании происходит понимание того, что надо исправить или дополнить и осуществляется переход на первый этап. Начинается следующая итерация CI/CD-разработки.
Преимущества CI/CD
Подход позволяет оперативно выводить на рынок программные продукты и оперативно вносить в них изменения и новые функции по запросам заказчиков. По сравнению с классическими моделями разработки этот метод сокращает Time To Market с нескольких месяце до нескольких дней. Ранний вывод на рынок способствует конкурентным преимуществам.
Повышается качество продукта (более стабильный код) благодаря параллельному тестированию, исправлению ошибок на ранних этапах цикла разработки и оперативному внесению изменений. Автоматическое тестирование в начале разработки также позволяет снизить расходы за счет вариативности кода. Всегда готовая к работе новая сборка кода используется, как правило, без прерывания функционирования сервиса, что приводит к большей удовлетворенности заказчика и лояльности конечных пользователей.
Недостатки CI/CD
Автоматизация, которая лежит в основе подхода, подходит не всем проектам. Но даже там, где она подходит, важно, чтобы внедрением CI/CD занимались опытные инженеры, управлением проектов — опытные менеджеры и т.д. Недостаток опыта у специалистов, принимающих решения, и отсутствие высокой скоординированности всех участников проекта может привести к усложнению процессов разработки и вывода на рынок программного продукта.
Инструменты CI/CD
В CI/CD для автоматизации тестирования, развертывания и других процессов разработки принято использовать узко-специальные инструменты, которые покрывают полный жизненный цикл разработки SDLC (Software Development Life Cycle).
Их количество постоянно возрастает, появляются новые. Мы же расскажем о наиболее популярных и хорошо зарекомендовавших себя инструментах CI/CD, которые успешно применяют и наши инженеры, грамотно подбирая под каждый проект.
DevOps‑платформа для управления репозиториями (хранилищами) проекта. Позволяет вести историю тестирования и изменений, мониторинг ошибок. Для описания CI/CD-процессов используется YAML.
Система непрерывной доставки и развертывания (CD), позволяющая контейнеризировать проект. Для управления (оркестрации) кластерами микросервисного проекта можно использовать Kubernetes.
Один из самых востребованных DevOps- и CI/CD-инструмент, работающий с огромным количеством плагинов, что обеспечивает гибкость процессов разработки и адаптации под задачи проектов. Для описания CI/СD-процессов использует Groovy, имеет собственный DSL в Jenkinsfile.
CI-сервер для автоматизации сборки проектов, написанных на PHP. Работает с библиотеками для тестирования PHP Spec, Atoum и Behat, а также с разными репозиториями, включая GitLab. Требует хостинг и настройку.
Инструмент для одновременной сборки, тестирования и развертывания нескольких проектов с анализом ошибок. Поддерживает импорт из Jenkins и совместим с Selenium, JUnit и PHPUnit.
Платформа для комплексного развертывания с автоматизацией тестирования и сборки кода. Поддерживает различные системы контроля версий, механизмы поставки, облачные сервисы и контейнерные системы.
Автоматизирует тестирование и сборку, которую к тому же гибко настраивает через помощью Python-компоненты. Поддерживает различные VCS.
CI/CD в GitinSky
Методы и инструменты CI/CD мы применяем в работе уже не первый год и имеем большой опыт перевода других компаний на эту практику. Если вы пришли к решению внедрить непрерывную разработку в свою компанию, мы можем взять на себя все процессы по внедрению.
Узнать больше про наш опыт вы можете в кейсе о внедрении CI/CD в большой организации, у которой однажды перестал работать сервис с 10 млн пользователей.
Отзывы клиентов
Айри.рф работает как SaaS, обеспечивая ускорение и защиту сайтов. Нам важна 100% доступность серверов и максимальная отказоустойчивость. Нам как специалистам по облакам приятно иметь дело с профессионалами!
—Николай Мациевский, генеральный директор Айри.рф
Мы открыли портал на базе системы управления сайтами UMI.CMS. Работая с 1998 года, мы накопили несколько десятков тысяч материалов и статей. В 2010 году мы призвали читателей активно комментировать статьи, и база стала расти еще быстрее. Вместе с ней росло и количество читателей. В определенный момент мы начали испытывать трудности, так как административная панель часто «подвисала», и порой приходилось ждать до нескольких минут, пока статья сохранится или откроется для редактирования. Все это серьезно замедляло нашу работу. Мы обратились к Сергею Житинскому, и уже через неделю «подвисания» исчезли, база стала работать нормально. Скорость работы редакторов с контентом возросла, мы стали размещать больше материалов, перестали тратить время на бесполезное ожидание. Что касается посещаемости ресурса, то она существенно увеличилась. Мы сотрудничаем с Житинским на постоянной основе и теперь стали клиентами его предприятия Git in Sky, хотя русскому уху приятнее официальное название его компании — ООО «Жить в небе».
—Анатолий Степанов, главный редактор портала «Русская народная линия»
Поскольку почтовые рассылки - это один из основных элементов деятельности - к ТП Git in Sky чаще всего обращаемся по поводу каких-то неполадок с почтой, хотя в последнее время они случаются совсем редко - может быть - раз в полгода".
—Денис Каланов, генеральный директор, ООО «АйТи-Событие»
На простом языке наша задача звучала так: «Мы хотим, чтобы сайт не падал, и чтобы ни при каких условиях (сбой, человеческий фактор, наводнение и т.п.) данные наших пользователей не пропали».
Коллеги помогли подобрать правильную конфигурацию серверов, хранения и резервного копирования данных, всё настроили и научили программистов с этим работать. Что очень понравилось в сотрудничестве, так это то, что все работы были выполнены без остановки проекта и практически без участия нашей команды.
Также стоит отметить доступность коллег и быстрый отклик, а особенно — наличие "аварийного" чата, где всегда кто-то дежурит и где можно рассчитывать на оперативную поддержку.
—Олег Баша, генеральный директор, Learme
Успешно сотрудничаем с конца 2013 года. Компания Git In Sky помогла нам перенести данные в «облака», оптимизировать инфраструктуру. Оперативно помогает справляться с возникающими сложностями.
— Кузнецов Антон, системный администратор
Айри.рф работает как SaaS, обеспечивая ускорение и защиту сайтов. Нам важна 100% доступность серверов и максимальная отказоустойчивость. Нам как специалистам по облакам приятно иметь дело с профессионалами!
—Николай Мациевский, генеральный директор Айри.рф
Мы открыли портал на базе системы управления сайтами UMI.CMS. Работая с 1998 года, мы накопили несколько десятков тысяч материалов и статей. В 2010 году мы призвали читателей активно комментировать статьи, и база стала расти еще быстрее. Вместе с ней росло и количество читателей. В определенный момент мы начали испытывать трудности, так как административная панель часто «подвисала», и порой приходилось ждать до нескольких минут, пока статья сохранится или откроется для редактирования. Все это серьезно замедляло нашу работу. Мы обратились к Сергею Житинскому, и уже через неделю «подвисания» исчезли, база стала работать нормально. Скорость работы редакторов с контентом возросла, мы стали размещать больше материалов, перестали тратить время на бесполезное ожидание. Что касается посещаемости ресурса, то она существенно увеличилась. Мы сотрудничаем с Житинским на постоянной основе и теперь стали клиентами его предприятия Git in Sky, хотя русскому уху приятнее официальное название его компании — ООО «Жить в небе».
—Анатолий Степанов, главный редактор портала «Русская народная линия»
Поскольку почтовые рассылки - это один из основных элементов деятельности - к ТП Git in Sky чаще всего обращаемся по поводу каких-то неполадок с почтой, хотя в последнее время они случаются совсем редко - может быть - раз в полгода".
—Денис Каланов, генеральный директор, ООО «АйТи-Событие»
На простом языке наша задача звучала так: «Мы хотим, чтобы сайт не падал, и чтобы ни при каких условиях (сбой, человеческий фактор, наводнение и т.п.) данные наших пользователей не пропали».
Коллеги помогли подобрать правильную конфигурацию серверов, хранения и резервного копирования данных, всё настроили и научили программистов с этим работать. Что очень понравилось в сотрудничестве, так это то, что все работы были выполнены без остановки проекта и практически без участия нашей команды.
Также стоит отметить доступность коллег и быстрый отклик, а особенно — наличие "аварийного" чата, где всегда кто-то дежурит и где можно рассчитывать на оперативную поддержку.
—Олег Баша, генеральный директор, Learme
Успешно сотрудничаем с конца 2013 года. Компания Git In Sky помогла нам перенести данные в «облака», оптимизировать инфраструктуру. Оперативно помогает справляться с возникающими сложностями.
Как правило, мы работаем с клиентами по следующей схеме:
Перед каждым проектом по ИТ-аудиту мы составляем не только план работ, но и «дорожную карту» (RoadMap), в которой вместе с заказчиком определяем приоритетные цели.
Затем декомпозируем RoadMap на конкретные задачи с участием проектного менеджера, который оценивает сроки и необходимые проектные ресурсы.
Затем происходит согласование с заказчиком, после которого мы запускаем ИТ-аудит. На основе собранных данных на этом этапе возможны дополнения в «дорожную карту» которые также проходят согласование с заказчиком.
В течение аудита мы находимся на постоянной связи с заказчиком и предоставляем промежуточные отчеты.
По окончании ИТ-аудита составляем итоговый отчет с рекомендациями.
IT-аудит позволяет компании быть готовой к возможным проблемам в работе информационно-вычислительной инфраструктуры, поскольку он выявляет возможные риски и угрозы в системе. Также с помощью ИТ-аудита можно определить оптимизационный план, чтобы снизить расходы или увеличить производительность системы.
Обследование ИТ-мощностей предприятия включает в себя аудиты:
оборудования
программного обеспечения
каналов коммуникации, включая настройку электронной почты, АТС, ip-телефонии)
систем безопасности: от настроек антивирусной защиты и резервного копирования до знаний персонала в области ИБ
Предварительно разрабатывают план и расписание аудита. После процедуры составляют отчет с рекомендациями.
оборудования
программного обеспечения
каналов коммуникации, включая настройку электронной почты, АТС, ip-телефонии)
систем безопасности: от настроек антивирусной защиты и резервного копирования до знаний персонала в области ИБ
Аудит серверной инфраструктуры позволяет заказчику оценить актуальное состояние ее аппаратной и программной частей. Это в свою очередь способствует принятию своевременных и адекватных управленческих решений, грамотному и экономному планированию развития инфраструктуры, повышению безопасности и отказоустойчивости при необходимости.
К инженерам Git in Sky обращаются клиенты широкого спектра: от стартапов из трех человек с облачной инфраструктурой до государственных предприятий с серверными мощностями в несколько сотен машин. Доверие к нашим специалистам вызвано их богатым опытом и мощным технологическим стеком, а подкрепляется ответственным подходом, в частности системностью. Также отметим, что в Git in Sky гибко оценивают стоимость работ в зависимости от ситуации и инфраструктуры заказчика.
Наши клиенты и реализованные проекты
Git in Sky реализовал 250+ проектов в разных отраслях. Основные группы наших клиентов и кейсы: