Сведения о рабочих процессах
Рабочий процесс — это настраиваемый автоматизированный процесс, который будет выполнять одно или несколько заданий. Рабочие процессы определяются файлом YAML, возвращенным в репозиторий, и будут выполняться при активации события в репозитории. Либо их можно активировать вручную или по определенному расписанию.
Рабочие процессы определяются в каталоге .github/workflows
в репозитории, а репозиторий может иметь несколько рабочих процессов, каждый из которых может выполнять разные наборы задач. Например, у вас может быть один рабочий процесс для создания и тестирования запросов на вытягивание, другой рабочий процесс — для развертывания приложения при каждом создании выпуска, а также еще один рабочий процесс, добавляющий метку каждый раз, когда кто-то открывает новую проблему.
Основы рабочих процессов
Рабочий процесс должен содержать следующие основные компоненты.
- Одно или несколько событий, которые активируют рабочий процесс.
- Одно или несколько заданий, каждое из которых выполняется на компьютере средства выполнения и выполняет серию из одного или нескольких шагов.
- Каждый шаг может либо запускать определенный вами сценарий, либо запускать многократно используемое расширение, которое упрощает создание рабочего процесса.
Дополнительные сведения об этих основных компонентах см. в разделе Общие сведения о GitHub Actions.
Активация рабочего процесса
Триггеры рабочего процесса — это события, которые приводят к запуску рабочего процесса. Эти события могут быть следующими:
- События, происходящие в репозитории рабочего процесса
- События, происходящие за пределами GitHub и запускающие событие
repository_dispatch
в GitHub - Запланированное время
- Вручную
Например, можно настроить рабочий процесс для запуска при отправке в ветвь по умолчанию репозитория, при создании выпуска или при открытии проблемы.
Дополнительные сведения см. в разделе Активация рабочего процесса, а полный список событий см. в разделе События, инициирующие рабочие процессы.
Синтаксис рабочего процесса
Рабочий процесс определяется с помощью формата YAML. Полный справочник по синтаксису YAML для создания рабочих процессов см. в разделе Синтаксис рабочего процесса для GitHub Actions.
Создание примера рабочего процесса
Для определения рабочего процесса GitHub Actions использует синтаксис YAML. Каждый рабочий процесс хранится как отдельный YAML-файл в репозитории кода в каталоге с именем .github/workflows
.
Можно создать пример рабочего процесса в репозитории, который автоматически активирует ряд команд при отправке кода. В этом рабочем процессе GitHub Actions извлекает отправленный код, устанавливает платформу тестирования bats и выполняет базовую команду для вывода версии bats: bats -v
.
-
В репозитории создайте каталог
.github/workflows/
для хранения файлов рабочего процесса. -
В каталоге
.github/workflows/
создайте файл с именемlearn-github-actions.yml
и добавьте следующий код.YAML name: learn-github-actions run-name: ${{ github.actor }} is learning GitHub Actions on: [push] jobs: check-bats-version: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - uses: actions/setup-node@v3 with: node-version: '14' - run: npm install -g bats - run: bats -v
-
Зафиксируйте эти изменения и отправьте их в репозиторий GitHub.
Новый файл рабочего процесса GitHub Actions теперь установлен в репозитории и будет выполняться автоматически каждый раз, когда кто-то отправляет изменения в репозиторий. Дополнительные сведения о журнале выполнения рабочего процесса см. в разделе "Просмотр действия для выполнения рабочего процесса".
Общие сведения о файле рабочего процесса
Чтобы понять, как используется синтаксис YAML для создания файла рабочего процесса, просмотрите объяснение каждой строки вводного примера.
Код | Описание |
---|---|
|
Дополнительные - Имя рабочего процесса, которое будет отображаться на вкладке "Действия" репозитория GitHub. |
|
Необязательно . Имя для запусков рабочих процессов, созданных из рабочего процесса, которое будет отображаться в списке выполнений рабочих процессов на вкладке "Действия" репозитория. В этом примере используется выражение с контекстом |
|
Указывает триггер для этого рабочего процесса. В этом примере используется событие push , поэтому выполнение рабочего процесса запускается каждый раз, когда кто-то отправляет изменения в репозиторий или объединяет запрос на вытягивание. Он активируется при отправке в каждую ветвь. Примеры синтаксиса, который выполняется только при отправке в определенные ветви, пути или теги, см. в статье «Синтаксис рабочего процесса для GitHub Actions».
|
|
Объединяет все задания, выполняемые в рабочем процессе learn-github-actions .
|
|
Определяет задание с именем check-bats-version . Дочерние ключи определяют свойства задания.
|
|
Настраивает задание для выполнения в последней версии средства выполнения Ubuntu Linux. Это означает, что задание будет выполняться на новой виртуальной машине, размещенной в GitHub. Примеры синтаксиса, где используются другие средства выполнения тестов, см. в статье «Синтаксис рабочего процесса для GitHub Actions». |
|
Объединяет все этапы, выполняемые в рабочем процессе check-bats-version . Каждый элемент, вложенный в этот раздел, является отдельным действием или скриптом оболочки.
|
|
Ключевое слово uses указывает, что этот этап будет выполнять v3 действия actions/checkout . Это действие, которое извлекает репозиторий в средство выполнения, позволяя выполнять скрипты или другие действия в коде (например, средства сборки и тестирования). Действие извлечения следует использовать каждый раз, когда рабочий процесс будет выполняться в коде репозитория.
|
|
Этот этап использует действие actions/setup-node@v3 для установки указанной версии Node.js (в этом примере используется версия 14). В этом случае команды node и npm помещаются в PATH .
|
|
Ключевое слово run указывает заданию выполнить команду в средстве выполнения. В этом случае используется npm для установки пакета тестирования ПО bats .
|
|
Наконец, выполняется команда bats с параметром, которая выводит версию программного обеспечения.
|
Визуализация файла рабочего процесса
На этой схеме показан только что созданный файл рабочего процесса и порядок организации компонентов GitHub Actions в иерархии. Каждый этап выполняет одно действие или скрипт оболочки. Этапы 1 и 2 выполняют действия, а этапы 3 и 4 выполняют скрипты оболочки. Дополнительные предварительно созданные действия для рабочих процессов см. в разделе Поиск и настройка действий.
Просмотр действия для выполнения рабочего процесса
При активации рабочего процесса создается запуск рабочего процесса, который выполняет рабочий процесс. После запуска рабочего процесса можно увидеть граф визуализации хода выполнения и просмотреть действие на каждом этапе в GitHub.
-
На GitHub.com перейдите на главную страницу репозитория. 1. Под именем репозитория щелкните Действия.
1. На левой боковой панели щелкните нужный рабочий процесс. 1. В списке запусков рабочего процесса щелкните имя запуска, чтобы просмотреть сводку по выполнению рабочего процесса. -
На левой боковой панели или в графе визуализации щелкните нужное задание.
-
Чтобы просмотреть результаты шага, щелкните его.
Дополнительные сведения об управлении выполнением рабочих процессов, таких как повторный запуск, отмена или удаление запуска рабочего процесса, см. в разделе Управление запусками рабочих процессов.
Использование начальных рабочих процессов
GitHub предоставляет предварительно настроенные начальные рабочие процессы, которые можно настроить для создания собственного рабочего процесса непрерывной интеграции. GitHub анализирует код и показывает начальные рабочие процессы CI, которые могут быть полезны для репозитория. Например, если репозиторий содержит код Node.js, вы увидите предложения для проектов Node.js. Начальные рабочие процессы могут быть отправной точкой для создания пользовательского рабочего процесса, или же его можно использовать в том виде, как есть.
Полный список начальных рабочих процессов можно просмотреть в репозитории actions/starter-workflows .
Дополнительные сведения об использовании и создании начальных рабочих процессов см. в разделах Использование начальных рабочих процессов и Создание начальных рабочих процессов для организации.
Расширенные функции рабочих процессов
В этом разделе кратко описаны некоторые расширенные функции GitHub Actions, которые помогают создавать более сложные рабочие процессы.
Хранение секретов
Если рабочие процессы обрабатывают конфиденциальные данные, например пароли или сертификаты, их можно сохранить в GitHub в качестве секретов, а затем использовать их в рабочих процессах в качестве переменных среды. Это означает, что можно создавать и совместно использовать рабочие процессы, не внедряя конфиденциальные значения непосредственно в исходный код YAML рабочего процесса.
В этом примере задания показано, как ссылаться на существующий секрет в виде переменной среды и отправлять его в качестве параметра в пример команды.
jobs:
example-job:
runs-on: ubuntu-latest
steps:
- name: Retrieve secret
env:
super_secret: ${{ secrets.SUPERSECRET }}
run: |
example-command "$super_secret"
Дополнительные сведения см. в разделе Зашифрованные секреты.
Создание зависимых заданий
По умолчанию задания в рабочем процессе выполняются параллельно и одновременно. Если у вас есть задание, которое должно выполняться только после завершения другого задания, можно использовать ключевое слово needs
для создания этой зависимости. Если одно из заданий завершается сбоем, все зависимые задания пропускаются. Однако если требуется, чтобы задания продолжали работу, это можно определить с помощью условного оператора if
.
В этом примере задания setup
, build
и test
выполняются вместе, а задания build
и test
также зависят от успешного завершения задания, предшествующего им.
jobs:
setup:
runs-on: ubuntu-latest
steps:
- run: ./setup_server.sh
build:
needs: setup
runs-on: ubuntu-latest
steps:
- run: ./build_server.sh
test:
needs: build
runs-on: ubuntu-latest
steps:
- run: ./test_server.sh
Дополнительные сведения см. в разделе Использование заданий в рабочем процессе.
Использование матрицы
Стратегия матрицы позволяет использовать переменные в одном определении задания для автоматического создания нескольких выполнений заданий, основанных на сочетаниях переменных. Например, можно использовать стратегию матрицы для тестирования кода в нескольких версиях языка или в нескольких операционных системах. Матрица создается с помощью ключевого слова strategy
, которое получает параметры сборки в виде массива. Например, следующая матрица будет выполнять задание несколько раз, используя разные версии Node.js.
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
node: [12, 14, 16]
steps:
- uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node }}
Дополнительные сведения см. в разделе Использование матрицы для заданий.
Кэширование зависимостей
Если задания регулярно используют зависимости повторно, можно рассмотреть возможность кэширования этих файлов, чтобы повысить производительность. После создания кэша он будет доступен для всех рабочих процессов в этом репозитории.
В этом примере показано, как кэшировать каталог ~/.npm
:
jobs:
example-job:
steps:
- name: Cache node modules
uses: actions/cache@v3
env:
cache-name: cache-node-modules
with:
path: ~/.npm
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-build-${{ env.cache-name }}-
Дополнительные сведения см. в разделе Кэширование зависимостей для ускорения рабочих процессов.
Использование баз данных и контейнеров служб
Если для задания требуется служба базы данных или кэша, можно использовать ключевое словоservices
для создания эфемерного контейнера для размещения службы. Полученный контейнер доступен на всех шагах этого задания, а после завершения задания удаляется. В этом примере показано, как задание может использовать services
для создания контейнера postgres
, а затем использовать node
для подключения к службе.
jobs:
container-job:
runs-on: ubuntu-latest
container: node:10.18-jessie
services:
postgres:
image: postgres
steps:
- name: Check out repository code
uses: actions/checkout@v3
- name: Install dependencies
run: npm ci
- name: Connect to PostgreSQL
run: node client.js
env:
POSTGRES_HOST: postgres
POSTGRES_PORT: 5432
Дополнительные сведения см. в разделе Использование контейнерных служб.
Использование меток для маршрутизации рабочих процессов
Если вам нужно, что задание обрабатывал определенный тип средства выполнения, можно использовать метки для управления местом выполнения заданий. Метки можно назначить локальному средству выполнения в дополнение к метке по умолчанию self-hosted
. Затем вы можете ссылаться на эти метки в рабочем процессе YAML, обеспечивая предсказуемую маршрутизацию задания. Средства выполнения, размещенные в GitHub, имеют предопределенные метки.
В этом примере показано, как рабочий процесс может использовать метки для указания необходимого средства выполнения.
jobs:
example-job:
runs-on: [self-hosted, linux, x64, gpu]
Рабочий процесс будет выполняться только в средстве выполнения, которое содержит все метки из массива runs-on
. Задание будет в первую очередь переходить к неактивным локальным средствам выполнения с указанными метками. Если все из них недоступны, а в GitHub существует средство выполнения с указанными метками, задание перейдет к средству выполнения, размещенному в GitHub.
Дополнительные сведения о метках локального средства выполнения тестов см. в разделе Использование меток с самостоятельно размещенными средствами выполнения.
Дополнительные сведения о подписях средств выполнения, размещенных в GitHub, см. в разделе О средствах выполнения, размещенных в GitHub.
Повторное использование рабочих процессов
Можно вызвать один рабочий процесс из другого рабочего процесса. Это позволяет повторно использовать рабочие процессы, избегая дублирования и упрощая обслуживание рабочих процессов. Дополнительные сведения см. в разделе Повторное использование рабочих процессов.
Использование сред
Среды можно настроить с помощью правил защиты и секретов для управления выполнением заданий в рабочем процессе. Каждое задание в рабочем процессе может ссылаться на одну среду. Чтобы задание, ссылающееся на среду, было отправлено в средство выполнения, должны быть выполнены все правила защиты среды. Дополнительные сведения см. в разделе Использование сред для развертывания.