top of page
Writer's pictureSarov+

Лучшие практики использования GitHub Actions

Updated: Nov 10, 2023


illustration conversation

Мы находимся в самом сердце цифровой трансформации, где быстрота и легкость разработки программного обеспечения определяют наше конкурентное преимущество. В этом динамичном контексте, мы обращаемся к основным инструментам, таким как системы непрерывной интеграции и доставки (CI/CD), чтобы ускорить выпуск наших продуктов, улучшить качество и избавиться от излишних задержек. Используя GitHubActions, мы находим удобный, доступный и понятный способ автоматизировать наши рабочие процессы прямо внутри знакомой среды GitHub. Этот инструмент предлагает нам лучшие советы и лайфхаки о том, как построить наши процессы разработки так, чтобы они были как можно более простыми и эффективными. С GitHubActions, мы можем быстро реагировать на изменения, установить новые процессы и использовать ценные практики DevOps, делая нашу работу не только быстрой, но и надежной.


А узнать больше про GitHub Actions можно в нашем видео:


Определение GitHub Actions

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

illustration increase money rate

С помощью GitHub Actions, команды могут с легкостью создать детализированные пайплайны, которые реагируют на конкретные события в репозитории, такие как push или pull запросы, и могут включать в себя множество задач, выполняемых в различных средах.


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


Основные понятия


illustration workflow
illustration start-up

Рабочий процесс (Workflow):

Центральное понятие GitHub Actions, рабочий процесс, представляет собой серию задач, которые настраиваются для автоматического выполнения. Эти задачи, или работы, определены в файле YAML, и могут включать различные операции, от тестирования до развертывания кода. Рабочие процессы могут быть активированы различными событиями, вручную или по расписанию, что обеспечивает гибкость в автоматизации.



Событие (Event):

Событие — это триггер для запуска рабочего процесса. События могут быть стандартными действиями в репозитории, такими как pullrequest или коммит, или же могут быть инициированы внешне через REST API GitHub. Это позволяет рабочим процессам реагировать на широкий спектр активностей, обеспечивая своевременность и релевантность операций CI/CD.


illustration run process


Исполнитель (Runner):

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


illustration  job


Работа (Job):

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



illustration  action

Действие (Action):

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



Пример рабочего процесса

Чтобы улучшить взаимодействие с GitHub Actions и понять его ценный потенциал, освоим основной процесс настройки автоматизации. Пример рабочего процесса, использованный здесь, подскажет, как быстро и легко можно установить YAML-файл для автоматического выполнения задач, опираясь на рекомендации из официальной документации GitHub. Это даст представление о том, как построить автоматизацию, которая может значительно упростить рабочие процессы.

example of work process
  1. Имя рабочего процесса: В первой строке указывается имя рабочего процесса. Это имя служит идентификатором и отображается в интерфейсе GitHub Actions.

  2. Имя запуска (run-name): Следующая строка задаёт имя выполнения процесса, которое видно во время запуска рабочего процесса на GitHub. Имя включает переменную, отражающую пользователя, инициировавшего процесс.

  3. Триггер (on): Здесь определяется событие, которое запустит рабочий процесс — например, commit в репозиторий или слияние веток (merge). Эти триггеры активируют процесс при конкретных действиях в репозитории.

  4. Работы (jobs): Этот раздел группирует задачи (jobs), которые должны быть выполнены. Каждая задача запускается на определённом исполнителе и может содержать множество шагов.

  5. Исполнитель (runs-on): Определяется тип исполнителя, который будет использован для запуска задач. В нашем примере используется виртуальная машина с Ubuntu, на которой будет выполняться рабочий процесс.

  6. Шаги (steps): В этом разделе перечисляются конкретные действия (steps), которые будут выполнены в рамках задачи. Каждый шаг может быть либо командой, либо действием (action).

    • Извлечение репозитория: Первое действие (action) служит для извлечения кода из GitHub репозитория на исполнитель.

    • Настройка Node.js: Следующее действие устанавливает Node.js на исполнителе, позволяя использовать node для следующих шагов, таких как npm install и запуск тестов с использованием специфических пакетов. Версия Node.js указывается явно.


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

Вызов рабочего процесса используя GitHub REST API

Используя REST API, можно улучшить и оптимизировать управление рабочими процессами на GitHub. Этот простой метод позволяет установить взаимодействие с GitHub быстро и эффективно. С помощью веб-хуков можно осуществлять автоматизацию задач, избавляясь от необходимости постоянного вмешательства. Как построить такую систему? Начните с основных шагов настройки внешних приложений для работы с GitHub, чтобы использовать эти ценные инструменты как можно более продуктивно.

GitHub work process

Для активации рабочих процессов через REST API необходимо выполнить следующие шаги:

  1. Создание рабочего процесса: Разработайте рабочий процесс, который представлен в виде YAML-файла, и коммитите его в ваш GitHub репозиторий. Этот файл будет служить основой для определения задач и команд, которые будут выполняться при активации.

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

  3. Отправка POST-запроса: Сформируйте и отправьте POST-запрос с правильными заголовками и телом запроса. В заголовках необходимо указать ваш токен для аутентификации, а в теле — параметры, которые определяют поведение рабочего процесса.

При успешной отправке запроса и правильной конфигурации, GitHub вернет 204 No Content ответ, подтверждающий, что рабочий процесс был запущен. Это подтверждение — знак того, что ваши действия привели к инициализации заданных процедур на стороне GitHub без каких-либо ошибок.

illustration  settings

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





Определение POST запроса

Для быстрого запуска рабочего процесса через REST API GitHub, важно установить корректный POST запрос. В инструкции GitHub вы найдете простой пример, показывающий основные элементы, необходимые для запроса: конечную точку, URL, заголовки и содержимое запроса. Следует учесть, что некоторые параметры являются обязательными, и их пропуск может привести к ошибкам. Таким образом, обеспечение наличия всех обязательных параметров является ключевым для успешной работы.

Documentation create workflow dispatch event

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

Реализованное решение для клиента

Чтобы улучшить надежность системы и избавиться от непредвиденных изменений в клиентских кастомизациях, мы разработали простой подход для отслеживания модификаций. Ранее, клиенты сталкивались с неожиданными изменениями, чьи источники оставались загадкой. Основываясь на лучших практиках из академии Azure DevOps, мы решили использовать аналогичные механизмы в GitHub, что позволило быстро и эффективно установить контроль за процессами кастомизации.


Нашу статью про Azure DevOps можно посмотреть тут.


Мы разработали GitHub Action, который реплицирует функциональность предыдущего решения, тем самым создавая фундаментальную основу для управления ключевыми сущностями клиента в CRM. Весь процесс был интегрирован с GitHub и включал следующие шаги: экспорт кастомизированного решения из Dataverse, извлечение XML-файлов из архива, и последующее добавление этих файлов в отдельную ветку GitHub репозитория для возможности их дальнейшего слияния. Это обеспечивало бекап изменений кастомизации, что давало возможность восстановления предыдущих состояний системы.

illustration php

Дополнительно был реализован механизм backend-автоматизации. В этот механизм вошел плагин, который автоматически инициирует рабочий процесс при любых действиях публикации важных сущностей — таких как "publish" или "publishall". Это позволяло контролировать изменения в реальном времени и гарантировать актуальность бекапов.


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


Заключение

Используя GitHub Actions, разработчики могут улучшить и оптимизировать процессы CI/CD, благодаря простой и быстрой интеграции с GitHub. Это дает возможность легко установить и использовать ценные инструменты для управления жизненным циклом программного обеспечения, минимизируя время на настройку и поддержку. Чтобы избавиться от лишних затрат времени и ресурсов, важно основательно как построить рабочие процессы, так и уделить внимание деталям конфигурации, чтобы как можно лучше использовать потенциал GitHub Actions.

illustration  diagram

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

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

Рекомендации

  1. Изучите документацию GitHub Actions: Перед созданием и настройкой рабочих процессов, ознакомьтесь с официальной документацией GitHub Actions. Это даст вам понимание лучших практик и поможет избежать распространенных ошибок.

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

  3. Используйте токены доступа с осторожностью: При создании личного токена доступа убедитесь, что вы выдаёте только необходимые разрешения, чтобы минимизировать риски безопасности.

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

  5. Используйте ветвление и pull requests: Для внесения изменений в рабочие процессы используйте ветвление и pull requests, чтобы коллеги могли просмотреть изменения перед их внедрением.

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

  7. Мониторинг и логирование: Настройте мониторинг и логирование рабочих процессов для оперативного обнаружения и устранения проблем.

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

  9. Обновляйтесь: Следите за обновлениями GitHub Actions и внедряйте их для улучшения производительности и безопасности рабочих процессов.

  10. Сообщество и поддержка: Не стесняйтесь обращаться за помощью к сообществу GitHub и использовать доступные ресурсы, такие как форумы, вопросы и ответы, для решения возникающих вопросов.

14 views0 comments

Commentaires


bottom of page