Container Builder 改め、CloudBuildについて、すこし試してみました。
CloudBuildの詳細についてはこちらです。
https://cloud.google.com/cloud-build/
CloudBuild用のコンテナを使って、CI処理を組んでいきます。対応ランタイムは下記となる。
Bazel、Curl、Docker、Dotnet、Gcloud、Git、Go、Gradle、Gsutil、Kubectl、Mvn、Npm、Wget、yarn
cloudbuild.ymlの例。Cloud Functionsのデプロイ例。Cloud Buildとリージョンちがくても問題はない。
steps: - name: gcr.io/cloud-builders/gcloud args: - "functions" - "deploy" - "http" - "--entry-point=hello_test_http" - "--region=us-central1" - "--runtime=python37" - "--trigger-http"
gcloud builds submit --config cloudbuild.yaml .
権限周りではまったこを一点。
1度下記エラーがでたことがあった。
Already have image (with digest): gcr.io/cloud-builders/gcloud ERROR: (gcloud.beta.functions.deploy) ResponseError: status=[403], code=[Forbidden], message=[The caller does not have permission] ERROR: build step 0 "gcr.io/cloud-builders/gcloud" failed: exit status 1
IAMの権限エラーによるものとなりますので、cloudbuildのserviceaccountに付与してやる必要がある
gcloud iam service-accounts add-iam-policy-binding ${PROJECT}@appspot.gserviceaccount.com \ --member=serviceAccount:${NUM}@cloudbuild.gserviceaccount.com \ --role=roles/iam.serviceAccountUser --project=${PROJECT}
GCEインスタンスから、GCP APIを叩く場合も、同じく失敗することがあります。以前は大丈夫だったが、仕様が変更になったのか。