Skip to main content
Мы публикуем частые обновления нашей документации, и перевод этой страницы, возможно, еще выполняется. Актуальные сведения см. в документации на английском языке.

Сведения о рабочих процессах

Общие сведения о рабочих процессах GitHub Actions, включая триггеры, синтаксис и расширенные функции.

Сведения о рабочих процессах

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

Рабочие процессы определяются в каталоге .github/workflows в репозитории, а репозиторий может иметь несколько рабочих процессов, каждый из которых может выполнять разные наборы задач. Например, у вас может быть один рабочий процесс для создания и тестирования запросов на вытягивание, другой рабочий процесс — для развертывания приложения при каждом создании выпуска, а также еще один рабочий процесс, добавляющий метку каждый раз, когда кто-то открывает новую проблему.

Основы рабочих процессов

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

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

Дополнительные сведения об этих основных компонентах см. в разделе Основные сведения о GitHub Actions.

Обзор рабочего процесса

Активация рабочего процесса

Триггеры рабочего процесса — это события, которые приводят к запуску рабочего процесса. Эти события могут быть следующими:

  • События, происходящие в репозитории рабочего процесса
  • События, происходящие за пределами GitHub Enterprise Server и запускающие событие repository_dispatch в GitHub Enterprise Server
  • Запланированное время
  • Вручную

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

Дополнительные сведения см. в разделе Активация рабочего процесса, а полный список событий см. в разделе События, активирующие рабочие процессы.

Синтаксис рабочего процесса

Рабочий процесс определяется с помощью формата YAML. Полный справочник по синтаксису YAML для разработки рабочих процессов см. в разделе Синтаксис рабочих процессов для GitHub Actions.

Создание примера рабочего процесса

Для определения рабочего процесса GitHub Actions использует синтаксис YAML. Каждый рабочий процесс хранится как отдельный YAML-файл в репозитории кода в каталоге с именем .github/workflows.

Можно создать пример рабочего процесса в репозитории, который автоматически активирует ряд команд при отправке кода. В этом рабочем процессе GitHub Actions извлекает отправленный код, устанавливает платформу тестирования bats и выполняет базовую команду для вывода версии bats: bats -v.

  1. В репозитории создайте каталог .github/workflows/ для хранения файлов рабочего процесса.

  2. В каталоге .github/workflows/ создайте файл с именем learn-github-actions.yml и добавьте следующий код.

    YAML
    name: learn-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
  3. Зафиксируйте эти изменения и отправьте их в репозиторий GitHub.

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

Общие сведения о файле рабочего процесса

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

name: learn-github-actions
Дополнительные - Имя рабочего процесса, которое будет отображаться на вкладке "Действия" репозитория GitHub.
on: [push]
Указывает триггер для этого рабочего процесса. В этом примере используется событие push, поэтому выполнение рабочего процесса запускается каждый раз, когда кто-то отправляет изменения в репозиторий или объединяет запрос на вытягивание. Он активируется при отправке в каждую ветвь. Примеры синтаксиса, который выполняется только при отправке в определенные ветви, пути или теги, см. в статье «Синтаксис рабочего процесса для GitHub Actions».
jobs:
Объединяет все задания, выполняемые в рабочем процессе learn-github-actions.
check-bats-version:
Определяет задание с именем check-bats-version. Дочерние ключи определяют свойства задания.
  runs-on: ubuntu-latest
Настраивает задание для выполнения в последней версии средства выполнения Ubuntu Linux. Это означает, что задание будет выполняться на новой виртуальной машине, размещенной в GitHub. Примеры синтаксиса, где используются другие средства выполнения тестов, см. в статье «Синтаксис рабочего процесса для GitHub Actions».
  steps:
Объединяет все этапы, выполняемые в рабочем процессе check-bats-version. Каждый элемент, вложенный в этот раздел, является отдельным действием или скриптом оболочки.
    - uses: actions/checkout@v3
Ключевое слово uses указывает, что этот этап будет выполнять v3 действия actions/checkout. Это действие, которое извлекает репозиторий в средство выполнения, позволяя выполнять скрипты или другие действия в коде (например, средства сборки и тестирования). Действие извлечения следует использовать каждый раз, когда рабочий процесс будет выполняться в коде репозитория.
    - uses: actions/setup-node@v3
      with:
        node-version: '14'
Этот этап использует действие actions/setup-node@v3 для установки указанной версии Node.js (в этом примере используется версия 14). В этом случае команды node и npm помещаются в PATH.
    - run: npm install -g bats
Ключевое слово run указывает заданию выполнить команду в средстве выполнения. В этом случае используется npm для установки пакета тестирования ПО bats.
    - run: bats -v
Наконец, выполняется команда bats с параметром, которая выводит версию программного обеспечения.

Визуализация файла рабочего процесса

На этой схеме показан только что созданный файл рабочего процесса и порядок организации компонентов GitHub Actions в иерархии. Каждый этап выполняет одно действие или скрипт оболочки. Этапы 1 и 2 выполняют действия, а этапы 3 и 4 выполняют скрипты оболочки. Дополнительные предварительно созданные действия для рабочих процессов см. в статье "Поиск и настройка действий".

Обзор рабочего процесса

Просмотр действия для выполнения рабочего процесса

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

  1. На экземпляр GitHub Enterprise Server перейдите на главную страницу репозитория.

  2. Под именем своего репозитория щелкните Действия.

    Переход к репозиторию

  3. На левой боковой панели щелкните нужный рабочий процесс.

    Снимок экрана: результаты рабочего процесса

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

    Снимок экрана: выполнения рабочего процесса

  5. В разделе Задания или на графе визуализации выберите задание, которое требуется просмотреть.

    Выбор задания

  6. Просмотрите результаты каждого шага.

    Снимок экрана: сведения о выполнении рабочего процесса

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

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

GitHub предоставляет предварительно настроенные начальные рабочие процессы, которые можно настроить для создания собственного рабочего процесса непрерывной интеграции. GitHub Enterprise Server анализирует код и показывает начальные рабочие процессы CI, которые могут быть полезны для репозитория. Например, если репозиторий содержит код Node.js, вы увидите предложения для проектов Node.js. Начальные рабочие процессы могут быть отправной точкой для создания пользовательского рабочего процесса, или же его можно использовать в том виде, как есть.

Полный список начальных рабочих процессов можно просмотреть в репозитории actions/starter-workflows в экземпляр GitHub Enterprise Server.

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

Расширенные функции рабочих процессов

В этом разделе кратко описаны некоторые расширенные функции 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. Задание будет в первую очередь переходить к неактивным локальным средствам выполнения с указанными метками.

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

Повторное использование рабочих процессов

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

Использование сред

Среды можно настроить с помощью правил защиты и секретов для управления выполнением заданий в рабочем процессе. Каждое задание в рабочем процессе может ссылаться на одну среду. Чтобы задание, ссылающееся на среду, было отправлено в средство выполнения, должны быть выполнены все правила защиты среды. Дополнительные сведения см. в разделе Использование сред для развертывания.