Секреты и переменные

Info

Правило простое: если раскрытие значения нежелательно — это секрет.

Секреты (secrets.*) — конфиденциальные значения (токены, пароли, ключи).
Переменные (vars.*) — неконфиденциальные значения.
Оба типа доступны в workflow.

Где создавать

  • уровень репозитория: Настройки репозитория → «Секреты и переменные»;
  • уровень организации: Настройки организации → «Секреты и переменные».

При конфликте имен приоритет у значений из репозитория.

Как использовать

Переменные:

- name: Print version
  run: echo "Версия: ${{ vars.VERSION }}"

Секреты:

- name: Login
  run: docker login -u user -p ${{ secrets.DOCKER_PASSWORD }}

Типичные сценарии

1. Параметризация окружений

on:
  workflow_dispatch:
    inputs:
      env:
        description: "Окружение"
        required: true
        default: "staging"
 
jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
        - name: Деплой
          run: echo "Deploy to ${{ github.event.inputs.env }} with api=${{ vars.API_URL }}"

2. Доступ к реестру образов

steps:
  - name: Логинимся в registry
    uses: docker/login-action@v3
    with:
      registry: ${{ vars.REGISTRY_URI }}
      username: ${{ secrets.REGISTRY_USER }}
      password: ${{ secrets.REGISTRY_PASSWORD }}

3. Маскирование

Секреты в логах маскируются (****), переменные — нет. Не храните конфиденциальные данные в vars.

Требования к названиям

  • могут содержать только латинские буквы, цифры и символ подчеркивания;
  • должны начинаться с буквы или символа подчеркивания;
  • должны быть уникальным в пределах области видимости;
  • запрещено использовать префиксы GITHUB_, GITLAB_, GITEA_ и GITVERSE_;
  • не чувствительны к регистру символов.

Рекомендации

  • меняйте секреты регулярно;
  • для переменных — задавайте значения по умолчанию и описательные имена;
  • никогда не зашивайте секреты в репозиторий и код. Если «утекли» — сразу отзывайте.