要約
- GItHub Vercel Appが無効でもやり方次第で同じような運用は可能(ただし節度を守って)
背景とモチベーション(何が嬉しいか)
背景と困りごと
- Vercelをチーム運用するにはコストが高すぎる($20/member/mon はさすがに高い)
- GitHub Actionsなら回しても全然怒られない
- Vercelのユーザー管理が面倒
- GItHubとは別に管理しなければならず、往々にして消し忘れなどが発生する
モチベーション
- プラットフォームチームとしてはVercelへのデプロイに寄せたいが、コスト面がネックになる
Vercelがどう動いているか
前提
GitHubのbase branch を develop ブランチ
staging環境を staging ブランチ
Production環境を main ブランチ
とするような一般的なGit flow + Pull request の運用を行なっていることとする
Vercelの通常の動き
普通にVercel teamに $20 /mon 課金して memberとして招待された場合の話。
あらかじめ 、Settings → ProjectSettings → Domains
develop ブランチに紐づく domain を develop-vercel-example.vercel.app
,
staging ブランチに紐づく domain を staging-vercel-example.vercel.app
,
main ブランチに紐づくdomainを vercel-example.app
,
としておく。
Vercel プロジェクトを GitHub リポジトリとインテグレートすると、
- Vercel の GitHub Apps経由でGitHubリポジトリの各 branch に対して Push を検知し、その後自動で Vercel 環境上の preview 環境としてデプロイされる(ここで生成される URL は branch 毎、Push 毎に独自のものが発行される)。
- 各Preview環境 が Pull Request によって base branchにマージされるとマージ元の HEAD がそのままベースブランチに移行(alias)される。
つまり、現在の環境だと staging にマージされると staging への Pull request 段階で作成された preview deployment が staging 環境、つまり
staging-vercel-example.vercel.app
に移行される。
これを自動でやってくれるのは本当に便利である一方で、VercelのTeamに招待したメンバーのみがこのフローを使うことができる。
すなわち、このままでは課金してVercelのメンバーに招待しない限り、Deploymentの作成とDomainとの紐付けができない。
Vercel上のdeploymentを自動CLIで再現する
上記の通常の動き、1, 2 をGitHub Actions の CI上でなんとかできないか?
色々調べた結果、以下のことが可能
- develop, staging ブランチ と development, staging への固定ドメインの紐付け