Настройка рабочего процесса GitHub Actions

Завершено

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

Настройка рабочих процессов для выполнения запланированных событий

Как упоминалось ранее, вы можете настроить запуск рабочих процессов при выполнении определенного действия на GitHub, если событие происходит за пределами GitHub или в запланированное время. Это событие schedule позволяет запускать рабочий процесс в определенное время в формате UTC с помощью синтаксиса POSIX cron. Этот синтаксис cron имеет пять полей *. Каждое поле представляет единицу времени.

Diagram of the five unit-of-time fields for scheduling an event in a workflow file.

Например, если вы хотите запускать рабочий процесс каждые 15 минут, событие schedule будет выглядеть следующим образом:

on:
  schedule:
    - cron:  '*/15 * * * *'

Если вы хотите запустить рабочий процесс каждое воскресенье в 3:00, событие schedule будет выглядеть следующим образом:

on:
  schedule:
    - cron:  '0 3 * * SUN'

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

Настройка запуска рабочих процессов для вызванных событий

Помимо запланированных событий, вы можете вручную запустить рабочий процесс с помощью события workflow_dispatch. Это событие позволяет запустить рабочий процесс с помощью REST API GitHub или нажав кнопку "Выполнить рабочий процесс" на вкладке "Действия" в репозитории на GitHub. С помощью workflow_dispatch можно выбрать ветвь, в которой должен выполняться рабочий процесс, а также задать необязательные входные данные inputs, которые GitHub представит как элементы формы в пользовательском интерфейсе.

on:
  workflow_dispatch:
    inputs:
      logLevel:
        description: 'Log level'     
        required: true
        default: 'warning'
      tags:
        description: 'Test scenario tags'  

Кроме workflow_dispatch, вы можете использовать API GitHub для активации события веб-перехватчика с именем repository_dispatch. Это событие позволяет активировать рабочий процесс для действий, происходящих за пределами GitHub. Фактически оно служит HTTP-запросом к репозиторию о том, чтобы система GitHub активировала рабочий процесс на основе действия или веб-перехватчика. При использовании этого ручного события необходимо выполнить два действия: отправить запрос POST конечной точке GitHub /repos/{owner}/{repo}/dispatches, указав имена событий веб-перехватчика в тексте запроса, и настроить рабочий процесс для использования этого события repository_dispatch.

curl \
  -X POST \
  -H "Accept: application/vnd.github.v3+json" \
  https://api.github.com/repos/octocat/hello-world/dispatches \
  -d '{"event_type":"event_type"}'
on:
  repository_dispatch:
    types: [opened, deleted]

Настройка запуска рабочих процессов для событий веб-перехватчика

Наконец, можно настроить запуск рабочего процесса при возникновении конкретных событий веб-перехватчика на сайте GitHub. Вы можете активировать большинство событий веб-перехватчика из нескольких действий для веб-перехватчика, поэтому если для веб-перехватчика существует несколько действий, можно указать тип действия для активации рабочего процесса. Например, можно запустить рабочий процесс для события check_run, но только для типов действий rerequested или requested_action.

on:
  check_run:
    types: [rerequested, requested_action]

Использование условных ключевых слов

Используя файл рабочего процесса, можно получить доступ к сведениям о контексте и вычислить выражения. Хотя выражения часто используются с условным ключевым словом if в файле рабочего процесса для определения того, следует ли выполнять шаг или нет, вы можете использовать любой поддерживаемый контекст и выражение для создания условного выражения. Важно знать, что при использовании условных выражений в рабочем процессе необходимо использовать специальный синтаксис ${{ <expression> }}. Этот синтаксис указывает GitHub, что нужно вычислить выражение, а не рассматривать его как строку.

Например, рабочий процесс, который с помощью условия if проверяет ссылку github.ref (ссылка на ветвь или тег, активировавшие выполнение рабочего процесса) на соответствие refs/heads/main, чтобы продолжить выполнение следующих шагов в рабочем процессе, будет выглядеть примерно так:

name: CI
on: push
jobs:
  prod-check:
    if: github.ref == 'refs/heads/main'
    runs-on: ubuntu-latest
    steps:
      ...

Обратите внимание, что в этом примере в синтаксисе отсутствует элемент ${{ }}. При использовании некоторых выражений, как и в случае условного if , можно опустить синтаксис выражения. GitHub автоматически оценивает некоторые из этих общих выражений. Вы всегда можете включить их, если забыли, какие выражения будут автоматически оцениваться в GitHub.

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

Отключение и удаление рабочих процессов

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

Screenshot of disabling a workflow on GitHub.

Отключение рабочего процесса может быть полезно в некоторых ситуациях, например:

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

Вы также можете отменить выполнение рабочего процесса, которое выполняется в пользовательском интерфейсе GitHub на вкладке "Действия " или с помощью конечной точки DELETE /repos/{owner}/{repo}/actions/runs/{run_id}API GitHub. Помните, что при отмене выполнения рабочего процесса GitHub отменит все задания и шаги в рамках этого процесса.

Использование шаблонного рабочего процесса организации

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

Эти рабочие процессы можно найти на вкладке репозитория организации Действия. Выберите Новый бизнес-процесс, а затем найдите раздел с шаблонами рабочего процесса организации под названием "Рабочие процессы, созданные название_организации". Например, организация Mona имеет рабочий процесс шаблона, как показано ниже.

Screenshot of a template organization workflow called greet and triage by Mona.

Использование конкретных версий действия

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

steps:    
  # Reference a specific commit
  - uses: actions/setup-node@c46424eee26de4078d34105d3de3cc4992202b1e
  # Reference the major version of a release
  - uses: actions/setup-node@v1
  # Reference a minor version of a release
  - uses: actions/setup-node@v1.2
  # Reference a branch
  - uses: actions/setup-node@main

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