Как обновить защиту ветки с помощью Terraform без удаленной ветки в GITHUB?
Мне нужно создать конвейеры CI/CD и защитить некоторые конкретные ветки в GITHUB для большого количества репозиториев. Но если удаленная ветка не существует, я получаю сообщение об ошибке.
Он работает, только если я уже создал удаленную ветку в GITHUB. Но мне нужно сделать все это через Terraform или автоматизированным способом.
# Configure the GitHub Provider
provider "github" {
token = "${var.github_token}"
organization = "${var.github_organization}"
}
# Protect the CI/CD branch of the foo repository
resource "github_branch_protection" "foo" {
repository = "foo"
branch = "staging"
enforce_admins = true
required_pull_request_reviews {
required_approving_review_count = 2
}
}
Результат Terraform с удаленной веткой GITHUB:
github_branch_protection.foo: Creating...
github_branch_protection.foo: Creation complete after 3s [id=foo:staging]
Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
(Фактическая ошибка) Результат Terraform без удаленной ветки GITHUB:
Error: PUT https://api.github.com/repos/jetprogramming/foo/branches/staging/protection: 404 Branch not found []
2 ответа
Если Terraform создает новый репозиторий, вы можете обойти это, установив параметр
default_branch = staging
а такжеauto_init = true
Так будет существовать ветка. Это не элегантно, и мне это не нравится... но это помогает обойти проблему.
Если ваше репо уже существует, не устанавливайтеauto_init = true
или ваше репо уничтожено и воссоздано.
Вы не можете этого сделать, поскольку защита филиала является собственностью филиала. Если ветка не существует, вы не можете включить ее свойство защиты ветки, так как вы не можете установить свойство несуществующего объекта. Эта функция была введена, поскольку в потоке GitHub обычно защищают основную ветку (которая создается при создании репозитория), поэтому единственный способ внести в нее изменения - это запрос на перенос, который необходимо сначала утвердить.
Что вы можете сделать сейчас (в качестве временного решения), так это сначала создать репозиторий (с terraform), затем создать ветки (с некоторым скриптом, использующим github api), а затем применить защиту веток с помощью terraform.
Кроме того, я также рекомендовал бы вам добавить описание вашего варианта использования в проблеме на странице github предоставленного github terraform и запросить функцию для создания веток, которые должны решить вашу проблему.