Запуск окружения переменных и секретов GitHub Actions

Если вы новичок в отношении переменных среды GitHub Actions, возможно, вы еще не научились их сохранять. Но это возможно? Да!

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

Готовы? Продолжайте чтение, чтобы начать!

Предварительные требования

В этом руководстве будет продемонстрировано практическое выполнение, для которого подойдет любая операционная система с установленным Git, в данном руководстве используется операционная система Ubuntu. Кроме того, требуется базовое знание операций Git для фиксации кода в хранилище переменных среды GitHub Actions.

Настройка переменных среды GitHub Actions

При автоматизации процессов с помощью рабочего процесса GitHub Actions возможно потребуется привязать переменные среды к вашим рабочим процессам. Как это сделать? Сначала вам нужно создать и указать пользовательские переменные среды в рабочем процессе с помощью ключевого слова env.

1. Создайте каталог с именем .github/workflows, где вы будете хранить файл рабочего процесса.

2. Затем создайте файл с предпочтительным именем в каталоге .github/workflows. Но в этом примере файл называется main.yml. Скопируйте и вставьте код ниже в файл main.yml.

Код ниже устанавливает и отображает переменную среды API_KEY, когда код запускает рабочий процесс.

name: env_tutorial
## Запускает рабочий процесс, когда происходит push, или 
## запрос на вытягивание в основной ветке
on: [pull_request, push] 

env:
  ## Устанавливает переменную среды
  API_KEY: XXXXXXXXXXXX    

jobs:
  job1:
    ## Тип платформы, на которой будет выполняться задача, 
    ## здесь она выполняется на самой последней версии ubuntu
    runs-on: ubuntu-latest 
    steps:
      - name: step 1
        ## Ссылается на ваши переменные среды
        run: echo "The API key is:${{env.API_KEY}}"   

  job2:
    runs-on: ubuntu-latest
    steps:
      - name: step 1
        ## Другой способ ссылаться на ваши переменные среды
        run: echo "The API key is:$API_KEY"

3. Зафиксируйте и отправьте код в ваш репозиторий GitHub.

git add .
git commit -m "update"
git push
Pushing updates to the GitHub Actions environment variables repository

4. Теперь откройте ваш веб-браузер и перейдите к вашему проекту на GitHub. Нажмите на вкладку Действия, затем кликните на ваш текущий коммит.

Вы увидите что-то подобное изображению ниже, что показывает, что GitHub запустил рабочий процесс.

GitHub actions Environment variables for repository

5. Наконец, нажмите на job1 или job2, и вы увидите, что вы успешно ссылаетесь на инициализированную переменную окружения.

Viewing Referenced Environment Variable (job1)
Viewing Referenced Environment Variable (job2)

Определение переменной окружения для задания

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

1. Замените код в вашем файле main.yml на код ниже.

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

name: env_tutorial
## Запускает рабочий процесс при наличии push или 
## pull request на основной ветке
on: [pull_request, push] 

jobs:
  job1:
    ## Тип платформы, на которой будет выполняться задание
    runs-on: ubuntu-latest 
    env:
      ## Переменная окружения
      API_KEY: XXXXXXXXXXXX    
    steps:
      - name: step 1
        ## Ссылка на ваши переменные окружения
        run: echo "The API key is:${{env.API_KEY}}"   

  job2:
    runs-on: ubuntu-latest
    steps:
      - name: step 1
        ## Еще один способ ссылаться на ваши переменные окружения
        run: echo "The API key is:$API_KEY"  

2. Зафиксируйте ваши изменения и отправьте задания из вашего кода в среду выполнения GitHub Actions, как вы делали в предыдущем разделе.

3. Наконец, перейдите к вашему проекту на GitHub, затем нажмите на оба job1 и job2, чтобы увидеть их сравнение:

  • работа1 – Вы увидите, что вы отлично обратились к переменной среды.
  • работа2 – Ключ API пуст.
Viewing Referenced Environment Variable (job1)
Viewing Referenced Environment Variable (job2)

Определение переменной среды для шага

Теперь, когда вы узнали, как указывать переменные среды в рамках задания, вы, вероятно, задаетесь вопросом, как можно сделать то же самое с шагами.

Для шагов в рамках задания вы указываете переменную среды внутри шага, как вы это делали для задания.

1. Замените код, который у вас есть в файле main.yml, на код ниже.

В приведенном ниже коде вы указываете переменную среды в шаге 1, но не в шаге 2, и вы увидите эффект в следующих шагах.

name: env_tutorial
## Запускает рабочий процесс при наличии push или 
## pull request на главной ветке
on: [pull_request, push] 

jobs:
  job1:
    ## Тип runner, на котором будет выполняться задание
    runs-on: ubuntu-latest 
    steps:
      - name: step 1
        env:
          ## Переменная среды для шага 1
          API_KEY: XXXXXXXXXXXX    
        ## Ссылка на ваши переменные среды
        run: echo "The API key is:${{env.API_KEY}}"   
      - name: step 2
        ## Ссылка на ваши переменные среды
        run: echo "The API key is:${{env.API_KEY}}"   

2. Теперь зафиксируйте изменения и отправьте код в GitHub.

3. Наконец, перейдите к вашему проекту в переменных среды GitHub Actions и нажмите на работа1.

Хотя вы ссылаетесь на два ключа API в одной и той же задаче (job1) на обоих этапах, шаг 2 не смог оценить ключ API (пустой), как показано ниже. Почему? Потому что вы не указали переменную среды внутри шага 2 в вашем коде.

Setting environment variables for steps

Управление переменными среды с использованием переменных среды и секретов GitHub Actions

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

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

Чтобы сохранить вашу переменную среды в секретах GitHub:

1. Сначала загрузите свой код на GitHub, как вы делали в предыдущих разделах.

2. Затем перейдите к вашему проекту на GitHub и щелкните вкладку Настройки.

Щелкните Секреты во вкладке ниже, чтобы начать добавление секрета.

Storing environment variables in Secrets

3. Затем нажмите Новый секрет репозитория, и вы увидите форму для заполнения данных о добавляемом секрете.

Creating new repository secret

4. Заполните форму соответствующим образом (Имя и Значение) и нажмите кнопку Добавить секрет для отправки. Теперь API_KEY сохранен в секретах GitHub. В этой форме GitHub безопасно устанавливает переменные среды как секреты, на которые вы можете ссылаться при работе с GitHub Actions.

Filling name and value of the new secret

5. Отредактируйте ваш файл main.yml и замените ключевое слово env на secrets.

Ниже вы можете видеть, что вы ссылаетесь на ключ API в формате ${{secrets.API_KEY}} вместо того, чтобы жестко закодировать сам ключ API.

name: env_tutorial
## Запускает рабочий процесс при наличии push-а или 
## запроса на перенос на главной ветке
on: [pull_request, push] 

jobs:
  job1:
    ## Тип runner, на котором будет запущена задача
    runs-on: ubuntu-latest 
    steps:
      - name: step 1
        ## Ссылка на ваши переменные среды
        run: echo "The API key is:${{secrets.API_KEY}}"   

  job2:
    runs-on: ubuntu-latest
    steps:
      - name: step 1
        ## Ссылка на ваши переменные среды
        run: echo "The API key is:${{secrets.API_KEY}}"  

6. Наконец, зафиксируйте и отправьте код на GitHub, а затем перейдите в свой проект в переменных среды GitHub Actions. Ссылайтесь на первый раздел.

Вы увидите что-то подобное изображению ниже, но фактический API_key вы не увидите, поскольку GitHub шифрует значения, которые вы вводите в secrets.

Displaying API key from GitHub Actions environment variables secrets

Ссылка на стандартные переменные среды GitHub

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

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

  • GITHUB_JOB – Предоставляет идентификатор задания текущего задания.
  • GITHUB_ACTION – Предоставляет идентификатор текущего действия
  • GITHUB_ACTION_PATH – Предоставляет путь, где расположено ваше действие.
  • GITHUB_ACTOR – предоставляет имя лица или приложения, инициировавшего рабочий процесс, например, ваше имя пользователя GitHub.
  • GITHUB_RUN_ID – предоставляет уникальный номер команды run.

Замените то, что у вас есть в вашем файле main.yml на приведенный ниже код. Приведенный ниже код отображает переменную среды по умолчанию, указанную в коде.

name: env_tutorial
## Запускает рабочий процесс при наличии пуша или 
## запроса на вытягивание в основной ветке
on: [pull_request, push] 

jobs:
  job1:
    ## Тип средства выполнения, на котором будет выполняться задание
    runs-on: ubuntu-latest 
    steps:
      - name: step 1
        run: |
          echo "The job_id is: $GITHUB_JOB"   # ссылка на переменные среды по умолчанию
          echo "The id of this action is: $GITHUB_ACTION"   # ссылка на переменные среды по умолчанию
          echo "The run id is: $GITHUB_RUN_ID" 
          echo "The GitHub Actor's username is: $GITHUB_ACTOR"
      - name: step 2
        run: |
          echo "The run id is: $GITHUB_RUN_ID"

Фиксируйте и отправляйте изменения кода на GitHub, проверяйте ваши действия в вашем проекте переменных среды GitHub Actions, и вы увидите что-то подобное изображению ниже.

Referencing the Default GitHub environment variables

Заключение

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

Как вы планируете внедрить эти новые знания при работе с GitHub Actions? Возможно, сохранение необходимых для развертывания ключей API?

Source:
https://adamtheautomator.com/github-actions-environment-variables/