Основы синтаксиса workflow

LinuxBeginner
Практиковаться сейчас

Введение

GitHub Actions — это встроенная в GitHub система автоматизации workflow. Она реагирует на события в репозитории, такие как отправка изменений, pull request или ручной запуск, а затем автоматически выполняет заданные задания.

С помощью этой автоматизации можно выполнять множество DevOps-задач: тестировать код, собирать артефакты и развёртывать приложения. Список инструкций называется workflow.

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

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

  • Триггеры: когда робот должен проснуться? Например, когда вы отправляете код в репозиторий.
  • Задания: какую основную задачу должен выполнить робот?
  • Runner: какой компьютер робот должен использовать для работы?
  • Шаги: какие конкретные команды должен выполнить робот?

К концу лабораторной работы у вас будет работающий конвейер, который автоматически выводит приветствие при каждом обновлении кода.

Предварительные требования

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

Создайте репозиторий

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

Откройте веб-браузер и войдите в GitHub. Нажмите значок + в правом верхнем углу любой страницы GitHub и выберите New repository.

В поле «Repository name» введите github-actions-basics. Сделайте репозиторий Public, чтобы он был бесплатным и удобным для использования. Установите флажок Add a README file, чтобы инициализировать репозиторий этим файлом. Затем нажмите кнопку Create repository.

Создание нового репозитория

Теперь, когда проект создан в облаке (GitHub), нужно скопировать его в среду этой лабораторной работы. Такую операцию называют клонированием.

В расположенном ниже терминале выполните команду git clone. Замените your-username своим именем пользователя GitHub.

cd ~/project
git clone https://github.com/your-username/github-actions-basics.git

После завершения клонирования появится новая папка github-actions-basics. Перейдите в неё, чтобы начать работу.

cd ~/project/github-actions-basics

GitHub Actions строго определяет расположение файлов с инструкциями. Он проверяет только специальную скрытую папку .github, внутри которой находится папка workflows. Если разместить файлы workflow в другом месте, робот просто их проигнорирует.

Создайте необходимую структуру каталогов. Параметр -p указывает команде создать сразу родительский и дочерний каталоги, если их ещё нет.

mkdir -p .github/workflows

Затем создайте в новой папке пустой файл main.yml. В этот файл мы запишем инструкции.

touch .github/workflows/main.yml

Проверить правильность настройки можно, рекурсивно выведя список файлов. Вы должны увидеть папку .github, внутри неё — workflows, а внутри workflows — файл main.yml.

ls -R .github

Определите триггер

Файлы workflow записываются в формате YAML. Это простой текстовый формат, в котором для организации данных используются отступы (пробелы), как в структурированном списке.

Каждому workflow нужны имя и триггер. Триггер сообщает роботу, когда начинать работу. Без триггера workflow никогда не запустится. Мы хотим, чтобы робот просыпался каждый раз, когда мы отправляем новый код в репозиторий.

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

Откройте пустой файл main.yml в текстовом редакторе nano.

nano .github/workflows/main.yml

Введите в файл следующее содержимое.

name: First Workflow
on: push

Ключевое слово name задаёт имя workflow, которое отображается на GitHub. Строка on: push — это команда, определяющая запуск: «При событии push выполнить workflow».

Нажмите Ctrl+X, затем Y, а потом Enter, чтобы сохранить изменения и выйти из редактора.

Определите задание и runner

Теперь робот знает, когда просыпаться. Осталось указать ему, где работать. Для этого нужно определить Job и Runner.

Job — это группа задач. В workflow может быть несколько заданий, например «Test Code» и «Deploy App», но сейчас мы создадим только одно.

Runner — это сервер, который GitHub предоставляет для выполнения задания. Представьте, что это компьютер, за которым работает ваш робот-помощник. Мы используем ubuntu-latest, то есть GitHub предоставит нам новый компьютер с последней версией Ubuntu Linux.

Новый runner важен потому, что задания workflow должны выполняться воспроизводимо. Каждый запуск начинается в чистой среде, а не использует остатки предыдущей ручной настройки.

Снова откройте файл main.yml.

nano .github/workflows/main.yml

Добавьте следующие строки в конец файла. Внимательно следите за отступами. В YAML отступы имеют критическое значение. Слово first-job должно иметь отступ в два пробела, а runs-on — в четыре пробела.

jobs:
  first-job:
    runs-on: ubuntu-latest

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

name: First Workflow
on: push

jobs:
  first-job:
    runs-on: ubuntu-latest

Сохраните файл и выйдите из редактора (Ctrl+X, Y, Enter).

Добавьте шаги и отправьте изменения

У нас уже есть «когда» (on push) и «где» (ubuntu-latest). Теперь определим самое важное — «что именно делать». Это задаётся в разделе Steps.

Шаги — это конкретные команды, которые выполнит робот. В первой лабораторной работе мы просто попросим робота вывести приветствие. Для выполнения стандартной команды Linux используется ключевое слово run.

В последний раз откройте файл main.yml.

nano .github/workflows/main.yml

Добавьте раздел steps под first-job. Убедитесь, что строка steps: выровнена по вертикали со строкой runs-on:.

steps:
  - name: Print greeting
    run: echo "Hello World from LabEx"

Дефис - обозначает элемент списка. В данном случае мы перечисляем шаги задания.

Итоговый файл должен выглядеть точно так:

name: First Workflow
on: push

jobs:
  first-job:
    runs-on: ubuntu-latest
    steps:
      - name: Print greeting
        run: echo "Hello World from LabEx"

Сохраните файл и выйдите из редактора.

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

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

git add .
git commit -m "Add my first workflow"
git push

Система запросит имя пользователя и пароль GitHub.

Важно: если появится ошибка о том, что поддержка аутентификации по паролю удалена, вместо пароля учётной записи используйте Personal Access Token (PAT). Создать его можно в GitHub: Settings -> Developer settings -> Personal access tokens. Выберите «Tokens (classic)», создайте новый токен с областью repo и вставьте этот токен в терминал, когда система запросит пароль.

Токен GitHub

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

Вы должны увидеть workflow с именем «First Workflow». Рядом может отображаться жёлтый вращающийся круг (выполнение) или зелёная галочка (успешное завершение). Нажмите на workflow. Затем внутри него нажмите first-job, чтобы просмотреть сведения. Разверните шаг «Print greeting» — в журналах вы увидите выведенное сообщение «Hello World from LabEx».

Первый workflow

Итоги

Поздравляем! Вы успешно создали и запустили свой первый workflow GitHub Actions.

В этой лабораторной работе вы изучили четыре основных элемента файла workflow:

  • Триггер (on): сообщает action, когда нужно начать работу.
  • Job: объединяет задачи.
  • Runner (runs-on): задаёт серверную среду.
  • Step: определяет команду, которую нужно выполнить.

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