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

Контексты

Доступ к контексту можно получить в рабочих процессах и действиях.

Примечание. В GitHub Enterprise Server в настоящее время не поддерживаются средства выполнения тестов, размещенные в GitHub. Дополнительные сведения о планируемой поддержке в будущем см. в GitHub public roadmap.

Сведения о контекстах

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

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

Обращаться к контекстам можно с помощью синтаксиса выражений. Дополнительные сведения см. в разделе Выражения.

${{ <context> }}

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

Имя контекстаТипОписание
githubobjectСведения об экземпляре рабочего процесса. Дополнительные сведения см. в разделе о контексте github.
envobjectСодержит переменные, заданные в рабочем процессе, задании или шаге. Дополнительные сведения см. в разделе о контексте env.

В выражении доступ к данным контекста можно получить с помощью одного из двух видов синтаксиса.

  • Синтаксис индексов: github['sha']
  • Синтаксис разыменования свойств: github.sha

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

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

Когда используются контексты

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

  • Переменные среды по умолчанию: Эти переменные среды существуют только в средстве выполнения, которое выполняет задание. Дополнительные сведения см. в разделе Переменные.
  • Контекстах: Вы можете использовать большинство контекстов в любой момент рабочего процесса, в том числе когда переменные по умолчанию будут недоступны. Например, можно использовать контексты с выражениями для выполнения начальной обработки перед маршрутизацией задания в средство выполнения тестов. Это позволяет использовать контекст с условным ключевым словом if, чтобы определить, следует ли выполнять шаг. После выполнения задания можно также извлечь переменные контекста из средства выполнения тестов, которое выполняет задание, например runner.os. Дополнительные сведения о том, где можно использовать различные контексты в рабочем процессе, см. в разделе Контексты.

В следующем примере показано, как эти различные типы переменных можно использовать вместе в задании:

name: CI
on: push
jobs:
  prod-check:
    if: ${{ github.ref == 'refs/heads/main' }}
    runs-on: ubuntu-latest
    steps:
      - run: echo "Deploying to production server on branch $GITHUB_REF"

В этом примере инструкция if проверяет контекст github.ref, чтобы определить имя текущей ветви; если используется имя refs/heads/main, то выполняются последующие шаги. Проверка if обрабатывается GitHub Actions, и задание отправляется в средство выполнения тестов только в том случае, если результат равен true. После отправки задания средству выполнения выполняется шаг, который ссылается на $GITHUB_REF переменную из средства выполнения.

Доступность контекста

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

Кроме того, некоторые функции также могут использоваться только в определенных местах. Например, функция hashFiles доступна не везде.

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

| Ключ рабочего процесса | Контекст | Специальные функции | | ---- | ------- | ----------------- | | concurrency | github, inputs | Нет | | env | github, secrets, inputs | Нет | | jobs.<job_id>.concurrency | github, needs, strategy, matrix, inputs | Нет | | jobs.<job_id>.container | github, needs, strategy, matrix, env, secrets, inputs | Нет | | jobs.<job_id>.container.credentials | github, needs, strategy, matrix, env, secrets, inputs | Нет | | jobs.<job_id>.container.env.<env_id> | github, needs, strategy, matrix, job, runner, env, secrets, inputs | Нет | | jobs.<job_id>.continue-on-error | github, needs, strategy, matrix, inputs | Нет | | jobs.<job_id>.defaults.run | github, needs, strategy, matrix, env, inputs | Нет | | jobs.<job_id>.env | github, needs, strategy, matrix, secrets, inputs | Нет | | jobs.<job_id>.environment | github, needs, strategy, matrix, inputs | Нет | | jobs.<job_id>.environment.url | github, needs, strategy, matrix, job, runner, env, steps, inputs | Нет | | jobs.<job_id>.if | github, needs, inputs | always, cancelled, success, failure | | jobs.<job_id>.name | github, needs, strategy, matrix, inputs | Нет | | jobs.<job_id>.outputs.<output_id> | github, needs, strategy, matrix, job, runner, env, secrets, steps, inputs | Нет | | jobs.<job_id>.runs-on | github, needs, strategy, matrix, inputs | Нет | | jobs.<job_id>.secrets.<secrets_id> | github, needs, secrets | Нет | | jobs.<job_id>.services | github, needs, strategy, matrix, inputs | Нет | | jobs.<job_id>.services.<service_id>.credentials | github, needs, strategy, matrix, env, secrets, inputs | Нет | | jobs.<job_id>.services.<service_id>.env.<env_id> | github, needs, strategy, matrix, job, runner, env, secrets, inputs | Нет | | jobs.<job_id>.steps.continue-on-error | github, needs, strategy, matrix, job, runner, env, secrets, steps, inputs | hashFiles | | jobs.<job_id>.steps.env | github, needs, strategy, matrix, job, runner, env, secrets, steps, inputs | hashFiles | | jobs.<job_id>.steps.if | github, needs, strategy, matrix, job, runner, env, steps, inputs | always, cancelled, success, failure, hashFiles | | jobs.<job_id>.steps.name | github, needs, strategy, matrix, job, runner, env, secrets, steps, inputs | hashFiles | | jobs.<job_id>.steps.run | github, needs, strategy, matrix, job, runner, env, secrets, steps, inputs | hashFiles | | jobs.<job_id>.steps.timeout-minutes | github, needs, strategy, matrix, job, runner, env, secrets, steps, inputs | hashFiles | | jobs.<job_id>.steps.with | github, needs, strategy, matrix, job, runner, env, secrets, steps, inputs | hashFiles | | jobs.<job_id>.steps.working-directory | github, needs, strategy, matrix, job, runner, env, secrets, steps, inputs | hashFiles | | jobs.<job_id>.strategy | github, needs, inputs | Нет | | jobs.<job_id>.timeout-minutes | github, needs, strategy, matrix, inputs | Нет | | jobs.<job_id>.with.<with_id> | github, needs | Нет | | on.workflow_call.inputs.<inputs_id>.default | github | Нет | | on.workflow_call.outputs.<output_id>.value | github, jobs, inputs | Нет |

Пример: вывод данных контекста в журнал

Содержимое контекстов можно выводить в журнал для отладки. Для вывода объектов JSON в журнал в правильном формате требуется функция toJSON.

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

YAML
name: Context testing
on: push

jobs:
  dump_contexts_to_log:
    runs-on: ubuntu-latest
    steps:
      - name: Dump GitHub context
        id: github_context_step
        run: echo '${{ toJSON(github) }}'
      - name: Dump job context
        run: echo '${{ toJSON(job) }}'
      - name: Dump steps context
        run: echo '${{ toJSON(steps) }}'
      - name: Dump runner context
        run: echo '${{ toJSON(runner) }}'
      - name: Dump strategy context
        run: echo '${{ toJSON(strategy) }}'
      - name: Dump matrix context
        run: echo '${{ toJSON(matrix) }}'

Контекст github

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

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

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

Имя свойстваТипОписание
githubobjectКонтекст верхнего уровня, доступный во время любого задания или шага рабочего процесса. Этот объект содержит все свойства, перечисленные ниже.
github.actionstringИмя выполняемого в настоящий момент действия или параметр id шага. GitHub удаляет специальные символы и использует имя __run, когда в текущем шаге выполняется скрипт без параметра id. Если одно действие используется в задании несколько раз, к имени добавляется суффикс в виде знака подчеркивания и порядкового номера после него. Например, первый выполняемый скрипт будет называться __run, а второй — __run_2. Аналогично второй вызов actions/checkout будет называться actionscheckout2.
github.action_pathstringПуть к расположению действия. Это свойство поддерживается только в составных действиях. Этот путь можно использовать для доступа к файлам, расположенным в том же репозитории, что и действие, например путем изменения каталога на путь: cd ${{ github.action_path }} .
github.action_refstringДля шага, в котором выполняется действие, это номер выполняемого действия. Например, v2.
github.action_repositorystringДля шага, в котором выполняется действие, это имя владельца и репозитория, где находится действие. Например, actions/checkout.
github.action_statusstringТекущий результат составного действия.
github.actorstringИмя пользователя, который инициировал запуск рабочего процесса.

Пример содержимого контекста github

Следующий пример контекста взят из экземпляра рабочего процесса, запущенного событием push. В этом примере объект event усечен, так как он идентичен полезным данным веб-перехватчика push.

Примечание. Этот контекст является просто примером. Содержимое контекста зависит от выполняемого рабочего процесса. Контексты, объекты и свойства во многом зависят от условий выполнения рабочего процесса.

{
  "token": "***",
  "job": "dump_contexts_to_log",
  "ref": "refs/heads/my_branch",
  "sha": "c27d339ee6075c1f744c5d4b200f7901aad2c369",
  "repository": "octocat/hello-world",
  "repository_owner": "octocat",
  "repositoryUrl": "git://github.com/octocat/hello-world.git",
  "run_id": "1536140711",
  "run_number": "314",
  "retention_days": "90",
  "run_attempt": "1",
  "actor": "octocat",
  "workflow": "Context testing",
  "head_ref": "",
  "base_ref": "",
  "event_name": "push",
  "event": {
    ...
  },
  "server_url": "https://github.com",
  "api_url": "https://api.github.com",
  "graphql_url": "https://api.github.com/graphql",
  "ref_name": "my_branch",
  "ref_protected": false,
  "ref_type": "branch",
  "secret_source": "Actions",
  "workspace": "/home/runner/work/hello-world/hello-world",
  "action": "github_step",
  "event_path": "/home/runner/work/_temp/_github_workflow/event.json",
  "action_repository": "",
  "action_ref": "",
  "path": "/home/runner/work/_temp/_runner_file_commands/add_path_b037e7b5-1c88-48e2-bf78-eaaab5e02602",
  "env": "/home/runner/work/_temp/_runner_file_commands/set_env_b037e7b5-1c88-48e2-bf78-eaaab5e02602"
}

Пример использования контекста github

В этом примере задание выполняется с помощью контекста github.event_name, только если экземпляр рабочего процесса был запущен событием pull_request.

YAML
name: Run CI
on: [push, pull_request]

jobs:
  normal_ci:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Run normal CI
        run: ./run-tests

  pull_request_ci:
    runs-on: ubuntu-latest
    if: ${{ github.event_name == 'pull_request' }}
    steps:
      - uses: actions/checkout@v3
      - name: Run PR CI
        run: ./run-additional-pr-ci

Контекст env

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

Синтаксис env контекста позволяет использовать значение переменной в файле рабочего процесса. Контекст env можно использовать в значении любого ключа в шаге кроме id и uses. Дополнительные сведения о синтаксисе шага см. в разделе Синтаксис рабочего процесса для GitHub Actions.

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

Имя свойстваТипОписание
envobjectЭтот контекст меняется для каждого шага в задании. Доступ к этому контексту можно получить из любого шага задания. Этот объект содержит свойства, перечисленные ниже.
env.<env_name>stringЗначение конкретной переменной среды.

Пример содержимого контекста env

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

{
  "first_name": "Mona",
  "super_duper_var": "totally_awesome"
}

Пример использования контекста env

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

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

YAML
name: Hi Mascot
on: push
env:
  mascot: Mona
  super_duper_var: totally_awesome

jobs:
  windows_job:
    runs-on: windows-latest
    steps:
      - run: echo 'Hi ${{ env.mascot }}'  # Hi Mona
      - run: echo 'Hi ${{ env.mascot }}'  # Hi Octocat
        env:
          mascot: Octocat
  linux_job:
    runs-on: ubuntu-latest
    env:
      mascot: Tux
    steps:
      - run: echo 'Hi ${{ env.mascot }}'  # Hi Tux

Контекст job

Контекст job содержит сведения о выполняемом в данный момент задании.

Имя свойстваТипОписание
jobobjectЭтот контекст меняется для каждого задания в экземпляре рабочего процесса. Доступ к этому контексту можно получить из любого шага задания. Данный объект содержит все свойства, перечисленные ниже.
job.containerobjectСведения о контейнере задания. Дополнительные сведения о контейнерах см. в разделе Синтаксис рабочего процесса для GitHub Actions.
job.container.idstringИдентификатор контейнера.
job.container.networkstringИдентификатор сети контейнеров. Средство выполнения создает сеть, которая используется всеми контейнерами в задании.
job.servicesobjectКонтейнеры служб, созданные для задания. Дополнительные сведения о контейнерах служб см. в разделе Синтаксис рабочего процесса для GitHub Actions.
job.services.<service_id>.idstringИдентификатор контейнера службы.
job.services.<service_id>.networkstringИдентификатор сети контейнеров служб. Средство выполнения создает сеть, которая используется всеми контейнерами в задании.
job.services.<service_id>.portsobjectДоступные порты контейнера службы.
job.statusstringтекущее состояние задания; Возможные значения — success, failure или cancelled.

Пример содержимого контекста job

В этом примере контекста job используется контейнер службы PostgreSQL с сопоставленными портами. Если в задании не используются контейнеры или контейнеры служб, контекст job содержит только свойство status.

{
  "status": "success",
  "container": {
    "network": "github_network_53269bd575974817b43f4733536b200c"
  },
  "services": {
    "postgres": {
      "id": "60972d9aa486605e66b0dad4abb638dc3d9116f566579e418166eedb8abb9105",
      "ports": {
        "5432": "49153"
      },
      "network": "github_network_53269bd575974817b43f4733536b200c"
    }
  }
}

Пример использования контекста job

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

YAML
name: PostgreSQL Service Example
on: push
jobs:
  postgres-job:
    runs-on: ubuntu-latest
    services:
      postgres:
        image: postgres
        env:
          POSTGRES_PASSWORD: postgres
        options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5
        ports:
          # Maps TCP port 5432 in the service container to a randomly chosen available port on the host.
          - 5432

    steps:
      - uses: actions/checkout@v3
      - run: pg_isready -h localhost -p ${{ job.services.postgres.ports[5432] }}
      - run: ./run-tests

Контекст jobs

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

Имя свойстваТипОписание
jobsobjectДоступен только в повторно используемых рабочих процессах и может использоваться только для задания выходных данных для повторно используемого рабочего процесса. Данный объект содержит все свойства, перечисленные ниже.
jobs.<job_id>.resultstringРезультат задания в повторно используемом рабочем процессе. Возможные значения: success, failure, cancelled или skipped.
jobs.<job_id>.outputsobjectНабор выходных данных задания в повторно используемом рабочем процессе.
jobs.<job_id>.outputs.<output_name>stringЗначение определенных выходных данных для задания в повторно используемых рабочих процессах.

Пример содержимого контекста jobs

Этот пример контекста jobs содержит результат и выходные данные задания из повторно используемых рабочих процессов.

{
  "example_job": {
    "result": "success",
    "outputs": {
      "output1": "hello",
      "output2": "world"
    }
  }
}

Пример использования контекста jobs

В этом примере повторно используемый рабочий процесс использует контекст jobs для задания выходных данных для повторно используемого рабочего процесса. Обратите внимание, как выходные данные передаются из шагов в задание, а затем в триггер workflow_call. Дополнительные сведения см. в разделе Повторное использование рабочих процессов.

YAML
name: Reusable workflow

on:
  workflow_call:
    # Map the workflow outputs to job outputs
    outputs:
      firstword:
        description: "The first output string"
        value: ${{ jobs.example_job.outputs.output1 }}
      secondword:
        description: "The second output string"
        value: ${{ jobs.example_job.outputs.output2 }}

jobs:
  example_job:
    name: Generate output
    runs-on: ubuntu-latest
    # Map the job outputs to step outputs
    outputs:
      output1: ${{ steps.step1.outputs.firstword }}
      output2: ${{ steps.step2.outputs.secondword }}
    steps:
      - id: step1
        run: echo "::set-output name=firstword::hello"
      - id: step2
        run: echo "::set-output name=secondword::world"

Контекст steps

В контексте steps содержатся сведения об уже запущенных шагах в текущем задании с указанным свойством id.

Имя свойстваТипОписание
stepsobjectЭтот контекст меняется для каждого шага в задании. Доступ к этому контексту можно получить из любого шага задания. Данный объект содержит все свойства, перечисленные ниже.
steps.<step_id>.outputsobjectНабор выходных данных, определенных для шага. Дополнительные сведения см. в разделе Синтаксис метаданных для GitHub Actions.
steps.<step_id>.conclusionstringРезультат завершенного шага после применения continue-on-error. Возможные значения: success, failure, cancelled или skipped. Если шаг continue-on-error завершается сбоем, то outcome имеет значение failure, однако последнее свойство conclusion имеет значение success.
steps.<step_id>.outcomestringРезультат завершенного шага до применения continue-on-error. Возможные значения: success, failure, cancelled или skipped. Если шаг continue-on-error завершается сбоем, то outcome имеет значение failure, однако последнее свойство conclusion имеет значение success.
steps.<step_id>.outputs.<output_name>stringЗначение определенного набора выходных данных.

Пример содержимого контекста steps

В этом примере контекста steps показаны два предыдущих шага с заданным свойством id. У первого шага свойство id называлось checkout, у второго — generate_number. Выходными данными шага generate_number был номер random_number.

{
  "checkout": {
    "outputs": {},
    "outcome": "success",
    "conclusion": "success"
  },
  "generate_number": {
    "outputs": {
      "random_number": "1"
    },
    "outcome": "success",
    "conclusion": "success"
  }
}

Пример использования контекста steps

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

YAML
name: Generate random failure
on: push
jobs:
  randomly-failing-job:
    runs-on: ubuntu-latest
    steps:
      - id: checkout
        uses: actions/checkout@v3
      - name: Generate 0 or 1
        id: generate_number
        run:  echo "::set-output name=random_number::$(($RANDOM % 2))"
      - name: Pass or fail
        run: |
          if [[ ${{ steps.generate_number.outputs.random_number }} == 0 ]]; then exit 0; else exit 1; fi

Контекст runner

Контекст runner содержит сведения о средстве выполнения, которое запускает текущее задание.

Имя свойстваТипОписание
runnerobjectЭтот контекст меняется для каждого задания в экземпляре рабочего процесса. Данный объект содержит все свойства, перечисленные ниже.
runner.namestringИмя средства выполнения задания.
runner.osstringОперационная система средства выполнения тестов, выполняющего задание. Возможные значения — Linux, Windows или macOS.
runner.archstringАрхитектура средства выполнения задания. Возможные значения: X86, X64, ARM или ARM64.
runner.tempstringПуть к временному каталогу в средстве выполнения. Этот каталог очищается в начале и конце каждого задания. Обратите внимание, что файлы не удаляются, если у учетной записи пользователя средства выполнения нет разрешения на их удаление.
runner.tool_cachestringПуть к каталогу, содержащему предустановленные средства для размещенных в GitHub средств выполнения. Дополнительные сведения см. в разделе О средствах выполнения, размещенных в GitHub.
runner.debugstringЭто делается только в том случае, если ведение журнала отладки включено и всегда имеет значение 1. Это может быть полезно в качестве индикатора для включения дополнительной отладки или подробного ведения журнала в ваших шагах задания.

Пример содержимого контекста runner

Ниже приводится пример контекста из средства выполнения для Linux, размещенного в GitHub.

{
  "os": "Linux",
  "arch": "X64",
  "name": "GitHub Actions 2",
  "tool_cache": "/opt/hostedtoolcache",
  "temp": "/home/runner/work/_temp"
}

Пример использования контекста runner

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

YAML
name: Build
on: push

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Build with logs
        run: |
          mkdir ${{ runner.temp }}/build_logs
          ./build.sh --log-path ${{ runner.temp }}/build_logs
      - name: Upload logs on fail
        if: ${{ failure() }}
        uses: actions/upload-artifact@v3
        with:
          name: Build failure logs
          path: ${{ runner.temp }}/build_logs

Контекст secrets

Контекст secrets содержит имена и значения секретов, доступных для экземпляра рабочего процесса. Контекст secrets недоступен для составных действий из-за соображений безопасности. Если вы хотите передать секрет в составное действие, это необходимо сделать явным образом в качестве входных данных. Дополнительные сведения о секретах см. в разделе Зашифрованные секреты.

GITHUB_TOKEN — это секрет, который автоматически создается для каждого экземпляра рабочего процесса и всегда включается в контекст secrets. Дополнительные сведения см. в разделе Автоматическая проверка подлинности токенов.

Предупреждение. GitHub автоматически скрывает секреты, выводимые в журнал, однако не следует намеренно выводить секреты в журнал.

Имя свойстваТипОписание
secretsobjectЭтот контекст одинаков для каждого задания в экземпляре рабочего процесса. Доступ к этому контексту можно получить из любого шага задания. Данный объект содержит все свойства, перечисленные ниже.
secrets.GITHUB_TOKENstringАвтоматически созданный токен для каждого экземпляра рабочего процесса. Дополнительные сведения см. в разделе Автоматическая проверка подлинности токенов.
secrets.<secret_name>stringЗначение определенного секрета.

Пример содержимого контекста secrets

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

{
  "github_token": "***",
  "NPM_TOKEN": "***",
  "SUPERSECRET": "***"
}

Пример использования контекста secrets

В этом примере рабочего процесса используется действие маркировщика, для которого требуется GITHUB_TOKEN в качестве значения входного параметра repo-token:

YAML
name: Pull request labeler
on: [ pull_request_target ]

jobs:
  triage:
    runs-on: ubuntu-latest
    permissions:
      contents: read
      pull-requests: write
    steps:
      - uses: actions/labeler@v4
        with:
          repo-token: ${{ secrets.GITHUB_TOKEN }}

Контекст strategy

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

Имя свойстваТипОписание
strategyobjectЭтот контекст меняется для каждого задания в экземпляре рабочего процесса. Доступ к этому контексту можно получить из любого задания или шага рабочего процесса. Данный объект содержит все свойства, перечисленные ниже.
strategy.fail-fastbooleanЕсли свойство имеет значение true, все выполняемые задания отменяются при сбое какого-либо задания в матрице. Дополнительные сведения см. в разделе Синтаксис рабочего процесса для GitHub Actions.
strategy.job-indexnumberИндекс текущего задания в матрице. Примечание. Это число с отсчетом от нуля. Индекс первого задания в матрице равен 0.
strategy.job-totalnumberОбщее количество заданий в матрице. Примечание. Это не число с отсчетом от нуля. Например, для матрицы с четырьмя заданиями job-total имеет значение 4.
strategy.max-parallelnumberМаксимальное число заданий, которые могут выполняться одновременно при использовании стратегии заданий matrix. Дополнительные сведения см. в разделе Синтаксис рабочего процесса для GitHub Actions.

Пример содержимого контекста strategy

В следующем примере содержимое контекста strategy взято из последнего задания в матрице с четырьмя заданиям. Обратите внимание на разницу между числом job-index с отсчетом от нуля и свойством job-total, которое не отсчитывается от нуля.

{
  "fail-fast": true,
  "job-index": 3,
  "job-total": 4,
  "max-parallel": 4
}

Пример использования контекста strategy

В этом примере рабочего процесса с помощью свойства strategy.job-index задается уникальное имя файла журнала для каждого задания в матрице.

YAML
name: Test matrix
on: push

jobs:
  test:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        test-group: [1, 2]
        node: [14, 16]
    steps:
      - uses: actions/checkout@v3
      - run: npm test > test-job-${{ strategy.job-index }}.txt
      - name: Upload logs
        uses: actions/upload-artifact@v3
        with:
          name: Build log for job ${{ strategy.job-index }}
          path: test-job-${{ strategy.job-index }}.txt

Контекст matrix

Для рабочих процессов с матрицей контекст matrix содержит свойства матрицы, определенные в файле рабочего процесса, который применяется к текущему заданию. Например, если настроить матрицу с ключами os и node, объект контекста matrix включает свойства os и node со значениями, которые используются для текущего задания.

В контексте matrix нет стандартных свойств, а есть только те, что определены в файле рабочего процесса.

Имя свойстваТипОписание
matrixobjectЭтот контекст доступен только для заданий в матрице и меняется для каждого задания в экземпляре рабочего процесса. Доступ к этому контексту можно получить из любого задания или шага рабочего процесса. Этот объект содержит свойства, перечисленные ниже.
matrix.<property_name>stringЗначение свойства matrix.

Пример содержимого контекста matrix

В следующем примере содержимое контекста matrix взято из задания в матрице, у которой есть свойства os и node, определенные в рабочем процессе. Задание выполняется с сочетанием ОС ubuntu-latest и Node.js версии 16.

{
  "os": "ubuntu-latest",
  "node": 16
}

Пример использования контекста matrix

В этом примере рабочий процесс создает матрицу с ключами os и node. В нем для каждого задания с помощью свойства matrix.os задается тип средства выполнения, а с помощью свойства matrix.node — версия Node.js.

YAML
name: Test matrix
on: push

jobs:
  build:
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [ubuntu-latest, windows-latest]
        node: [14, 16]
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-node@v3
        with:
          node-version: ${{ matrix.node }}
      - name: Install dependencies
        run: npm ci
      - name: Run tests
        run: npm test

Контекст needs

Контекст needs содержит выходные данные всех заданий, которые определены как прямая зависимость от текущего задания. Обратите внимание, что сюда не входят неявно зависимые задания (например, зависимые задания зависимого задания). Дополнительные сведения об определении зависимостей заданий см. в разделе Синтаксис рабочего процесса для GitHub Actions.

Имя свойстваТипОписание
needsobjectЭтот контекст заполняется только для экземпляров рабочих процессов с зависимыми заданиями и меняется для каждого задания в рабочем процессе. Доступ к этому контексту можно получить из любого задания или шага рабочего процесса. Данный объект содержит все свойства, перечисленные ниже.
needs.<job_id>objectОдно задание, от которого зависит текущее задание.
needs.<job_id>.outputsobjectНабор выходных данных задания, от которого зависит текущее задание.
needs.<job_id>.outputs.<output name>stringЗначение определенного набора выходных данных для задания, от которого зависит текущее задание.
needs.<job_id>.resultstringРезультат задания, от которого зависит текущее задание. Возможные значения: success, failure, cancelled или skipped.

Пример содержимого контекста needs

В следующем примере содержимого контекста needs показаны сведения о двух заданиях, от которых зависит текущее задание.

{
  "build": {
    "result": "success",
    "outputs": {
      "build_id": "ABC123"
    }
  },
  "deploy": {
    "result": "failure",
    "outputs": {}
  }
}

Пример использования контекста needs

В этом примере рабочего процесса есть три задания: build, которое выполняет сборку, deploy, которому требуется задание build, а также debug, которому требуются и задание build, и deploy и которое выполняется, только если в рабочем процессе произошел сбой. Задание deploy также использует контекст needs для доступа к выходным данным задания build.

YAML
name: Build and deploy
on: push

jobs:
  build:
    runs-on: ubuntu-latest
    outputs:
      build_id: ${{ steps.build_step.outputs.build_id }}
    steps:
      - uses: actions/checkout@v3
      - name: Build
        id: build_step
        run: |
          ./build
          echo "::set-output name=build_id::$BUILD_ID"
  deploy:
    needs: build
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - run: ./deploy --build ${{ needs.build.outputs.build_id }}
  debug:
    needs: [build, deploy]
    runs-on: ubuntu-latest
    if: ${{ failure() }}
    steps:
      - uses: actions/checkout@v3
      - run: ./debug

Контекст inputs

Контекст inputs содержит входные свойства, передаваемые в действие или в повторно используемый рабочий процесс. Имена и типы входных данных определяются в конфигурации события workflow_call многократно используемого рабочего процесса, а входные значения передаются из jobs.<job_id>.with во внешнем рабочем процессе, который вызывает многократно используемый рабочий процесс.

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

Имя свойстваТипОписание
inputsobjectЭтот контекст доступен только в многократно используемых рабочих процессах. Доступ к этому контексту можно получить из любого задания или шага рабочего процесса. Этот объект содержит свойства, перечисленные ниже.
inputs.<name>string или number или boolean или choiceКаждое входное значение, которое передается из внешнего рабочего процесса.

Пример содержимого контекста inputs

Следующий пример содержимого контекста inputs взят из рабочего процесса, в котором определены входные данные build_id, deploy_target и perform_deploy.

{
  "build_id": 123456768,
  "deploy_target": "deployment_sys_1a",
  "perform_deploy": true
}

Пример использования контекста inputs в многократно используемом рабочем процессе

В этом примере многократно используемого рабочего процесса с помощью контекста inputs получаются значения входных данных build_id, deploy_target и perform_deploy, которые были переданы в многократно используемый рабочий процесс из рабочего процесса вызывающего объекта.

YAML
name: Reusable deploy workflow
on:
  workflow_call:
    inputs:
      build_id:
        required: true
        type: number
      deploy_target:
        required: true
        type: string
      perform_deploy:
        required: true
        type: boolean

jobs:
  deploy:
    runs-on: ubuntu-latest
    if: ${{ inputs.perform_deploy }}
    steps:
      - name: Deploy build to target
        run: deploy --build ${{ inputs.build_id }} --target ${{ inputs.deploy_target }}