18.09 — Яндекс Кап
18.09 — Яндекс Кап
18.09 — Яндекс Кап
Написать пост

Интеграция CI/CD процессов с использованием GitHub Actions

GitHub Actions — мощный инструмент для реализации CI/CD, который позволяет упростить рабочие процессы и ускорить выпуск продуктов. Внутри — об основных функциях системы и особенностях работы с ней.

174 открытий1К показов
Интеграция CI/CD процессов с использованием GitHub Actions

Веб-сервис GitHub для хостинга, появившийся в 2008 году — популярный инструмент для совместной разработки проектов, которым пользуются практически все программисты. Здесь хранится множество программ с открытым исходным кодом, доступных для просмотра и скачивания. GitHub используется программистами и как социальная сеть для разработчиков, специалистов ИТ-сектора и всех, кому интересна тема программирования.

GitHub Actions — бесплатная система непрерывного развертывания на базе сервиса. Узнаем, как интегрировать CI/CD процессы с помощью этой системы и почему эти действия так важны для разработки и использования цифровых продуктов.

Что такое CI/CD

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

  • Continuous Integration (CI) — это непрерывная интеграция обновлений в программные продукты.
  • Continuous Deployment/Delivery (CD) — непрерывное развертывание/поставка.

Оба процесса направлены на автоматизацию разработки, тестирования и публикации софта.

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

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

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

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

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

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

Преимущества CI/CD

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

В числе основных преимуществ CI/CD:

  • Ускоренный выход на рынок. С помощью технологий CI/CD команда программистов автоматизирует основные этапы разработки, что ускоряет процесс доставки ПО, то есть его выход на продакшн. 
  • Повышение качества продукта. Благодаря регулярному тестированию кода ошибки проще обнаружить и исправить на первых этапах разработки.
  • Повышение производительности команды. Автоматизация рабочих процессов позволяет разработчикам уделять больше внимания написанию кода, не тратя силы на интеграцию и развертывание.
  • Возможность быстрого отката. Если возникнут проблемы, проект всегда можно откатить к предыдущей версии. Так образом, риски пользователей столкнуться с ошибками снижается.
  • Прозрачность. С помощью CI/CD каждый коммит в программе отслеживается, что позволяет сразу обнаружить ошибку и ее автора. 
  • Эффективная обратная связь. Небольшие итерации кода проще тестировать и развертывать, проверяя гипотезы в ускоренном режиме.
  • Польза для клиента. Большинство продуктов, в которых используется CI/CD, — коммерческие. Это значит, клиенты меньше сталкиваются с перебоями в работе сервиса. При этом пожелания пользователей по доработке ПО проще внедрять. 
  • Упрощенное масштабирование. Разработчики выпускают более стабильный и качественный продукт.  

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

Обзор GitHub Actions

Рабочие процессы CI/CD реализуются в системе GitHub с помощью инструмента GitHub Actions. Эта платформа создана в 2019 году и предназначена для настройки пайплайнов (последовательностей действий) по сборке, тестированию и релизу проектов. GitHub Actions упрощает все этапы процесса, используя в качестве среды исполнения три типа виртуальных машин (Linux, Windows, MacOS).

Будучи в первую очередь хостингом для исходных кодов, платформа GitHub предоставляет разработчикам удобное пространство для совместной деятельности — здесь есть трекер ошибок, подробные материалы (вики), репозитории. В свою очередь GitHub Actions содержит дополнительные инструменты для сборки и развертывания приложений.

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

Основные компоненты GitHub Actions

Под компонентами платформы понимают основные процессы, которые происходят в системе:

  • Рабочие процессы. Настраиваемые автоматические операции, направленные на выполнение конкретных заданий. В репозитории находятся в файле YAML и выполняются при активации события. В рабочие процессы входит тестирование кода, развертывание приложений, добавление меток. 
  • События. Это действия в репозитории, которые запускают рабочие процессы. Активация может происходить по расписанию, составленному в автоматическом режиме или вручную.
  • Задания (работы). Имеется в виду набор шагов в конкретном рабочем процессе. Каждый этап — это полноценный скрипт или определенное действие. Этапы зависимы друг от друга и выполняются последовательно. Можно создать зависимые работы или параллельные.
  • Действия. В GitHub Actions это пользовательские приложения, которые выполняют сложные, но регулярные задачи. Этот компонент нужен для уменьшения повторяющихся фрагментов кода.  
  • Средства выполнения. Серверы, на которых происходят рабочие процессы после активации. Каждое средство в конкретный момент времени может выполнять одно действие.

Также используются инструменты GitHub Actions, из которых наиболее востребованы следующие:

  • Jenkins. Популярный инструмент автоматизации CI/CD. Поддерживает ряд плагинов, быстро интегрируется с системами управления. 
  • CircleCI. Облачный сервис для автоматизации CI/CD. Интегрируется с хранилищами кода и обладает гибкими настройками для реализации пайплайнов.
  • Travis CI. Еще один облачный сервис для автоматизации непрерывной интеграции и развертывания. Важный инструмент для работы с проектами с открытым кодом. Работает на множестве языков программирования и легко интегрируется с GitHub Actions. 
  • GitLab. Это целый набор встроенных инструментов, которые автоматизируют все этапы CI/CD. GitLab интегрируется с репозиториями кода, что позволяет без труда настраивать алгоритмы сборки. Пользователь полностью контролирует код и инфраструктуру, что важно для безопасности и конфиденциальности. 
  • Docker. CD-инструмент, позволяющий упаковать проект с окружением и всеми зависимостями. В разработке этот процесс называется контейнеризация.

Особенности работы с GitHub Actions

Система непрерывной интеграции GitHub Actions позволяет проделать все этапы работы с CI/CD. Общий принцип следующий: в репозитории создается директория github/workflows, в которую помещены файлы с описанием шагов для выполнения различных действий.

Организация рабочих процессов представлена в виде workflow — последовательности стандартных шагов для решения определенной задачи. Репозитории содержат один или несколько воркфлоу в зависимости от текущей стадии процесса.

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

Для понимания процесса приведем пример Workflow:

Интеграция CI/CD процессов с использованием GitHub Actions 1

Выделяется три блока:

  1. Настройки последовательности. Здесь name — название воркфлоу, которое отражается в дашборде GitHub; on — условие срабатывания Workflow.
  2. Jobs — настройки джобов. Здесь print_hello — название, runs-on — инструкция, на какой машине запускать работу.
  3. Steps — настройка шагов. Здесь name — название, а run — действие, которое будет выполнено в терминале.

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

Тестирование Workflow состоит их нескольких фаз — планирования, разработки архитектуры, строительства (испытаний) и перехода (тесты исправлений). Этими процессами занимаются тестировщики.

Если корпоративные или личные аккаунты разработчиков интегрированы с сервисами Microsoft Teams, Slack или подобными, можно отслеживать развертывание с их помощью. Через приложения будут приходить уведомления о статусе происходящих процессов.

Интеграция CI и CD процессов

Разработка непрерывной интеграции и развертывания реализуется в соответствии с определенными требованиями:

  • Распределение обязанностей. Задачи разработки разделяются между участниками команды. Процессы организуются в соответствии с логистикой бизнеса, необходимостью внедрения в код сквозных функций и выполнения тестов. Учитывается также уровень конфиденциальности проекта. 
  • Снижение рисков. Разработчики должны стремиться к минимизации уязвимостей и ошибок на каждой стадии разработки. Для этого проводится постоянное тестирование, оптимизируется хранение и процессы обработки данных.
  • Обратная связь. Успех проекта во многом зависит от продуктивного взаимодействия команды разработчиков, заказчиков и пользователей. Если обратная связь налажена, корректировки и обновления будут вноситься быстрее. Сборка и тестирование — это в основном автоматические процессы, но в других операциях требуется ручная отладка. 
  • Создание рабочей среды. Удобное совместное рабочее пространство — обязательное условие продуктивной работы. При этом помимо основной ветки, желательно создать побочную для тестирования и обновлений. 

СI/CD — это аналог конвейерного производства в разработке. Здесь тоже присутствует распределение ответственности, потоковые процессы и одновременное выполнение сразу нескольких процессов — например, написания кода и тестирования. Система активно применяется в DevOps, современной методике взаимодействия в команде разработчиков и других ИТ-специалистов.

Этапы CI/CD

Основные этапы CI и CD процессов:

  1. Выбор инструментов. В соответствии с потребностями команда выбирает инструментарий, которым будет пользоваться в процессе интегрирования и развертывания. Необходимо также настроить репозиторий для работы с инструментами. 
  2. Написание кода. Каждый участник команды пишет код для своего модуля и вручную тестирует его. Далее проверенный блок интегрируется с текущей версией программного продукта. Только после публикации всех модулей на главной ветке команда переходит к следующему этапу.
  3. Сборка и тестирование. Запускается автоматическая система сборки и тестирования. Триггеры настраивают также автоматически либо вручную. В первом случае используется Jenkins или иной инструмент непрерывной интеграции.
  4. Ручное тестирование. После окончания автоматизированной сборки продукт уходит тестировщикам. Они применяют разные методики проверки, чтобы выявить ошибки и уязвимости, пропущенные на этапе автоматического тестирования. 
  5. Релиз. Чистый и отлаженный код идет на этап клиентского релиза. Заказчик проверяет продукт, привлекая специалистов или небольшую группу пользователей. Если есть замечания, код отправляют на доработку. 
  6. Развертывание. С помощью технологий CD актуальную версию ПО размещают на сервисах разработчика. Клиент на этой стадии может работать с продуктом, изучать его функции и искать уязвимости.
  7. Поддержка и мониторинг. Доступ к приложению получают все пользователи. Разработчики занимаются поддержкой, отслеживанием реакций и анализом опыта взаимодействия с софтом. 

Доработки — неотъемлемая часть процесса. Изучив пользовательский опыт, разработчики готовят план доработок, обновлений и устранения багов. Возможность оперативно вносить изменения в код, тестировать и совершенствовать продукт делает концепцию непрерывной интеграции популярной в ИТ-сообществе. Специалисты применяют ее на практике при разработке проектов независимо от их масштаба и степени сложности.

Следите за новыми постами
Следите за новыми постами по любимым темам
174 открытий1К показов