Переменные репозитория и окружения
Не всё чувствительно: для нечувствительной конфигурации есть отдельные переменные.
Variable (vars) — нечувствительное конфигурационное значение, которое, в отличие от секрета, видно в открытом виде и доступно через контекст
vars.
Секрет или переменная?
Простое правило: если значение тайна — это секрет; если просто настройка — переменная.
| Secret | Variable | |
| Видно значение | нет, скрыто | да, открыто |
| Маскируется в логах | да | нет |
| Контекст | secrets.* | vars.* |
| Для чего | пароли, токены, ключи | имя региона, URL API, флаги |
Создание и использование
Переменные создают там же: Settings → Secrets and variables → Actions → вкладка Variables. Использование симметрично секретам:
steps:
- run: echo "Регион — ${{ vars.AWS_REGION }}"
- run: deploy --url "${{ vars.API_BASE_URL }}"
env:
API_TOKEN: ${{ secrets.API_TOKEN }}
Обратите внимание: открытый AWS_REGION можно печатать в логах, а API_TOKEN — нет.
Переменные окружения (environment)
И секреты, и переменные можно привязать к environment — именованному окружению (staging, production). Тогда одно и то же имя даёт разные значения в зависимости от того, куда катит job:
jobs:
deploy:
runs-on: ubuntu-latest
environment: production # подтянет vars/secrets окружения production
steps:
- run: echo "URL — ${{ vars.API_BASE_URL }}"
В environment staging у API_BASE_URL будет адрес стенда, в production — боевой. Один workflow — разные значения по окружениям.
Приоритет
Если имя переменной задано и на уровне репозитория, и на уровне environment, при выполнении job в этом окружении побеждает значение environment. Это позволяет иметь общий дефолт и точечно переопределять его.
Итог
- Секрет — для тайн (
secrets.*, скрыт), переменная — для настроек (vars.*, видна). - И те, и другие можно привязать к environment, получая разные значения по стендам.
- Значение environment перекрывает одноимённое значение репозитория.