Переменные среды и переменные конфигурации разъяснены

Существует несколько способов передачи переменных в процессы GitHub CI/CD, и в самом начале легко поверить в неправильные предположения о них. Этот пост призван прояснить основные различия между ними.

Существует два типа переменных Github Actions:

  • env определяется непосредственно на уровне рабочего процесса или ниже. Областью действия может быть один полноценный рабочий процесс, отдельное задание или один шаг. GitHub также называет их переменными среды.
  • var определяется на уровне org, repo или environment. Область действия может охватывать несколько рабочих процессов и/или репозиториев. GitHub также называет их переменными конфигурации.

Я не думаю, что это наименование полезно, поэтому я просто буду называть их вместе «переменными», а каждую — env или var.

[env]

Примечание. Чтобы перечислить все env, доступные на уровне шага, добавьте шаг run: env.

env можно жестко закодировать или динамически установить прямо в файле yaml. Они чувствительны к регистру, и невозможно перезаписать env по умолчанию, например GITHUB_* или RUNNER_*. И, как уже упоминалось, их область применения может быть:

См. пример ниже:

name: What people feel about a drink

on:
 workflow_dispatch

env: 
  # Scope: workflow, all jobs and steps can access it
  DRINK: wine 

jobs:

  red-wine:
    runs-on: ubuntu-latest
    env:
      # Scope: job, all steps can access it
      DRINK_TYPE: red 
    steps:
      - name: "Case 1: Teetotaler"
        run: echo "I'm a $PERSON and I $ATTITUDE $DRINK_TYPE $DRINK."
        env:
          # Scope: step, only this step can access it
          ATTITUDE: do not drink 
          PERSON: teetotaler
      - name: "Case 2: casual drinker"
        run: echo "I'm a $PERSON and I $ATTITUDE $DRINK_TYPE $DRINK."
        env:
          ATTITUDE: like
          PERSON: casual drinker

  white-wine:
    runs-on: ubuntu-latest
    env:
      DRINK_TYPE: white
    steps:
      - name: "Case 1: Teetotaler"
        run: echo "I'm a $PERSON and I…