Определение переменных среды для одного рабочего процесса
Чтобы задать настраиваемую переменную среды для одного рабочего процесса, ее можно определить с помощью env
ключа в файле рабочего процесса. Область настраиваемой переменной, заданной этим методом, ограничена элементом, в котором она определена. Можно определить переменные, для которых задана область:
- Весь рабочий процесс с использованием
env
на верхнем уровне файла рабочего процесса. - Содержимое задания в рабочем процессе с использованием
jobs.<job_id>.env
. - Определенный шаг задания с использованием
jobs.<job_id>.steps[*].env
.
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
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
с помощью переменных среды runner или с помощью контекстов. В приведенном выше примере показаны три пользовательских переменных, которые используются в качестве переменных среды runner в команде echo
: $DAY_OF_WEEK
, $Greeting
и $First_Name
. Значения этих переменных задаются и ограничены на уровне рабочего процесса, задания и шага соответственно. Интерполяция этих переменных происходит на средстве выполнения.
Команды в run
шагах рабочего процесса или указанного действия обрабатываются оболочкой, используемой в средстве выполнения. Инструкции в других частях рабочего процесса обрабатываются GitHub Actions и не отправляются в средство выполнения. Вы можете использовать переменные среды выполнения или контексты в run
шагах, но в частях рабочего процесса, которые не отправляются в средство выполнения, необходимо использовать контексты для доступа к значениям переменных. Дополнительные сведения см. в разделе "Использование контекстов для доступа к значениям переменных".
Так как интерполяция переменной среды выполнения выполняется после отправки задания рабочего процесса на компьютер runner, необходимо использовать соответствующий синтаксис для оболочки, используемой в средстве выполнения. В этом примере рабочим процессом указано ubuntu-latest
. По умолчанию средства выполнения Linux используют оболочку Bash, поэтому необходимо использовать синтаксис $NAME
. По умолчанию средства выполнения Windows используют PowerShell, поэтому вы будете использовать синтаксис $env:NAME
. Дополнительные сведения о оболочках см. в разделе Синтаксис рабочего процесса для GitHub Actions.
Определение переменных конфигурации для нескольких рабочих процессов
Можно создавать переменные конфигурации для использования в нескольких рабочих процессах и определять их на уровне организации, репозитория или среды .
Например, можно использовать переменные конфигурации, чтобы задать значения по умолчанию для параметров, передаваемых в средства сборки на уровне организации, но затем разрешить владельцам репозитория переопределить эти параметры на основе регистра.
При определении переменных конфигурации они автоматически доступны в контексте vars
. Дополнительные сведения см. в разделе "Использование контекста vars
для доступа к значениям переменной конфигурации".
Создание переменных конфигурации для репозитория
-
На GitHubперейдите на главную страницу репозитория.
-
Под именем репозитория щелкните Settings. Если вкладка "Параметры" не отображается, выберите раскрывающееся меню и нажмите кнопку "Параметры".
-
Перейдите на вкладку "Переменные".
-
Щелкните новую переменную репозитория.
-
В поле "Имя" введите имя переменной.
-
В поле "Значение" введите значение переменной.
-
Нажмите кнопку "Добавить переменную".
Создание переменных конфигурации для среды
Чтобы создать секреты или переменные для среды в репозитории личная учетная запись, необходимо быть владельцем репозитория. Чтобы создать секреты или переменные для среды в репозитории организации, необходимо иметь admin
доступ. Дополнительные сведения о средах см. в разделе Управление средами для развертывания.
-
На GitHubперейдите на главную страницу репозитория.
-
Под именем репозитория щелкните Settings. Если вкладка "Параметры" не отображается, выберите раскрывающееся меню и нажмите кнопку "Параметры".
-
На левой боковой панели щелкните Среды.
-
Щелкните среду, в которую нужно добавить переменную.
-
В разделе переменные среды нажмите кнопку "Добавить переменную".
-
В поле "Имя" введите имя переменной.
-
В поле "Значение" введите значение переменной.
-
Нажмите кнопку "Добавить переменную".
Создание переменных конфигурации для организации
-
На GitHubперейдите на главную страницу организации.
-
Под именем организации щелкните Settings. Если вкладка "Параметры" не отображается, выберите раскрывающееся меню и нажмите кнопку "Параметры".
-
Перейдите на вкладку "Переменные".
- Щелкните "Создать переменную организации".
- В поле "Имя" введите имя переменной.
- В поле "Значение" введите значение переменной.
- В раскрывающемся списке Доступ к репозиторию выберите политику доступа.
- Нажмите кнопку "Добавить переменную".
Использование контекстов для доступа к значениям переменных
Контексты — это способ доступа к сведениям о запусках рабочих процессов, переменных, средах выполнения, заданиях и шагах. Дополнительные сведения см. в разделе Справочник по контекстам. Существует множество других контекстов, которые можно использовать для различных целей в рабочих процессах. Дополнительные сведения о том, где можно использовать определенные контексты в рабочем процессе, см. в разделе Справочник по контекстам.
Доступ к значениям переменной среды можно получить с помощью значений контекста env
и переменных конфигурации с помощью контекста vars
.
Использование контекста для доступа к значениям переменной env
среды
Помимо переменных среды запуска GitHub Actions позволяет задавать и считывать env
значения ключей с помощью контекстов. Переменные среды и контексты предназначены для использования в разных точках рабочего процесса.
run
Шаги в рабочем процессе или в действии, на который ссылается ссылка, обрабатываются средством выполнения. В результате вы можете использовать переменные среды выполнения здесь, используя соответствующий синтаксис оболочки, используемой в средстве выполнения, например $NAME
оболочку Bash в средстве выполнения Linux или $env:NAME
PowerShell в средстве выполнения Windows. В большинстве случаев можно использовать контексты с синтаксисом ${{ CONTEXT.PROPERTY }}
, чтобы получить доступ к тому же значению. Разница заключается в том, что контекст будет интерполирован и заменен строкой перед отправкой задания в средство выполнения.
Однако нельзя использовать переменные среды runner в частях рабочего процесса, обрабатываемых GitHub Actions и не отправляются в средство выполнения. Вместо этого необходимо использовать контексты. Например, условный объект if
, определяющий, отправляется ли задание или шаг средству выполнения, всегда обрабатывается с помощью GitHub Actions. Поэтому для доступа к значению переменной необходимо использовать контекст в условном if
операторе.
name: Conditional env variable 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" if: ${{ env.DAY_OF_WEEK == 'Monday' }} run: echo "$Greeting $First_Name. Today is $DAY_OF_WEEK!" env: First_Name: Mona
name: Conditional env variable
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"
if: ${{ env.DAY_OF_WEEK == 'Monday' }}
run: echo "$Greeting $First_Name. Today is $DAY_OF_WEEK!"
env:
First_Name: Mona
В этом изменении предыдущего примера мы ввели условный if
код. Теперь шаг рабочего процесса выполняется только в том случае, если для DAY_OF_WEEK
задано значение "Понедельник". Доступ к этому значению выполняется от условного оператора if
с помощью env
контекста. Контекст env
не требуется для переменных, на которые ссылается команда run
. Они ссылаются как на переменные среды runner и интерполируются после получения задания средством выполнения. Однако мы могли бы выполнить интерполяцию этих переменных перед отправкой задания в средство выполнения с помощью контекстов. Результирующий результат будет одинаковым.
run: echo "${{ env.Greeting }} ${{ env.First_Name }}. Today is ${{ env.DAY_OF_WEEK }}!"
Примечание.
Контексты обычно указываются с помощью знака доллара и фигурных фигурных скобок, как ${{ context.property }}
. В условном объекте if
${{
и }}
необязательны, но если вы их используете, они должны охватывать целый оператор сравнения, как показано выше.
Предупреждение
При создании рабочих процессов и действий следует всегда учитывать, может ли код выполнять ненадежные входные данные от возможных злоумышленников. Некоторые контексты следует считать непроверенными, так как злоумышленники могут вставить собственное вредоносное содержимое. Дополнительные сведения см. в разделе Защита системы безопасности для GitHub Actions.
Использование контекста vars
для доступа к значениям переменной конфигурации
Переменные конфигурации можно получить к рабочему процессу с помощью vars
контекста. Дополнительные сведения см. в разделе Справочник по контекстам.
Если переменная конфигурации не задана, возвращаемое значение контекста, ссылающееся на переменную, будет пустой строкой.
В следующем примере показано использование переменных конфигурации с контекстом vars
в рабочем процессе. Каждая из следующих переменных конфигурации определена на уровне репозитория, организации или среды.
on: workflow_dispatch: env: # Setting an environment variable with the value of a configuration variable env_var: ${{ vars.ENV_CONTEXT_VAR }} jobs: display-variables: name: ${{ vars.JOB_NAME }} # You can use configuration variables with the `vars` context for dynamic jobs if: ${{ vars.USE_VARIABLES == 'true' }} runs-on: ${{ vars.RUNNER }} environment: ${{ vars.ENVIRONMENT_STAGE }} steps: - name: Use variables run: | echo "repository variable : $REPOSITORY_VAR" echo "organization variable : $ORGANIZATION_VAR" echo "overridden variable : $OVERRIDE_VAR" echo "variable from shell environment : $env_var" env: REPOSITORY_VAR: ${{ vars.REPOSITORY_VAR }} ORGANIZATION_VAR: ${{ vars.ORGANIZATION_VAR }} OVERRIDE_VAR: ${{ vars.OVERRIDE_VAR }} - name: ${{ vars.HELLO_WORLD_STEP }} if: ${{ vars.HELLO_WORLD_ENABLED == 'true' }} uses: actions/hello-world-javascript-action@main with: who-to-greet: ${{ vars.GREET_NAME }}
on:
workflow_dispatch:
env:
# Setting an environment variable with the value of a configuration variable
env_var: ${{ vars.ENV_CONTEXT_VAR }}
jobs:
display-variables:
name: ${{ vars.JOB_NAME }}
# You can use configuration variables with the `vars` context for dynamic jobs
if: ${{ vars.USE_VARIABLES == 'true' }}
runs-on: ${{ vars.RUNNER }}
environment: ${{ vars.ENVIRONMENT_STAGE }}
steps:
- name: Use variables
run: |
echo "repository variable : $REPOSITORY_VAR"
echo "organization variable : $ORGANIZATION_VAR"
echo "overridden variable : $OVERRIDE_VAR"
echo "variable from shell environment : $env_var"
env:
REPOSITORY_VAR: ${{ vars.REPOSITORY_VAR }}
ORGANIZATION_VAR: ${{ vars.ORGANIZATION_VAR }}
OVERRIDE_VAR: ${{ vars.OVERRIDE_VAR }}
- name: ${{ vars.HELLO_WORLD_STEP }}
if: ${{ vars.HELLO_WORLD_ENABLED == 'true' }}
uses: actions/hello-world-javascript-action@main
with:
who-to-greet: ${{ vars.GREET_NAME }}
Обнаружение операционной системы
Вы можете написать один файл рабочего процесса, который можно использовать для разных операционных систем, используя переменную среды по умолчанию RUNNER_OS
и соответствующее свойство контекста ${{ runner.os }}
. Например, следующий рабочий процесс может быть успешно запущен, если вы изменили операционную систему с macos-latest
на windows-latest
без необходимости изменять синтаксис переменных среды, который различается в зависимости от оболочки, используемой средством выполнения.
on: workflow_dispatch 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."
on: workflow_dispatch
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.