• База знаний
  • /
  • Блог
  • /
  • Wiki
  • /
  • ONLINE CHAT
+380 (44) 364 05 71

FREEHOST.WIKI

Что такое CI/CD?

Статья также доступна на украинском (перейти к просмотру).

Развитие стратегий DevOps – поточной разработки, тестирования и внедрения веб-приложений, привел к появлению методов автоматизации этого процесса за счет образования CI/CD-конвейеров непрерывной интеграции и поставки кода Механизм позволяет избежать многих недостатков и неудобств, присущих традиционным подходам, что в конечном счете ведет к повышению уровня эффективности рабочего процесса и улучшению качества кода. Рассмотрим существующие подходы к внедрению методов DevOps, а также характеристики, условия применения и примеры реализации CI/CD-средств.

Традиционные подходы к разработке и выпуску релизов

В идеализированном варианте основными задачами любого рабочего процесса разветвленной разработки веб-приложения являются:

  • возможность одновременной работы всех участников рабочего процесса;

  • отсутствие конфликтов кода при внесении изменений;

  • Быстрое и безошибочное слияние кода;

  • Периодическое локальное и модульное тестирование;

  • Быстрая доставка и развертывание кода в производственной среде без потерь надежности.

Для решения указанных задач большинство команд разработчиков во время рабочего процесса используют один или несколько репозиториев кода, интегрированных с системой контроля версий. Git или ее разновидностями, включающимиAPI для интеграции и интерфейса командной строчки для управления более сложными процедурами.

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

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

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

Применение CI/CD-конвейеров для автоматизации рабочего процесса

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

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

Указанная методика получила название процесса непрерывной интеграции CI(Continuous Integration) кода. Однако процесс не был бы совершенным и полным без наличия подготовленных изолированных сред для выполнения независимых тестирований, сборки и других операций по подготовке и выпуску релизов. Такие среды могут быть реализованы на базе систем управления контейнерными средами Docker или Kubernetes. За их настройку и подготовку к развертыванию кода отвечает процесс CD (Continuous Delivery) непрерывной поставки или развертывания  (Deployment) кода. 

Объединение указанных механизмов позволяет получить единый управляемый трубопровод конвейер для организации автоматизированного рабочего процесса разработки веб-приложений. Обычно он обозначается как CI/CD. 

Теперь мы можем сформулировать основные принципы или условия организации DevOps процесса для масштабных веб-проектов:

  • Репозиторий на основе системы контроля версий;

  • Подготовленный конвейер CI/CD непрерывной интеграции и поставки кода;

  • Автоматизация циклических действий по обслуживанию конвейера – тестирование, исправление ошибок, извлечение результатов и т.п.;

  • Изолированная среда выполнения на базе стандартизированных контейнерных технологий;

  • Работа с инфраструктурой проекта по принципам IAC;

  • Мониторинг работы CI/CD-конвейера и контроль запущенных процессов;

  • Использование выделенного VPS или другого сервера для запуска главного процесса проекта.    

Соблюдение указанных условий является показателем внедрения современного подхода к организации рабочего процесса для масштабных проектов.  

Варианты реализации CI/CD и пример применения

Существует множество программных платформ, способных обеспечить необходимые условия для организации рабочего процесса разработки веб-приложений в виде автоматизированного CI/CD-конвейера. Все они имеют собственную технологическую базу, разную степень открытости, но все равно опираются на указанные нами принципы организации DevOps процесса. Наиболее известные из них: GitHub, Jenkins, Azure DevOps та GitLab. 

Выделим общие характеристики для большинства существующих платформ с возможностями CI/CD:

  • Имеют собственные виртуальные среды и runner-серверы для запуска рабочий workflow-процессов;

  • Этапы выполнения каждого процесса определяются с помощью YAML-файла, зарегистрированного в репозитории компании-разработчика;

  • Запуск процессов инициируется с помощью events-событий, которые могут вызываться разными путями – самой платформой, по расписанию через REST API или вручную;

  • YAML-файл содержит набор задач, каждая из которых выполняется в отдельной исполнительной среде по определенному сценарию;

  • Имеют устроенные средства планирования, мониторинга и управления workflow-процессом.

Ниже приведен пример YAML-файла для механизма GitHub Actions одноименной платформы, реализующей возможности CI/CD:  

jobs:
  build_1:
    runs-on: ubuntu-latest
    steps:
      - run: echo "Это задание запустится первым"
  build_2:
    runs-on: ubuntu-latest
    steps:
      - run: echo "Это задание запустится вместе с build_1"
  testing_12:
    runs-on: ubuntu-latest
    needs: [build_1,build_2]
    steps:
      - run: echo "Это задание будет запущено после выполнеия двух предыдущих"
  deploy_12:
    runs-on: ubuntu-latest
    needs: [testing_12]
    steps:
      - run: echo "Это задание будет запущено только после завешения исполнения testing_12"

Приведенный сценарий реализует рабочий процесс, начинающийся с запуска и параллельного выполнения двух задач – build_1даbuild_2. После их завершения начнет выполняться задания с именем testing_12, и только после него запустится задание deploy_12. Таким образом, сценарий демонстрирует вариант запуска взаимосвязанных задач, что в коде обозначается с помощью команды needs.  

Дата-центр FREEhost.UA предоставляет услуги аренды VPS серверов по уже установленному дополнительному программному обеспечению. У нас Вы можете приобрести сервер с Debian и установленным Docker Portainer для удобного управления контейнерами.

Заказать облачный сервер с Docker

ДРУГИЕ СТАТЬИ ПО ТЕМЕ

Спасибо, что выбираете FREEhost.UA