GitHub Oiganizations内のリポジトリを対象にCI/CD環境を構築するにあたり、Terraformで実装できることできないことをまとめてみました。
概要
・GitHubリソースをTerraform実装(今回の記事)
・AWS + GHA + Slack通知 (別記事で記載)
結論
Terraformで実装できるGitHubリソース
・Team作成
・Repository作成、Teamに紐付け、アクセス権限管理
・Repositoryの各設定(public/private、Issue,Wiki,Projectsの有効/無効、デフォルトブランチ)
・GitHubのProjest作成 ←GraphQL APIv4を使用すれば可能
・ブランチ保護有効/無効
・プルリクエスト条件(レビュー数、CODEOWNERS有無)
・GitHub secrets, 環境変数などの管理
Terraformで実装できないGitHubリソース
・GitHub Organizationsの組織を作成
・ブランチ保護(.github/CODEOWNERSを使用)
まとめ
・GitHubの設定管理の範囲はTerraformでいろいろできることが勉強になりました。
GitHubリソースの一元管理していきたい場合は、いろいろとできることがありそう。
・Terraformのnull_resourceリソースを使えば、GraphQL APIは使用可能
けれど、null_resourceリソースは、Terraformの状態管理の対象外
terraform planでリソース変更対象が見れず、applyでリソース作成してみないとわからない。。
(ソースコード)
GitHub - akira-jinno/GHA_dev_github
Contribute to akira-jinno/GHA_dev_github development by creating an account on GitHub.
github-actions_cicd/
├── .github/
│ ├── CODEOWNERS
├── github/
│ ├── main.tf
│ ├── variables.tf
│ ├── outputs.tf
│ └── terraform.tfvars
└── scripts/
├── create_project.sh
terraform.tfvarsサンプル
# GitHub Personal Access Token
github_token = "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"
# GitHub Organization名
organization_name = "cicd-dev-org"
# GitHub Team名
team_name = "cicd-dev-team"
# GitHub Repository名
repository_name = "my-custom-repo"
# リポジトリの可視性 (public または private)
repository_visibility = "public"
# GitHub Project名
project_name = "my-custom-project"
# チームに与えるリポジトリの権限 (admin, push, pull)
team_repository_permission = "admin"
# プルリクエストに必要な承認数
required_approving_review_count = 1
# コードオーナーによるレビューが必要かどうか
require_code_owner_reviews = true
# プッシュを許可するユーザーリスト
restricted_users = ["**********"] #["username1", "username2"]
# GraphQL API対応s
organization_id = "***********"