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

Поддержка этой версии GitHub Enterprise будет прекращена 2023-03-15. Исправления выпускаться не будут даже при критических проблемах безопасности. Для повышения производительности, укрепления безопасности и новых функций установите последнюю версию GitHub Enterprise. Чтобы получить справку по обновлению, обратитесь в службу поддержки GitHub Enterprise.

Переменные

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

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

Сведения о переменных

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

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

Определение переменных среды

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

  • Весь рабочий процесс с использованием env на верхнем уровне файла рабочего процесса.
  • Содержимое задания в рабочем процессе с использованием jobs.<job_id>.env.
  • Определенный шаг задания с использованием jobs.<job_id>.steps[*].env.
YAML
name: Greeting on variable day

on:
  workflow_dispatch

env:
  DAY_OF_WEEK: Monday

jobs:
  greeting_job:
    runs-on: ubuntu-latest
    env:
      Greeting: Hello
    steps:
      - name: "Say Hello Mona it's Monday"
        run: echo "$Greeting $First_Name. Today is $DAY_OF_WEEK!"
        env:
          First_Name: Mona

Доступ к значениям переменных можно получить env с помощью переменных среды средства выполнения или контекстов. В приведенном выше примере показаны три пользовательские переменные, используемые в качестве переменных среды в команде echo : $DAY_OF_WEEK, $Greetingи $First_Name. Значения для этих переменных задаются на уровне рабочего процесса, задания и шага соответственно. Дополнительные сведения о доступе к значениям переменных с помощью контекстов см. в разделе Использование контекстов для доступа к значениям переменных.

Так как интерполяция переменных среды средства выполнения выполняется после отправки задания рабочего процесса на компьютер средства выполнения, необходимо использовать соответствующий синтаксис для оболочки, используемой в средстве выполнения. В этом примере рабочим процессом указано ubuntu-latest. По умолчанию средства выполнения Linux используют оболочку Bash, поэтому необходимо использовать синтаксис $NAME. Если рабочим процессом указано средство выполнения Windows, используется синтаксис PowerShell, $env:NAME. Дополнительные сведения об оболочках см. в разделе Синтаксис рабочего процесса для GitHub Actions.

Соглашения об именовании для переменных среды

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

Все новые переменные, которые указывают на расположение в файловой системе, должны иметь суффикс _PATH . Переменные GITHUB_ENV и GITHUB_WORKSPACE по умолчанию являются исключениями из этого соглашения.

Примечание. Вы можете перечислить весь набор переменных среды, доступных для шага рабочего процесса, с помощью run: env в шаге, а затем проверить вывод для шага.

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

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

Получить доступ к значениям переменных среды можно с помощью контекста env .

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

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

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

YAML
env:
  DAY_OF_WEEK: Monday

jobs:
  greeting_job:
    runs-on: ubuntu-latest
    env:
      Greeting: Hello
    steps:
      - name: "Say Hello Mona it's Monday"
        if: ${{ env.DAY_OF_WEEK == 'Monday' }}
        run: echo "$Greeting $First_Name. Today is $DAY_OF_WEEK!"
        env:
          First_Name: Mona

В этом изменении предыдущего примера мы ввели условное if . Теперь шаг рабочего процесса выполняется только в том случае, если для DAYS_OF_WEEK задано значение "Понедельник". Доступ к этому значению выполняется от условного оператора if с помощью env контекста.

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

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

КонтекстВариант использованияПример
envСсылка на пользовательские переменные, определенные в рабочем процессе.${{ env.MY_VARIABLE }}
githubСправочная информация о запуске рабочего процесса и событии, которое инициировало запуск.${{ github.repository }}

Переменные среды по умолчанию

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

Мы настоятельно рекомендуем использовать переменные для доступа к файловой системе, а не жестко заданные пути к файлам. GitHub задает переменные для действий, используемых во всех средах средств выполнения.

ПеременнаяОписание
CIВсегда имеет значение true.
GITHUB_ACTIONИмя выполняемого в данный момент действия или id шага. Например, для действия — __repo-owner_name-of-action-repo.

GitHub удаляет специальные символы и использует имя __run, когда в текущем шаге выполняется скрипт без параметра id. При использовании одного сценария или действия несколько раз в одном задании имя будет включать суффикс, состоящий из порядкового номера перед символом подчеркивания. Например, первый сценарий, который вы запустите, будет иметь имя __run, а второй сценарий будет называться __run_2. Аналогично второй вызов actions/checkout будет называться actionscheckout2.
GITHUB_ACTION_PATHПуть к расположению действия. Это свойство поддерживается только в составных действиях. С помощью этого пути можно обращаться к файлам, расположенным в том же репозитории, что и действие. Например, /home/runner/work/_actions/repo-owner/name-of-action-repo/v1.
GITHUB_ACTION_REPOSITORYДля шага, в котором выполняется действие, это имя владельца и репозитория, где находится действие. Например, actions/checkout.
GITHUB_ACTIONSВсегда имеет значение true, когда GitHub Actions запускает рабочий процесс. Эту переменную можно использовать, чтобы различать, когда тесты выполняются локально или с помощью GitHub Actions.
GITHUB_ACTORИмя пользователя или приложения, инициирующего рабочий процесс. Например, octocat.
GITHUB_BASE_REFИмя базовой ссылки или целевой ветви запроса на вытягивание в выполнении рабочего процесса. Это значение устанавливается только в том случае, если событием, запускающим рабочий процесс, является pull_request или pull_request_target. Например, main.
GITHUB_HEAD_REFСсылка на head или исходная ветвь запроса на вытягивание в рабочем процессе. Это свойство задается только в том случае, если событием, запускающим рабочий процесс, является pull_request или pull_request_target. Например, feature-branch-1.
GITHUB_SHASHA фиксации, инициировавшей рабочий процесс. Значение этой фиксации SHA зависит от события, активирующего рабочий процесс. Дополнительные сведения см. в разделе События, активирующие рабочие процессы. Например, ffac537e6cbbf934b08745a378932722df287a53.

Примечание.

  • Если вам нужно использовать URL-адрес выполнения рабочего процесса из задания, можно объединить следующие переменные: $GITHUB_SERVER_URL/$GITHUB_REPOSITORY/actions/runs/$GITHUB_RUN_ID
  • Большинство переменных по умолчанию имеют соответствующее и аналогично именованное свойство контекста. Например, значение переменной GITHUB_REF можно считать во время обработки рабочего процесса с помощью свойства контекста ${{ github.ref }}.

Обнаружение операционной системы

Вы можете написать один файл рабочего процесса, который можно использовать для разных операционных систем, используя переменную среды по умолчанию RUNNER_OS и соответствующее свойство контекста ${{ runner.os }}. Например, следующий рабочий процесс может быть успешно запущен, если вы изменили операционную систему с macos-latest на windows-latest без необходимости изменять синтаксис переменных среды, который различается в зависимости от оболочки, используемой средством выполнения.

YAML
jobs:
  if-Windows-else:
    runs-on: macos-latest
    steps:
      - name: condition 1
        if: runner.os == 'Windows'
        run: echo "The operating system on the runner is $env:RUNNER_OS."
      - name: condition 2
        if: runner.os != 'Windows'
        run: echo "The operating system on the runner is not Windows, it's $RUNNER_OS."

В этом примере два оператора if проверяют свойство os контекста runner, чтобы определить операционную систему средства выполнения. Условные объекты if обрабатываются с помощью GitHub Actions, и средству выполнения отправляются только те шаги, для которых проверка разрешается в виде true. Здесь одна из проверок всегда будет иметь значение true, а другая — false, поэтому только один из этих шагов отправляется в средство выполнения. После отправки задания средству выполнения шаг выполняется и переменная среды в команде echo интерполируется с использованием соответствующего синтаксиса ($env:NAME для PowerShell в Windows и $NAME для bash и sh в Linux и MacOS). В этом примере оператор runs-on: macos-latest означает, что будет выполняться второй шаг.

Передача значений между шагами и заданиями в рабочем процессе

Если вы создаете значение в одном шаге задания, его можно использовать в последующих шагах того же задания, назначив значение существующей или новой переменной среды, а затем записав это значение в файл среды GITHUB_ENV. Файл среды может использоваться непосредственно действием или командой оболочкой в файле рабочего процесса с помощью ключевого слова run. Дополнительные сведения см. в статье Команды рабочего процесса для GitHub Actions.

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