Skip to main content

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

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

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

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

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

  • Создание и тестирование запросов на вытягивание.
  • Развертывание приложения при каждом создании выпуска.
  • Добавление метки при открытии новой проблемы.

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

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

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

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

Схема триггера события Runner 1 для запуска задания 1, которая активирует Runner 2 для запуска задания 2. Каждая из заданий разбивается на несколько шагов.

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

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

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

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

Дополнительные сведения см. в разделе [AUTOTITLE и полный список событий см. в разделе События, инициирующие рабочие процессы](/actions/using-workflows/triggering-a-workflow).

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

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

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

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

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

Эти шаблоны рабочих процессов предназначены для быстрого и быстрого запуска, предлагая ряд конфигураций, таких как:

Используйте эти рабочие процессы в качестве отправного места для создания пользовательского рабочего процесса или их использования как есть. Полный список шаблонов рабочих процессов можно просмотреть в репозитории действий и начальных рабочих процессов. Дополнительные сведения см. в разделе «Использование шаблонов рабочих процессов».

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

В этом разделе кратко описаны некоторые расширенные функции 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"

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

Создание зависимых заданий

По умолчанию задания в рабочем процессе выполняются параллельно и одновременно. Если у вас есть задание, которое должно выполняться только после завершения другого задания, можно использовать ключевое слово 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: [14, 16]
    steps:
      - uses: actions/setup-node@v4
        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:20-bookworm-slim
    services:
      postgres:
        image: postgres
    steps:
      - name: Check out repository code
        uses: actions/checkout@v4
      - 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размещенные в среде runners назначены предопределенные метки.

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

jobs:
  example-job:
    runs-on: [self-hosted, linux, x64, gpu]

Рабочий процесс будет выполняться только в средстве выполнения, которое содержит все метки из массива runs-on. Задание будет в первую очередь переходить к неактивным локальным средствам выполнения с указанными метками.

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

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

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

Защита безопасности для рабочих процессов

GitHub предоставляет функции безопасности, которые можно использовать для повышения безопасности рабочих процессов. Встроенные функции %% данных variables.product.prodname_dotcom %}позволяют получать уведомления об уязвимостях в используемых действиях или автоматизировать процесс поддержания действий в рабочих процессах. Дополнительные сведения см. в разделе Использование функций безопасности GitHub для защиты использования GitHub Actions.

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

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