この記事は、CircleCIを使って、Google Cloud Platform(GCP)のサービスであるCloudRunへシステムをデプロイをする方法をまとめたものです。
CircleCIを使えばgithubにpushしたソースコードを自動的にテスト、ビルド、デプロイすることができます。
なおこの記事内では、githubとCircleCIの連携方法やCircleCIの利用方法については省略しています。
ポイント
・ CircleCIのCloudRun用Orbsを利用する
・ GCPに接続するための接続情報を環境変数に設定する
構成
全体のイメージはこんな感じ。
GitHubの構成はこんな感じ。
言語はGo1.13です。
/.circleci
|-config.yml
/sample-app
|-Dockerfile
|-main.go
|-... (他アプリソース群)
手順
- CircleCIのジョブ設定 (設定ファイルを作成)
- CircleCIからContainerRegistry、ClourRunに接続するための環境変数を設定
- githubに対してソースコードをpushする
CircleCIのジョブ設定
CircleCIのジョブ設定は、上記のようにgithubのリポジトリにconfig.ymlを追加するだけです。
CircleCIからCloudRunにデプロイするためのOrbsが提供されているのでそれを利用します。
今回はマネージドのCloudRunの方にデプロイするようにします。
ちなみにOrbsというのは、いわゆるライブラリのようなもので、他のymlファイルをインポートしています。
自分で書くのが難しい部分を使いやすくして提供してくれています。
下記の設定は、githubにpushされたソースコードをテスト、ビルド、デプロイする設定になっています。
version: 2.1 # use CircleCI 2.1
orbs:
gcp-cloud-run: circleci/gcp-cloud-run@1.0.2
executors:
build:
docker:
- image: circleci/golang:1.13 #
jobs:
# テスト時はgo1.13のdockerイメージを使ってgo testを実行
test-job:
executor:
name: build
steps:
- checkout
- run:
name: Run unit tests
command: |
cd sample-app
go test -v ./...
# デプロイ時はContainerRegistoryにビルドしたイメージを保管し、CloudRunへのデプロイを実行
# リポジトリのDockerfileに従ってビルドされる
# プロジェクトID test-project-hogehogeは変更する
deploy-job:
docker:
- image: 'cimg/base:stable'
steps:
- checkout
- run:
command: cd sample-app
- gcp-cloud-run/init
- gcp-cloud-run/build:
source: ./sample-app
tag: 'asia.gcr.io/test-project-hogehoge/sample-app:${CIRCLE_SHA1}'
- gcp-cloud-run/deploy:
image: 'asia.gcr.io/test-project-hogehoge/sample-app:${CIRCLE_SHA1}'
platform: managed
region: asia-northeast1
service-name: sample-app
unauthenticated: true
#テスト用ジョブ(テストのみ)とデプロイ用ジョブ(ビルド、デプロイ)に分けて実行
workflows:
test-and-deploy:
jobs:
- test-job
- deploy-job
CircleCIの環境設定
CircleCIからGCPへ接続するためにはサービスアカウント情報が必要になります。
なのでアクセス権限を持ったサービスアカウント(のJSONキー)をGCP上で作成しておいてください。
※よくわからなければCloudBuildとCloudRunの管理者権限を付与すれば権限上は大丈夫
CircleCIでは下記を環境変数として設定することでGCPへの接続が可能になります。
・GCLOUD_SERVICE_KEY
・GOOGLE_PROJECT_ID
・GOOGLE_COMPUTE_ZONE
これらを下記のようにCircleCIプロジェクト設定画面で設定すればOK
※GCLOUD_SERVICE_KEYにはJSONキーをそのまま入れています
CloudRunの設定
CloudRun側では特に設定は必要ありません。
CircleCIが完了すれば自動的にデプロイされます。
CircleCIの実行
githubにソースコードをpushしてCircleCIを実行してみてください。
CircleCIでテストが実行され、ビルドしたコンテナイメージがCloudRunにデプロイするまでを自動的に実現することができます。
参考
https://circleci.com/orbs/registry/orb/circleci/gcp-cloud-run
https://circleci.com/docs/ja/2.0/google-auth/