CI/CD - обзор и характеристика

Краткий обзор

Непрерывная интеграция (CI) и непрерывное развертывание (CD) являются чрезвычайно распространенными терминами, используемыми в разговорах о создании программного обеспечения. Но что они на самом деле значат? В этой статье я объясню понятие и значение этих связанных терминов.

Сборочная линия на фабрике производит потребительские товары из сырья быстрым, автоматизированным и воспроизводимым способом. Точно так же процесс поставки программного обеспечения производит выпуски из исходного кода быстрым, автоматизированным и воспроизводимым способом. Общий дизайн того, как это делается, называется непрерывным развертыванием (continuous delivery). Процесс, который начинает сборочную линию, называется непрерывной интеграцией (continuous integration). Процесс, который обеспечивает качество, называется непрерывное тестирование, а процесс, который делает конечный продукт доступным для пользователей, является частью непрерывного развертывания (continuous deployment). А эксперты по общей эффективности, которые заставляют все работать просто и понятно для всех, известны как специалисты DevOps.

Что значит "непрерывный"?

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

  • Частые выпуски. Целью непрерывных процессов является предоставление качественного программного обеспечения через определенные промежутки времени. Частота здесь является переменной и может быть определена командой или компанией. Для некоторых продуктов достаточно одного раза в квартал, месяц, неделю или день. Для других несколько раз в день может быть желательным и выполнимым результатом. Непрерывный может также принимать значение "случайный, по мере необходимости". Конечная цель та же: поставлять конечным пользователям высококачественные обновления программного обеспечения в виде повторяющегося и надежного процесса. Часто это может быть сделано практически без взаимодействия или даже знания пользователей (например, обновления устройства).
  • Автоматизированные процессы. Ключевой частью обеспечения этой частоты является автоматизация процессов для обработки практически всех аспектов производства программного обеспечения. Это включает в себя сборку, тестирование, анализ, управление версиями и, в некоторых случаях, развертывание.
  • Повторяемость. Если мы используем автоматизированные процессы, которые всегда имеют одинаковое поведение при одинаковых входных данных, то обработка должна быть повторяемой. То есть, если мы вернемся и введем ту же версию кода, что и входные данные, мы должны получить тот же набор результатов. Это также предполагает, что у нас есть те же версии внешних зависимостей (то есть, другие результаты, которые мы не создаем, которые использует наш код). В идеале это также означает, что процессы в наших конвейерах могут быть обновлены и созданы заново.
  • Быстрая обработка. Здесь термин "быстрый" является относительным термином, но независимо от частоты обновлений/выпусков программного обеспечения, ожидается, что непрерывные процессы будут эффективно обрабатывать изменения из исходного кода в конечные результаты. Автоматизация берет на себя большую часть этого, но автоматизированные процессы могут все еще быть медленными. Например, интегрированное тестирование по всем аспектам продукта, которое занимает большую часть дня, может быть слишком медленным для обновлений продукта, в которых новый кандидат выпускается несколько раз в день.

Что такое процесс непрерывной поставки?

Различные задачи и задания, которые обрабатывают преобразование исходного кода в высвобождаемый продукт, обычно объединяются в программный "конвейер", где успешное завершение одного автоматического процесса запускает следующий процесс в последовательности. Такие конвейеры имеют разные названия, такие как конвейер непрерывной доставки, конвейер развертывания и процесс непрерывной поставки. Общее приложение супервизора управляет определением, выполнением, мониторингом и составлением отчетов по различным частям процесса по мере их выполнения.

Как работает процесс непрерывной поставки?

Реальная реализация процесса непрерывной поставки программного обеспечения может широко варьироваться. Существует большое количество и множество приложений, которые могут использоваться в конвейере для различных аспектов отслеживания источника, построения, тестирования, сбора метрик, управления версиями и т. д. Но общий рабочий процесс в целом одинаков. Одно приложение дирижирует всем конвейером, и каждый из процессов выполняется как отдельное задание или управляется с помощью этапа этим приложением. Как правило, отдельные "задания" определяются в синтаксисе и структуре, которые приложение дирижера понимает и может управлять ими как рабочим процессом.

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

Что подразумевается под "быстрым прекращением"?

Одна из задач конвейера – быстро обрабатывать изменения. Другая – отслеживать различные задачи/задания, которые создают релиз. Поскольку код, который не компилируется или не проходит тест, может задержать весь процесс, важно, чтобы пользователи были быстро уведомлены о таких ситуациях. Быстрое прекращение относится к идее, что конвейерная обработка обнаруживает проблемы как можно скорее и быстро уведомляет пользователей, чтобы проблемы могли быть исправлены, и код был повторно передан для другого запуска через конвейер. Зачастую процесс непрерывной поставки может просмотреть логи, чтобы определить, кто сделал это изменение, и уведомить об этом человека и его команду.

Как непрерывная интеграция обнаруживает изменения?

В наши дни процесс наблюдения обычно представляет собой приложение, такое как Jenkins, которое также организует все (или большинство) процессов, выполняющихся в конвейере, и отслеживает изменения как одну из своих функций. Приложение для просмотра может отслеживать изменения несколькими различными способами. Они включают:

  • Опрос. Программа мониторинга постоянно спрашивает систему управления источниками: "Есть ли у вас что-то новое в репозиториях, что меня интересует?" Когда в систему управления исходным кодом вносятся новые изменения, программа мониторинга "просыпается" и выполняет свою работу по извлечению нового кода и его сборке/тестированию.
  • Периодичность. Программа мониторинга настроена на периодическое начало сборки независимо от того, есть изменения или нет. В идеале, если нет изменений, то ничего нового не создается, так что оно не добавляет больших дополнительных затрат.
  • Push. Это обратная проверка приложения мониторинга с системой управления источниками. В этом случае система управления исходным кодом настроена так, чтобы "выталкивать" уведомление приложению мониторинга, когда изменение фиксируется в хранилище. Чаще всего это можно сделать в форме "webhook" – программы, которая "подключается" к запуску при нажатии нового кода и отправляет уведомление через интернет в программу мониторинга. Чтобы это работало, программа мониторинга должна иметь открытый порт, который может получать информацию о веб-крюках через интернет.
Наверх
Меню