LoginSignup
11
0

More than 1 year has passed since last update.

【GCP】Cloud Buildトリガーで困った話メモ

Posted at

GCPのCloud Buildを使って、Githubのリポジトリへのプッシュをトリガーに、自動ビルドしてGAEにdeployする流れを作ろうと思ったら、色々苦労したところがあったので、メモを残す。

(1)そもそもリポジトリに接続できない

Source RepositoriesでGitHubのリポジトリを選んで「選択したリポジトリを接続」を押しても、1分くらいぐるぐる待ったあとに「リポジトリに接続できませんでした」というエラーメッセージが出てくる。
Private Repositoryだからダメなのか?と思ってPublicを選んでみても同様。
どうすりゃいいんだよと思っていたところ、とりあえず空っぽのリポジトリを1つ新規に作成すれば、内部的な何かのフラグがONになって接続できるようになるらしいとのことで。
実際、空リポジトリつくったあとは同様の操作で接続できた。
これGCPのバグでは。。。

(2)トリガーが動かない

GitHubにpushしてもトリガーが起動しない。
トリガーを手動で実行したところ Couldn't read commit というエラーメッセージ。

これは、Cloud Buildのトリガーの画面で「リポジトリを接続」していなかったから。
以下スクショの赤枠から操作する。
image.png

この操作後、トリガーの設定画面で、リポジトリの項に「GitHub」とは別に「GitHubアプリ」というのが選べるようになる。
これを選択してトリガーを作る。
image.png

(3) Permission errors

(3)-1. Permission 'cloudbuild.builds.create' denied

generic::permission_denied: goa-auth: Permission 'cloudbuild.builds.create' denied on resource 'projects/1234567890abcdef' (or it may not exist) というエラーが発生。( projects/1234567890abcdef の部分は変えてあります)
とりあえずCloud Buildの管理権限つければいいのかと思い、トリガーの実行Service Accountにロールを付与した。
そしたらまた別のエラーが発生

(3)-2. if 'build.service_account' is specified, ...

generic::invalid_argument: generic::invalid_argument: if 'build.service_account' is specified, the build must either (a) specify 'build.logs_bucket' (b) use the CLOUD_LOGGING_ONLY logging option, or (c) use the NONE logging option というエラーが発生。
「トリガーを実行するService Accountは(a)か(b)か(c)のログ権限のいずれかだけ持ってりゃいい」ということのようで、平たく言えば「余分な権限もちすぎ」だと怒られているようだ。
これは実際その通りで、トリガーを実行するService Accountを個別に指定していて、かつそのService Accountがかなり色々できる強い権限をもったService Accountだったからだった。

image.png

ここを意図的に選択した場合、上記のように厳密なPermissionのチェックがかかるようだ。
未指定の場合は [projectid]@cloudbuild.gserviceaccount.com というService Accountが使われるらしいので、特に理由がない限りは、トリガーの実行Service Accountは指定せず、デフォルトのService Account [projectid]@cloudbuild.gserviceaccount.com にロールを付与していった方が良い。
というわけでこの枠を未指定にし、デフォルトのService Accountで実行してもらうように変更。
ついでに、IAMの設定画面でこのService Accountに「App Engineデプロイ担当者」のロールを付与。

image.png

最後にまた別のエラーが発生。。。

(3)-3. You do not have permission to act as ...

You do not have permission to act as '[project name]@appspot.gserviceaccount.com' というエラーが発生。
これはこちらの記事が参考になった。
トリガーの設定で「App Engine」と「Service Accounts」を有効にする。

おわりに

なかなか大変な作業だった。。。
GitHubにpushさえすれば、あとはビルド・デプロイまでいい感じでやってくれる他のPaaS系サービスを触っていると、なんという面倒くさい作業なのだと感じる部分は、正直ある。
まあでも構築できてしまいさえすれば後は楽なものなので。
このメモを屍として残すことで振り返りは終わりにする。

11
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
0