#github-actions #environment
Вопрос:
Ниже приведен мой простой рабочий процесс github. Он предназначен для печати переменной среды.
name: verify
on:
workflow_dispatch:
jobs:
read_env_variables:
environment: build
runs-on: [ self-hosted, onprem_dae, docker ]
steps:
- name: cat on branch file
run: |
echo ${{ env.SOME_VARIABLE }}
Я создал среду с именем «build». В этой среде у меня есть переменная среды с именем SOME_VARIABLE
, равным xyz.
При запуске рабочего процесса я ожидал, что будет отображено значение xyz, но фактическое значение равно «». Чего-то не хватает?
Ответ №1:
Ваша проблема здесь связана с синтаксисом.
Чтобы использовать ${{ env.SOME_VARIABLE }}
синтаксис, вам необходимо установить переменную env на уровне рабочего процесса, задания или шага.
Вот пример:
name: Environment Workflow
on:
workflow_dispatch:
env:
WORKFLOW_VARIABLE: WORKFLOW
jobs:
job1:
runs-on: ubuntu-latest
env:
JOB_VARIABLE: JOB
steps:
- name: Run Commands with various variables
if: ${{ env.WORKFLOW_VARIABLE == 'WORKFLOW' }}
env:
STEP_VARIABLE: STEP
run: |
echo "Hello World"
echo "This is the $WORKFLOW_VARIABLE environment variable"
echo "This is the $JOB_VARIABLE environment variable"
echo "This is the $STEP_VARIABLE environment variable"
Теперь, если вы хотите использовать секреты среды для развертывания, как описано здесь в документации Github, синтаксис будет отличаться, используя job_id.environment
as, который вы уже используете после этого документа .
Вот пример:
job4:
runs-on: ubuntu-latest
environment: build
steps:
- name: Show repo env secret
run: |
echo ${{ secrets.REPO_ENV_SECRET }}
Обратите внимание, что эта переменная является секретной, поэтому вы не сможете увидеть ее с помощью команды echo на шаге (она покажет ***
).
Вот рабочий процесс, который я использовал для проверки всей этой реализации, если вы хотите взглянуть:
Комментарии:
1. Спасибо за разъяснение. ДА. Это показывает
***
. В более крупном решении ожидается, что набор значений среды github будет записан в двоичный файл. Использует${{ secret.KEY_NAME }}
. Если возвращается echo***
, какое выражение используется для получения секрета в простой форме ?2. Если значение является секретным, его невозможно отобразить в окне отображения Github Action runner (по соображениям безопасности). Однако, если значение не является секретным, и вы хотите его где-то показать, было бы уместно использовать переменную и env в рабочем процессе вместо этого (это не было бы зашифровано).
3. Просто для ясности — переменная в контексте является секретной для каждой среды. В github я создал среды с именами «dev», «test» в github. Переменная
REPO_ENV_VAR
настроена на разные значения в упомянутых средах. Итак, эти переменные всегда рассматриваются как секреты в github. Следовательно, их следует читать с помощью${{ secrets.<var_name> }}
. Правильное ли понимание?4. Когда вы создаете среду в настройках репозитория, она будет работать так, как вы объяснили (с
secrets.<var_name>
). Однако, когда вы создаете переменную среды рабочего процесса, задания или шага в рабочем процессе, вы получите доступ к значению с помощьюenv.<var_name>
. Оба могут быть названы переменными среды, что может сбивать с толку, поскольку синтаксис и контекст различны.5. Это сбивает с толку, пока не попробовано и не понято на примерах. Он по-прежнему остается неопределенным, пока не будет проверен разработчиками, знакомыми с системой.