Cloud Build - Google Cloud

最終更新日: 2026-08-27

TOP(About this memo)) > 一覧(Google Cloud) > Cloud Build

ビルド結果の表示

ignoreファイル

gcloud builds submit

gcloud builds submit [[SOURCE] --no-source] [--region=REGION] (省略)
    [--config=CONFIG; default="cloudbuild.yaml"
     | --pack=[builder=BUILDER],[env=ENV],[image=IMAGE]
     | --tag=TAG, -t TAG] [GCLOUD_WIDE_FLAG ...]

動作

例) cloudbuild.yamlの内容にもとづいてビルド・pushする

gcloud builds submit --config cloudbuild.yaml [SOURCE_DIRECTORY]

例) Dockerfileを使ってビルド・pushする

gcloud builds submit --tag [IMAGE_URL] [SOURCE_DIRECTORY]

例) ソースのみでビルド・pushする(buildpacks)

gcloud builds submit --pack image=[IMAGE_URL]

番外編) ローカルのdockerコマンドでビルドしてレジストリへpushする

docker build . --tag [IMAGE_URL]
gcloud auth configure-docker   # 初回のみ。認証設定
docker push [IMAGE_URL]

番外編) ローカルでpackを使ってpushする

gcloud auth configure-docker
pack build --publish [IMAGE_URL]

buildpacksについて

(IME) gcloud builds submitが内部で何を行っているのか調べた話

"steps": [{
    "name": "gcr.io/cloud-builders/docker",
    "args": ["build", "-t", "gcr.io/$PROJECT_ID/my-image", "."]
}]

(IME) 検証: gcloud builds submitで指定するディレクトリの意味

公式のクイックスタート(https://cloud.google.com/build/docs/build-push-docker-image )を、以下の構成で試した。testディレクトリの中にはquickstart.shを入れていない。

Dockerfile
quickstart.sh
test
└ Dockerfile
gcloud projects create [PROJECT_ID] --organization=[ORGANIZATION_ID]
gcloud --project [PROJECT_ID] services enable cloudbuild.googleapis.com artifactregistry.googleapis.com
gcloud --project [PROJECT_ID] artifacts repositories create quickstart-docker-repo \
  --repository-format=docker --location=us-west2 --description="Docker repository"

# (1) ソースコードの場所を指定しない
gcloud --project [PROJECT_ID] builds submit --region=us-west2 \
  --tag us-west2-docker.pkg.dev/[PROJECT_ID]/quickstart-docker-repo/quickstart-image:tag1

# (2) ソースコードの場所として ./test を指定する
gcloud --project [PROJECT_ID] builds submit --region=us-west2 \
  --tag us-west2-docker.pkg.dev/[PROJECT_ID]/quickstart-docker-repo/quickstart-image:tag2 ./test

gcloud projects delete [PROJECT_ID]

Cloud Buildの構成ファイル

置換変数(substitution)

ユーザー定義のsubstitution

options:
    substitution_option: 'ALLOW_LOOSE'

imagesフィールド

その他の設定

(?) imagesフィールドのリトライ回数について

ERROR: failed to push because we ran out of retries.
〜 retry budget exhausted (10 attempts): step exited with non-zero status: 1

(?) YAML内での引数の書き方

Cloud Buildのサービスアカウント

デフォルトのサービスアカウントの変更(2024年)

デフォルトの権限

ユーザー指定のサービスアカウント

Cloud BuildからCloud Runをデプロイする際のroles/iam.serviceAccountUser

ERROR: (gcloud.beta.run.jobs.deploy) User [[PROJECT_NUMBER]@cloudbuild.gserviceaccount.com] does not have permission to access namespaces instance [[PROJECT_ID]] (or it may not exist): The caller does not have permission

付与のしかた

(1) プロジェクト全体のroles/iam.serviceAccountUserを与える。範囲が広いので本番ではやらないほうがよい。

gcloud projects add-iam-policy-binding [PROJECT_ID] \
  --member=serviceAccount:[CLOUD_BUILD_SA_EMAIL] \
  --role=roles/iam.serviceAccountUser

(2) Cloud Runのサービスアカウントに紐づくroles/iam.serviceAccountUserを与える。こちらのほうが最小限で望ましい。

ユーザー指定のCloud Runのサービスアカウントの場合:

gcloud iam service-accounts add-iam-policy-binding \
  [SA_NAME]@[PROJECT_ID].iam.gserviceaccount.com \
  --member="serviceAccount:[CLOUD_BUILD_SA_EMAIL]" \
  --role="roles/iam.serviceAccountUser"

デフォルトのCloud Runのサービスアカウントの場合:

gcloud iam service-accounts add-iam-policy-binding \
  [PROJECT_NUMBER]-compute@developer.gserviceaccount.com \
  --member="serviceAccount:[CLOUD_BUILD_SA_EMAIL]" \
  --role="roles/iam.serviceAccountUser"