created: 2020-05-07T14:20:24.000Z

cloudrun にデプロイする cloudbuild.yaml

トリガー

まず、cloudbuildのトリガーをこんな感じで登録しておく

  • ^master$ のときに変数が _SERVICE=service となるように
  • ^canary/ のときに変数が _SERVICE=service-canary となるように

cloudbuild.yaml

timeout: '900s'
steps:
  - name: 'gcr.io/cloud-builders/docker'
    id: 'docker-pull'
    args: ['pull', 'asia.gcr.io/$PROJECT_ID/$_SERVICE:latest']
  - name: 'gcr.io/cloud-builders/docker'
    id: 'docker-build'
    args: [ 'build',
      '--cache-from', 'asia.gcr.io/$PROJECT_ID/$_SERVICE:latest',
      '--tag', 'asia.gcr.io/$PROJECT_ID/$_SERVICE:$REVISION_ID',
      'app'  # Dockerfile がルートディレクトリ以外の場所にあったので
    ]
  - name: 'gcr.io/cloud-builders/docker'
    id: 'docker-tag'
    args: ['tag',
      'asia.gcr.io/$PROJECT_ID/$_SERVICE:$REVISION_ID',
      'asia.gcr.io/$PROJECT_ID/$_SERVICE:latest'
    ]
  - name: 'gcr.io/cloud-builders/docker'
    id: 'docker-push'
    args: ['push', 'asia.gcr.io/$PROJECT_ID/$_SERVICE']
  - name: 'gcr.io/cloud-builders/gcloud'
    id: 'cloudrun-deploy'
    args: ['beta', 'run', 'deploy', '$_SERVICE',
      '--image', 'asia.gcr.io/$PROJECT_ID/$_SERVICE:$REVISION_ID',
      '--region', 'asia-northeast1',
      '--platform', 'managed',
      '--allow-unauthenticated'  # publicなリクエストを受け付ける場合
    ]

注意

一番最初は事前に asia.gcr.io/$PROJECT_ID/$_SERVICE:latest に 何らかのイメージをpushしておく必要がある

権限

なお、cloudbuild から cloudrun にデプロイするときの権限についてはこちらの記事が参考になった