GCP環境で主にGKEのCI/CDをやろうとしたときに軽くハマったのでメモ的に書きます。
Cloud Deployとは
主にGKE(Google Kubernetes Engine)へのコンテナイメージのデプロイに利用します。
CI/CDで言うとCD(Continuous Delivery)にあたります。
Kubernetesでは良くCIとCDを分けて考えられるのですが、ArgoCDなどをインストールしなくても、コンテナイメージを動作環境に合わせてプロモート出来るのが最大の魅力と考えます。
(参考)
https://cloud.google.com/blog/ja/products/devops-sre/google-cloud-deploy-automates-deploys-to-gke
Cloud Buildとは
GCP上で様々なタスクを実行するためのサービス。Github Actionsのようなもの
コンテナイメージのビルドも出来る。
Cloud Deployを使うなら、Cloud Buildと連携してGCP内でCI/CDを完結させたいというモチベーションは高い。
本題のエラーについて
設定して使ってみたところ、Cloud Buildから以下のような感じで Cloud Deployを実行する際にエラーになる
それぞれの設定はダミーです。
実行内容
- name: gcr.io/google.com/cloudsdktool/cloud-sdk
entrypoint: gcloud
args:
[
"deploy", "releases", "create", "rel-${SHORT_SHA}",
"--delivery-pipeline", "${_PIPELINE_NAME}",
"--region", "${_COMPUTE_ZONE}",
"--source", "hoge.yaml",
"--images", "app=$_IMAGE_NAME:$COMMIT_SHA"
]
エラー
domain: clouddeploy.googleapis.com
metadata:
serviceAccount: xxxxxxxx-compute@developer.gserviceaccount.com
reason: ACTAS_PERMISSION_DENIED
解決策
Cloud Buildを実行させるサービスアカウント
xxxxxxxx@cloudbuild.gserviceaccount.com
に権限を追加する。
NGだった
カスタムロールを作成して
iam.serviceAccounts.actAs
を入れておけば良いかなと思ったがNG
OKだった
Editor権限を追加したらうまくいった(調査中)
(IAMで足りていない権限を見ていくと
container.clusters.getCredentials
あたりが怪しいのではないか)
所感
Cloud Deployがすごく便利なので、是非試してみて欲しいです。