【问题标题】:How to update branch protection using Terraform without remote branch in GITHUB?如何在 GITHUB 中使用没有远程分支的 Terraform 更新分支保护?
【发布时间】:2019-10-19 17:40:33
【问题描述】:

我需要在 GITHUB 中为很多存储库创建 CI/CD 管道 并保护一些特定的分支。但如果远程分支不存在,我会收到错误消息。

仅当我已经在 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
  }

}

带有 GITHUB 远程分支的 Terraform 结果:

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.

(实际错误)没有 GITHUB 远程分支的 Terraform 结果:

Error: PUT https://api.github.com/repos/jetprogramming/foo/branches/staging/protection: 404 Branch not found []

【问题讨论】:

    标签: github terraform terraform-provider-github


    【解决方案1】:

    您不能这样做,因为分支保护是分支的属性。如果分支不存在,则无法启用它的分支保护属性,因为您无法设置不存在对象的属性。此功能是在 GitHub 流程中引入的,保护主分支(在创建存储库时创建)是一种常见做法,因此引入更改的唯一方法是通过需要首先批准的拉取请求。

    您现在可以做的(作为临时解决方案)是首先创建存储库(使用 terraform)然后创建分支(使用 github api 使用一些脚本),然后使用 terraform 应用启用分支保护。

    此外,我还建议您在提供的 terraform github 的 github 页面上的问题中添加描述您的用例,并请求功能以创建可以解决您的问题的分支。

    【讨论】:

    【解决方案2】:

    如果它是由 terraform 创建的全新存储库,您可以通过设置 default_branch = stagingauto_init = true

    这样分支就会存在。 它不优雅,我不喜欢它......但它确实解决了这个问题。

    如果您的 repo 已经存在,请不要设置auto_init = true,否则您的 repo 将被销毁并重新创建。

    【讨论】:

    • 现代版本的 github terraform 提供程序不再覆盖现有的 github 存储库,如果 auto_init = true
    猜你喜欢
    • 1970-01-01
    • 2017-07-27
    • 2018-04-27
    • 2016-10-24
    • 2019-05-05
    • 1970-01-01
    • 1970-01-01
    • 2022-10-06
    • 2017-02-16
    相关资源
    最近更新 更多