Рабочий процесс Github не считывает переменные из сред

#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. Это сбивает с толку, пока не попробовано и не понято на примерах. Он по-прежнему остается неопределенным, пока не будет проверен разработчиками, знакомыми с системой.