Skip to content

Конфигурация GitHub Actions

Секция github управляет генерацией GitHub Actions workflow. Эта секция используется, когда провайдер — github (задаётся через provider: github в конфиге или автоопределяется из переменной окружения GITHUB_ACTIONS). Когда провайдер — gitlab, эта секция не используется и вместо неё применяется секция gitlab. См. Конфигурация GitLab CI для эквивалента GitLab.

Параметры

terraform_binary

Тип: stringПо умолчанию: "terraform"

Бинарный файл Terraform/OpenTofu.

yaml
plugins:
  github:
    terraform_binary: "terraform"  # или "tofu"

runs_on

Тип: stringПо умолчанию: "ubuntu-latest"

Метка раннера GitHub Actions для джобов.

yaml
plugins:
  github:
    runs_on: "ubuntu-latest"
    # runs_on: "self-hosted"

container

Тип: object (опциональный) По умолчанию: нет

Опционально запускать джобы внутри контейнера. Поддерживает строковый и объектный формат.

yaml
plugins:
  github:
    container:
      name: "hashicorp/terraform:1.6"
      entrypoint: [""]

env

Тип: map[string]stringПо умолчанию: {}

Переменные окружения на уровне workflow.

yaml
plugins:
  github:
    env:
      TF_IN_AUTOMATION: "true"
      TF_INPUT: "false"
      AWS_DEFAULT_REGION: "us-east-1"

plan_enabled

Тип: booleanПо умолчанию: true

Генерировать отдельные план-джобы.

yaml
plugins:
  github:
    plan_enabled: true   # plan + apply джобы
    # plan_enabled: false  # только apply

plan_only

Тип: booleanПо умолчанию: false

Генерировать только план-джобы без apply-джобов.

yaml
plugins:
  github:
    plan_only: true

auto_approve

Тип: booleanПо умолчанию: false

Автоматический apply без защиты через environment.

yaml
plugins:
  github:
    auto_approve: false  # Apply использует environment protection
    # auto_approve: true   # Apply выполняется автоматически

init_enabled

Тип: booleanПо умолчанию: true

Автоматический запуск terraform init перед командами terraform.

yaml
plugins:
  github:
    init_enabled: true

permissions

Тип: map[string]stringПо умолчанию: {}

Permissions на уровне workflow. Необходимы для комментариев в PR и аутентификации OIDC.

yaml
plugins:
  github:
    permissions:
      contents: read
      pull-requests: write
      id-token: write        # Необходимо для OIDC

job_defaults

Тип: objectПо умолчанию: null

Настройки по умолчанию, применяемые ко всем генерируемым джобам (и plan, и apply). Применяются перед overwrites.

Доступные поля:

  • runs_on — переопределить метку раннера для всех джобов
  • container — контейнерный образ для всех джобов
  • env — дополнительные переменные окружения
  • steps_before — дополнительные шаги перед командами terraform
  • steps_after — дополнительные шаги после команд terraform

Пример: Общие шаги настройки для всех джобов

yaml
plugins:
  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 или apply
  • runs_on — переопределить метку раннера
  • container — переопределить контейнерный образ
  • env — переопределить/добавить переменные окружения
  • steps_before — переопределить шаги перед командами terraform
  • steps_after — переопределить шаги после команд terraform

Пример: Разные раннеры для plan и apply

yaml
plugins:
  github:
    overwrites:
      - type: plan
        runs_on: ubuntu-latest

      - type: apply
        runs_on: self-hosted
        env:
          DEPLOY_ENV: "production"

Пример: Дополнительные шаги для apply-джобов

yaml
plugins:
  github:
    overwrites:
      - type: apply
        steps_before:
          - uses: actions/checkout@v4
          - uses: hashicorp/setup-terraform@v3
          - name: Approve deployment
            run: echo "Deploying..."

pr

Тип: objectПо умолчанию: null

Настройки интеграции с Pull Request. Эквивалент секции mr в GitLab.

yaml
plugins:
  github:
    pr:
      comment:
        enabled: true
        on_changes_only: false

pr.comment

Управление поведением комментариев в PR:

ПолеТипПо умолчаниюОписание
enabledbooltrueВключить комментарии в PR
on_changes_onlyboolfalseКомментировать только при наличии изменений
include_detailsbooltrueВключить полный вывод плана в раскрывающихся секциях

Полный пример

yaml
plugins:
  github:
    # Конфигурация бинарного файла
    terraform_binary: "terraform"
    runs_on: "ubuntu-latest"

    # Настройки workflow
    plan_enabled: true
    auto_approve: false
    init_enabled: true

    # Переменные окружения на уровне 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

    # Интеграция с Pull Request
    pr:
      comment:
        enabled: true
        on_changes_only: false

Переменные джобов

Как и в 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.tagsruns_on
Контейнерный образimagecontainer (опционально)
Команды перед джобомjob_defaults.before_scriptjob_defaults.steps_before
Команды после джобаjob_defaults.after_scriptjob_defaults.steps_after
Переменные пайплайнаvariablesenv
Контроль доступаrulespermissions
Интеграция MR/PRсекция mrсекция pr
Секретыsecrets (Vault)Через шаги GitHub Action
OIDC токеныid_tokenspermissions.id-token: write
Кешированиеcache_enabledЧерез actions/cache в шагах
Префикс стейджейstages_prefixN/A (используются зависимости джобов)

Смотрите также

Released under the MIT License.