2

我需要为很多存储库创建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
  }

}

使用 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 []
4

2 回答 2

0

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

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

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

于 2020-03-15T23:25:52.790 回答
0

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

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

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

于 2019-10-19T18:14:22.870 回答