Как создать и поддерживать CI/CD пайплайны: полезные советы

Рынок ИТ
Блог
Как создать и поддерживать CI/CD пайплайны: полезные советы
Поделиться:

Что такое CI/CD пайплайн?

Разработка CI/CD пайплайнов сочетает в себе практики непрерывной интеграции и непрерывной доставки. В современном быстро изменяющемся технологическом ландшафте разработка CI/CD пайплайнов это важнейшая основа в автоматизации процесса разработки программного обеспечения (ПО), от написания кода до развертывания.

Применение CI/CD позволяет команде разработчиков:

  • Управлять внесением изменения в код

  • Автоматизировать процесс сборки и тестирования

  • Ускорить доставку новых функций и исправлений

  • Улучшить качество кода за счет автоматических проверок

  • Гарантировать точное соответствие конечного продукта ожиданиям пользователей

  • Сократить время простоя.

Определение и основные компоненты

CI/CD пайплайн (CI/CD pipeline) расшифровывается как «конвейер непрерывной интеграции и непрерывного развертывания».

CI (Continuous Integration) означает практику разработки ПО, когда разработчики несколько раз в день вносят изменения в код, после чего запускаются автоматические операции сборки кода в программный продукт и проверки итогового продукта на соответствие критериям качества.

CD (Continuous Delivery) дополняет CI за счет шагов по выпуску готового программного продукта в целевые окружения для пользователей.

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

Основные этапы разработки CI/CD пайплайнов

Pipeline CI/CD делится на этапы разработки, каждый из которых выполняет определенный список задач. Рассмотрим основные этапы хорошего конвейера.

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

  2. Сборка и компиляция. Pipeline извлекает последнюю версию кода из системы контроля версий и компилирует его в развертываемый артефакт, например, двоичный файл или образ контейнера. Для сборки обычно используются такие инструменты, как Maven, Gradle или Docker.

  3. Автоматизированное тестирование. Включает проведение комплекса тестов (модульных, интеграционных, сквозных), что обеспечивает высокое качество программного обеспечения.

  4. Анализ качества. Проводится параллельно с автоматизированным тестированием. Используются инструменты статического анализа кода (SonarQube или ESLint) для оценки на соответствие стандартам кодирования, выявления потенциальных проблем кода и внедрения лучших практик.

  5. Упаковка артефактов. После всех тестов и проверок качества артефакт упаковывается в формат, подходящий для развертывания, например, в виде образа контейнера или ZIP-файла.

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

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

Использование конвейеров CI/CD позволяет компаниям создавать высококачественное ПО и оставаться конкурентоспособными в постоянно развивающейся цифровой среде.

Планирование и настройка

Настройка пайплайн CI/CD требует тщательного планирования, координации инструментов и процессов, мониторинга, а также непрерывности.

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

  • Поддержка тщательной аутентификации;

  • Защита сетей;

  • Проверка кода;

  • Управление изменениями;

  • Продуктивное общение.

Интеграция с GitLab

Gitlab CI/CD структура для автоматизации сборки, тестирования и развертывания программного кода с повышенной гибкостью и возможностью повторного использования.

Схема работы:

Схема интеграции с Gitlab

Алгоритм схемы:

  • Кодирование

  • Загрузка исходного кода в git-репозиторий

  • Поиск конфигурации gitlab-ci.yml в корне репозитория

  • Запуск пайплайна согласно логике

Рассмотрим пример создания простого пайплайна, который проверяет факт написания, тестирования, развертывания статического веб-сайта в AWS S3 Bucket.

Создание нового gitlab-ci.yml.

1. Определение переменных:

variables: # variabiles definitions for easier reuse of values.
CI_NODE_IMAGE: "node:16.13.2"

2. Определение этапов:

# Pipeline stages
stages:
- install
- build
- test
- deploy

3. Определение задания на каждом этапе:

#install job definition

install:

stage: install

image: "$CI_NODE_IMAGE" # variable reference

script: # Shell script that is executed by the runner.

  - npm ci

cache: # List of files that should be cached between subsequent runs.

  key:

    files:

      - package.json

      - package-lock.json

  paths: # directories to cache

    - node_modules

 

# Build Job definition

build:

stage: build

image: $CI_NODE_IMAGE

script:

  - npm run build

artifacts: # list of files and directories that are attached to the job

  paths:

    - dist/

cache:

  key:

    files:

      - package.json

      - package-lock.json

  paths:

    - node_modules

  policy: pull

 

# Test Job definition

test:

stage: test

image: $CI_NODE_IMAGE

script:

  - npm run test

 

# Deploy Job definition

deploy:

stage: deploy

image: registry.gitlab.com/gitlab-org/cloud-deploy/aws-base:latest # a Docker provided by GitLab that includes the AWS CLI

script:

  - aws s3 cp --recursive dist s3://bucket-name # copies the dist folder to an aws s3 bucket

Использование Jenkins

Jenkins программа с открытым исходным кодом в виде сервера для непрерывной интеграции ПО. Создана путем кодификации и структурирования внутри нескольких блоков. Среда написана на Java, поэтому работает в Unix-подобных ОС (Windows, macOS и других).

Пример простого файла конвейера Jenkins:

// Example of Jenkins pipeline script

 

pipeline {

  stages {

    stage("Build") {

       steps {

          // Just print a Hello, Pipeline to the console

          echo "Hello, Pipeline!"

          // Compile a Java file. This requires JDKconfiguration from Jenkins

          javac HelloWorld.java

          // Execute the compiled Java binary called HelloWorld. This requires JDK configuration from Jenkins

          java HelloWorld

          // Executes the Apache Maven commands, clean then package. This requires Apache Maven configuration from Jenkins

          mvn clean package ./HelloPackage

          // List the files in current directory path by executing a default shell command

          sh "ls -ltr"

       }

   }

   // And next stages if you want to define further...

 } // End of stages

} // End of pipeline

В этом примере сценария стоит обратить внимание на некоторые команды java, javac и mvn. Они недоступны по умолчанию, требуется установка и настройка через Jenkins.

Пример создания нового задания Jenkins.

В веб-браузере нужно перейти по адресу localhost:8080, выбрать и нажать «Новый элемент».

02 Новый элемент

На экране отобразится список параметров вместе с полем для имени конвейера. Необходимо выбрать тип задания Pipeline и дать ему имя (например, TestPipeline), нажать кнопку ОК, чтобы продолжить.

03 Тип задания Pipeline

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

04 Описание проекта.jpg

Теперь необходимо создать триггеры.

Указываем ветку и репозиторий, учетные данные, опциональные варианты поведения.

05 Триггеры.jpg

Следующий раздел «Расширенные параметры проекта».

06 Параметры проекта.jpg

Далее нужно указать источник импортирования кадров, путь (path) к файлу, репозиторию, учетные данные и т. д.

07 Источник импорта.jpg

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

08 Просмотр проекта.jpg

Результат конвейера на изображении:

09 Результат конвейера.jpg

Журналы каждого выполненного шага можно посмотреть в консоли:

10 Консоль 1.jpg

11 Консоль 2.jpg

12 Консоль 3.jpg

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

Внедрение Maven

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

Рассмотрим пример задания для сборки с помощью Maven.

Для создания нового проекта в Jenkins необходимо перейти на панель управления и нажать «Новый элемент», далее ввести имя задания, выбрать «Проект Maven» и подтвердить его, нажав «ОК».

13 Проект Maven.jpg

На странице конфигурации в пункте «Управление исходным кодом» нужно выбрать «Git» и ввести URL-адрес своего репозитория. В задании будет использоваться Public Repo, поэтому нет необходимости проходить какие-либо шаги аутентификации.

14 Управление исходным кодом.jpg

В разделе «Триггеры сборки» с помощью параметра «Создавать периодически» устанавливаем частоту сборки для конкретного интервала времени. Например, нужно создавать проект Maven каждые 30 минут. Значит, в текстовом поле нужно указать H/30 * * * *.

15 Частота сборки.jpg

В разделе «Сборка» в поле Root POM необходимо указать путь pom.xml в зависимости от требований задачи. В этом же разделе нужно определить цель и вариант создания с помощью maven. В примере будем использовать цели: очистить, установить, упаковать.

16 Путь pom.xml.jpg

После сохранения параметров конфигурации нужно перейти к проекту Maven My_First_Maven_Job и нажать кнопку «Создать сейчас».

17 Завершение сборки.jpg

Сборка завершилась сообщением SUCCESS. Если же возникает ошибка, можно обратиться к выводам консоли и предоставить журналы сборки команде разработчиков.

Поддержка CI/CD пайплайнов

Обеспечение непрерывной интеграции и доставки

Внедрение подхода CI обеспечивает частую интеграцию кода, автоматическое тестирование и раннее обнаружение проблем. Это способствует улучшению сотрудничества в команде и ускорению цикла разработки.

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

Мониторинг и оптимизация

Непрерывная работа конвейера CI/CD требует использования автоматизированных средств отслеживания отдельных этапов и действий (ELK, Splunk, Prometheus + Grafana), который будет соответствовать бизнес-потребностям. Далее инструменты мониторинга нужно точно настроить для отслеживания действий.

Интеграция инструментов мониторинга и ведения журналов позволяет получить представление о производительности приложения, предусмотреть появление проблем, обеспечить быстрое устранение неполадок.

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

Советы и лучшие практики

Советы по оптимизации, которые значительно улучшат вашу стратегию CI/CD:

Поощрение культуры непрерывного обучения и совершенствования навыков в команде разработчиков.

Эффективная обработка обратной связи.

Внедрение новых инструментов и методов.

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

Автоматизация процессов

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

Обеспечение безопасности пайплайнов

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

Инструменты и технологии для CI/CD

Выбор лучших инструментов во многом зависит от специфики разрабатываемого приложения.

Вот несколько популярных программных технологий и сервисов для CI/CD:

  • GitLab.Управляет хранилищами исходного кода, документирует результаты тестирования и внесения изменений, анализирует и дополняет функциональность проекта, находит и устраняет ошибки.

  • Docker. Упаковывает проект вместе с его окружением и зависимостями, что упрощает его развертывание и воспроизводимость.

  • Travis CI. Легко подключается к виртуальным репозиториям GitHub с минимальными настройками и не требует отдельной установки.

  • Jenkins. Мощный DevOps-инструмент, совместимый с различными плагинами, что обеспечивает гибкость и широкие возможности интеграции.

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

Хочешь работать с нами? Отправь свое резюме

Нажимая на кнопку, вы соглашаетесь с Политикой конфиденциальности персональных данных

Файлы cookie обеспечивают работу наших сервисов. Используя наш сайт, вы соглашаетесь с нашими правилами в отношении этих файлов.