※GCPアカウントの作成、プロジェクト作成、課金有効化、Cloud SDKのインストールなどは完了している前提で進める
シリーズ構成
【Cloud Runでサクッとサービスをデプロイ】Part1:導入
【Cloud Runでサクッとサービスをデプロイ】Part2:アプリケーションの手動デプロイ
【Cloud Runでサクッとサービスをデプロイ】Part3:CI/CDパイプライン構築
【Cloud Runでサクッとサービスをデプロイ】Part4:DB(Cloud Sql)と接続
イメージ図
最終的なゴールは以下の図の通り
CI/CDパイプライン構築
Part2まで手動でデプロイする方法を見てきた。ただ、ソースコードを変更してイメージをビルドしてそれを元にコンテナを作成して...というのを毎回すると手間がかかるので、Cloud Buildを使って自動化する
Cloud Buildについてはこちらを参照されたし
Google Cloud Buildを使用してCI/CDパイプラインをサクッと構築する
サービスアカウントの権限設定権限
Cloud BuildにCloud Run管理者の権限が必要なので付与(コンソールのCloud Build→設定から可能)。権限がないとデプロイ時にエラーになる
ERROR: (gcloud.run.services.update) PERMISSION_DENIED: Permission 'run.services.get' denied on resource 'namespaces/・・・' (or resource may not exist).
Githubリポジトリの作成
Githubのmainブランチにpushされたタイミングで自動的にデプロイされるような仕組みを構築するので、Dockerfile含めソースを全てリポジトリにpushしておく
cloudbuild.yamlの作成
Dockerfileを実行し、ビルドしたイメージをGCRにPushして、CloudRunにデプロイ工程を記述する
ステップ1はビルド、ステップ2はpush、ステップ3はデプロイ。cloudbuild.yamlではPROJECT_ID
やTRIGGER_NAME
などのデフォルトの置換変数があり、これらに該当しない値についてはsubstitutions
としてユーザ定義変数を設定することが可能(ハードコーディングを減らすことにより、cloudbuild.yamlを使い回すことが可能になる)。
steps:
# イメージビルド
- name: 'gcr.io/cloud-builders/docker'
id: 'build-docker-image-from-dockerfile'
args: ['build', '-t', "${_REPO_IMAGE_FULL_PATH}", "${_BUILD_CONTEXT}", '-f', "${_DOCKER_FILE_PATH}"]
# イメージ保存
- name: 'gcr.io/cloud-builders/docker'
id: 'push-docker-image-to-gcr'
args: ["push", "${_REPO_IMAGE_FULL_PATH}"]
# デプロイ
- name: "gcr.io/google.com/cloudsdktool/cloud-sdk:slim"
entrypoint: gcloud
args:
[
"run",
"deploy",
"${_SERVICE_NAME}",
"--image",
"${_REPO_IMAGE_FULL_PATH}",
"--region",
"${_DEPLOY_REGION}",
"--platform",
"managed",
"--allow-unauthenticated",
]
substitutions:
# デフォルト値を設定。実際の値はコンソールのCloud buildトリガー設定、代入変数から登録
_DEPLOY_REGION: asia-northeast1
_REPO_NAME: my-repo
_SERVICE_NAME: my-service
_IMAGE_NAME: my-image:latest
_BUILD_CONTEXT: .
_DOCKER_FILE_PATH: ./docker/Dockerfile
_REPO_IMAGE_FULL_PATH: "${_AR_HOSTNAME}/${PROJECT_ID}/${_REPO_NAME}/${_IMAGE_NAME}"
substitutionsはCloud buildトリガー作成時の詳細設定-代入変数で指定しておく
CloudBuildトリガーの作成
コンソールからCloud Runを開き、ソースリポジトリから新しいリビジョンを継続的にデプロイする、を選択しCloud Buildの設定をクリック。トリガーを作成を選択。
Github上で認証などを済ませ、作成したGithubリポジトリを指定して接続
Githubリポジトリのyamlファイルを参照するように設定し、作成をクリック
トリガーを発動させる
ソースコードに変更を加え、pushする。デプロイが完了し、Cloud Runから対象のサービスのurlにアクセスして変更内容が反映されていれば完了
Part3ここまで。次回のPart4ではDB(Cloud Sql)と接続する
まとめ
いかがでしたでしょうか。本記事では、【Cloud Runでサクッとサービスをデプロイ】シリーズのPart3として、Cloud run環境にGithubとCloud Buildを連携させ、CI/CDパイプライン構築する方法を紹介しました。ぜひ参考にしてみてください。