[Terraform]GitHub Oiganizations内のリポジトリを対象にGHAを使ったCI/CD環境構築

AWSCI/CDGitIaC



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 = "***********"