Конфигурация GitHub Actions
Секция github управляет генерацией GitHub Actions workflow. Эта секция используется, когда провайдер — github: выбран через TERRACI_PROVIDER=github, автоопределён из переменной окружения GITHUB_ACTIONS или выведен как единственный активный провайдер. Когда провайдер — gitlab, эта секция не используется и вместо неё применяется секция gitlab. См. Конфигурация GitLab CI для эквивалента GitLab.
Параметры
Настройки выполнения
runs_on
Тип: stringПо умолчанию: "ubuntu-latest"
Метка раннера GitHub Actions для джобов.
extensions:
github:
runs_on: "ubuntu-latest"
# runs_on: "self-hosted"container
Тип: object (опциональный) По умолчанию: нет
Опционально запускать джобы внутри контейнера. Поддерживает строковый и объектный формат.
extensions:
github:
container:
name: "hashicorp/terraform:1.6"
entrypoint: [""]env
Тип: map[string]stringПо умолчанию: {}
Переменные окружения на уровне workflow.
extensions:
github:
env:
TF_IN_AUTOMATION: "true"
TF_INPUT: "false"
AWS_DEFAULT_REGION: "us-east-1"Тип: booleanПо умолчанию: false
Генерировать только план-джобы без apply-джобов.
extensions:
github:permissions
Тип: map[string]stringПо умолчанию: {}
Permissions на уровне workflow. Необходимы для комментариев в PR и аутентификации OIDC.
extensions:
github:
permissions:
contents: read
pull-requests: write
id-token: write # Необходимо для OIDCjob_defaults
Тип: objectПо умолчанию: null
Настройки по умолчанию, применяемые ко всем генерируемым джобам (и plan, и apply). Применяются перед overwrites.
Доступные поля:
runs_on— переопределить метку раннера для всех джобовcontainer— контейнерный образ для всех джобовenv— дополнительные переменные окруженияsteps_before— дополнительные шаги перед командами terraformsteps_after— дополнительные шаги после команд terraform
Пример: Общие шаги настройки для всех джобов
extensions:
github:
job_defaults:
steps_before:
- uses: actions/checkout@v4
- uses: hashicorp/setup-terraform@v3
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v4
with:
role-to-assume: arn:aws:iam::123456789012:role/terraform
aws-region: us-east-1
steps_after:
- name: Upload logs
run: echo "Job completed"Каждый шаг в steps_before / steps_after поддерживает:
name— отображаемое имя шагаuses— ссылка на GitHub Action (например,actions/checkout@v4)with— входные параметры действия в виде пар ключ-значениеrun— shell-команда для выполненияenv— переменные окружения на уровне шага
overwrites
Тип: arrayПо умолчанию: []
Переопределения на уровне джобов для plan или apply. Применяются после job_defaults.
Каждое переопределение содержит:
type— какие джобы переопределять:planилиapplyruns_on— переопределить метку раннераcontainer— переопределить контейнерный образenv— переопределить/добавить переменные окруженияsteps_before— переопределить шаги перед командами terraformsteps_after— переопределить шаги после команд terraform
Пример: Разные раннеры для plan и apply
extensions:
github:
overwrites:
- type: plan
runs_on: ubuntu-latest
- type: apply
runs_on: self-hosted
env:
DEPLOY_ENV: "production"Пример: Дополнительные шаги для apply-джобов
extensions:
github:
overwrites:
- type: apply
steps_before:
- uses: actions/checkout@v4
- uses: hashicorp/setup-terraform@v3
- name: Approve deployment
run: echo "Deploying..."Полный пример
execution:
binary: terraform
init_enabled: true
extensions:
github:
runs_on: "ubuntu-latest"
# Переменные окружения на уровне workflow
env:
TF_IN_AUTOMATION: "true"
TF_INPUT: "false"
# Permissions (необходимы для комментариев в PR и OIDC)
permissions:
contents: read
pull-requests: write
id-token: write
# Настройки по умолчанию для всех джобов
job_defaults:
steps_before:
- uses: actions/checkout@v4
- uses: hashicorp/setup-terraform@v3
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v4
with:
role-to-assume: arn:aws:iam::123456789012:role/terraform
aws-region: us-east-1
# Переопределения для джобов (применяются после job_defaults)
overwrites:
- type: apply
runs_on: self-hostedПеременные джобов
Как и в GitLab, каждый джоб получает переменные окружения, динамически генерируемые из сегментов structure.pattern. Для паттерна по умолчанию {service}/{environment}/{region}/{module}:
| Переменная | Описание | Пример |
|---|---|---|
TF_MODULE_PATH | Относительный путь к модулю | platform/prod/us-east-1/vpc |
TF_SERVICE | Название сервиса | platform |
TF_ENVIRONMENT | Окружение | prod |
TF_REGION | Регион | us-east-1 |
TF_MODULE | Название модуля | vpc |
Имена переменных формируются путём приведения имени сегмента к верхнему регистру и добавления префикса TF_.
Сравнение с конфигурацией GitLab
| Возможность | GitLab (gitlab:) | GitHub (github:) |
|---|---|---|
| Выбор раннера | job_defaults.tags | runs_on |
| Контейнерный образ | image | container (опционально) |
| Команды перед джобом | job_defaults.before_script | job_defaults.steps_before |
| Команды после джоба | job_defaults.after_script | job_defaults.steps_after |
| Переменные пайплайна | variables | env |
| Контроль доступа | rules | permissions |
| Интеграция MR/PR | summary + comment service | summary + comment service |
| Секреты | secrets (Vault) | Через шаги GitHub Action |
| OIDC токены | id_tokens | permissions.id-token: write |
| Префикс стейджей | stages_prefix | N/A (используются зависимости джобов) |
Смотрите также
- Конфигурация GitLab CI — эквивалентная конфигурация для GitLab CI
- Конфигурация summary — комментарии MR/PR с результатами plan и политик
- Генерация пайплайнов — руководство по генерации CI пайплайнов