Введение
Разработчик при написании кода должен быть максимально продуктивным. Однако бывают ситуации, когда им приходится выполнять работу не по профилю или реализовывать повторяющиеся задачи. Для того, чтобы сэкономить время, стоит внедрить автоматизацию выполнения этих повторяющихся задач. Таким образом, можно повысить производительность разработчиков.
По мере того, как развивались технологии CI/CD (Continous Integration / Continous Deployment – непрерывная интеграция и развертывание ПО), процесс автоматизации задач стал намного проще. С помощью CI мы можем интегрировать код в общедоступный репозиторий и запускать автоматизированные тесты для того, чтобы выявлять ошибки на ранних стадиях разработки. Вместе с этим, CD позволяет автоматизировать процесс развертывания в соответствии с внесенными в код изменениями и переменными среды. Цель данной технологии – быстро и надежно доставить код.
У GitHub есть свой собственный конвейер CI/CD для автоматизации задач. Он называется GitHub Actions. Его задача состоит в том, чтобы помочь разработчикам автоматизировать жизненный цикл разработки ПО. Так что, сегодня мы рассмотрим некоторые аспекты GitHub Actions.
Давайте начнем.
GitHub Actions
Впервые GitHub Actions был анонсирован в 2018 году. А в 2019 году он появился в открытом доступе как конвейер CI/CD для автоматизации различных аспектов SDLC прямо из репозитория GitHub. Код, который отвечает за автоматизацию, расположен в YAML-файле. Это удобный для восприятия язык сериализации данных, который можно использовать для написания файлов конфигурации.
Триггером для запуска GitHub Actions могут быть команды pull, push или любой другой внешний триггер. Вы можете запускать GitHub Actions для того, чтобы создавать, тестировать и развертывать веб-сайты.
Давайте создадим Action для того, чтобы лучше понять, как они работают.
Создание GitHub Action
Процесс создания GitHub Action довольно прост. Перейдите в свой репозиторий GitHub через веб-страницу GitHub, либо через локальный репозиторий. Создайте в корневом каталоге каталог .github/workflow. Теперь в каталоге, который вы только что создали, вы можете создать YAML-файл с любым именем. Расширение YAML-файла - .yml. Итак, теперь имя файла выглядит так: name.yml.
Стандартная структура YAML-файла
Наверху в YAML-файле мы должны указать название нашего Action (через ключевое слово name).
name: GitHub Actions
После этого мы можем добавить триггер. Триггером могут быть команды pull, push или же он может просто срабатывать в какой-то момент времени. Для того, чтобы определить триггер, нам понадобиться ключевое слово on.
Если мы говорим о событиях, определенных в GitHub, например, pull, то можно использовать синтаксис, приведенный ниже. При этом вы можете добавить несколько триггеров.
// single { // один }
on: [push]
// multiple { // несколько }
on: [push, fork]
Для запуска по времени мы можем воспользоваться ключевыми словами schedule и cron.
on:
schedule:
- cron: "0 */12 * * *"
Выражение, записанное после ключевого слова cron, можно разбить и объяснить следующим образом:
- 0: первое поле – это минуты. Оно указывает на то, что Action запуститься на 0-й минуте часа.
- */12: это поле часов. Оно указывает на то, что Action будет запускаться каждые 12 часов. */12 говорит о том, что задачи (jobs) будут выполняться каждые 12 часов, если же вы укажите просто 12, то они будут выполняться в 12АМ (12:00) и в 12PM (00:00). Вы также можете указать время, исходя из 24 часов в сутках, например, записать 23, что будет означать 11PM.
- «*»: это день запуска. Это поле указывает на то, что задачи будут выполняться каждый день.
- «*»: вторая звездочка обозначает месяц. Это поле указывает на то, что задачи будут выполняться каждый месяц.
- «*»: последняя звездочка определят день недели. Это поле указывает на то, что задачи будут выполняться каждый день недели. День недели указывается в виде числа, где первый день недели – это воскресенье, то есть 0. Дни недели разделяются запятыми, например, 0,2,3.
Таким образом, самый примитивный синтаксис выглядит так:
cron: "Minute Hour Day Month Day_of_Week"
А теперь нам нужно добавить конкретную функцию, которая будет выполняться при запуске сценария. В YAML есть ключевое слово jobs, которое используется для определения различных задач.
Давайте посмотрим на полный синтаксис и после этого разберем его подробнее:
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Setup Node.js
uses: actions/setup-node@v2
with:
node-version: '14'
- name: Install dependencies
run: npm install
- name: Run tests
run: npm test
update-readme - это имя задачи. Внутри нее находятся исполнители задач, которые определяются ключевым словом runs-on. Это машина, на которой будет запускаться команда.
Теперь мы переходим к ключевому слову steps, с помощью которого определяются все шаги, которые должны быть выполнены в процессе выполнения сценария. Вы можете определить порядок steps с помощью двух основных ключевых слов: name и uses. Ключевое слово name используется для предоставления описательного имени для определенного шага сценария. Ключевое слово uses используется для определения действия или содержимого Docker, которое должно быть запущено для выполнения задачи.
Первый шаг использует действие action/checkout, которое вызывает репозиторий, извлекает ссылку, например, ветку, тег или SHA-коммит, и подготавливает рабочую область для дальнейших шагов. Следующим шагом будет использование настройки инструмента, которое требует запуска команды. В нашем случае это Node.js. После этого мы должны запустить команду для установки зависимостей.
Последний шаг – это запуск кода, который выдаст результат. В нашем случае мы запускаем команду npm test для запуска тестирования. Помимо этого, вы можете запустить любой Node-файл, который есть в репозитории.
- name: Update README
- run: node update-readme.js
А теперь давайте посмотрим на весь код YAML-файла:
name: GitHub Actions
on:
schedule:
- cron: "0 */12 * * *"
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Setup Node.js
uses: actions/setup-node@v2
with:
node-version: '14'
- name: Install dependencies
run: npm install
- name: Run tests
run: npm test
Отладка и устранение неисправностей
При написании Actions вы можете столкнуться с такими ошибками, как неудачное выполнение задания или недопустимый синтаксис. А так как в YAML нет встроенного отладчика, исправить ошибку будет не так просто. Однако есть несколько методов и инструментов, которые могут помочь отладить Actions. Вот они:
- Расширение для GitHub Actions. У GitHub есть официальное расширение для Actions для VS Code. С его помощью вы можете управлять и выполнять Actions. Кроме того, у него есть такие функции, как проверка и автодополнение кода, которые помогут вам не допускать ошибок в синтаксисе.
- Условная отладка. Данный метод работает не только с YAML, но и с другими языками. При таком подходе вы используете условия для того, чтобы выборочно запускать шаги. Таким образом, вы можете найти причину ошибки. Для их проверки вы можете использовать if-условия.
- Журналы сценариев. GitHub при выполнении Actions создает журналы. В этих журналах подробно описано выполнение каждого шага. Таким образом, вы можете узнать, какие шаги были выполнены неудачно. Просмотреть журналы можно в своем репозитории, нажав на вкладку «Actions».
- Act. Это терминал, с помощью которого можно запускать GitHub Actions локально. Таким образом, вы можете для начала протестировать Actions локально, а потом уже отправлять их на GitHub. Это поможет вам сэкономить время, так как вам не нужны будут никакие push/fork/pull для того, чтобы вызвать Action.
А вот несколько преимуществ использования GitHub Actions:
- Cron-задания. GitHub Actions могут выполнять cron-задания. Вы можете определить в файле код и с помощью GitHub Actions запускать его в определенный момент времени.
- Богатая экосистема. GitHub предоставляет экосистему Git, которая помогает беспрепятственно интегрировать Actions в сценарий. Триггеры, связанные с pull, push или fork, можно легко использовать в GitHub. Кроме того, у него есть рынок готовых Actions, где вы можете найти огромное количество полезных вариантов для вашего проекта.
- Масштабируемость. Как вы уже знаете, GitHub позволяет управлять как большими проектами, так и не очень. Вместе с этим, GitHub позволяет создавать несколько сценариев и Actions для запуска различных заданий, зависящих от триггера.
- Безопасность. ****Вы можете определить секреты GitHub, например, ключи API, в настройках репозитория. У YAML будет доступ к этим секретам, что сделает их безопасными для использования переменными среды. получить доступ к секрету можно с помощью следующего кода:
- name: Update README
run: node update-readme.js
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} # accessing the secret { // получение доступа к секрету }
Заключение
Как мы увидели в этой статье GitHub Actions могут выполнять различные задачи в соответствии с вашими требованиями. Мы изучили сами Actions, их синтаксис и то, как их можно определить. И напоследок мы узнали о некоторых преимуществах их использования. Кроме того, мы узнали, что существует специальный рынок готовых Actions, который упрощает процесс их добавления в ваш сценарий.
Я надеюсь, что, прочитав эту статью, вы смогли понять, что такое GitHub Actions. Спасибо за внимание.