Cloud Buildとは?
GCPが提供するマネージドのCIです。AWSにも同様のサービスとしてCode Buildがありますが、AWSと比較して
- 料金が安い
- スペックが最大32コアまで利用可能(Code Buildは最大8コア)
GitHubと連携することでPush毎に自動的にCloud Buildをトリガーできます。 プルリクのステータスにも対応しています。
GitのリポジトリにDockerfile or cloudbuild.yamlを含めることCIが実行されます。 両方含まれている場合は、cloudbuild.yamlを使用してビルドが構成されます。 また、Cloud Buildで実行する前にローカルで実行することもできます。
料金体系
スペックに応じた分あたりの従量課金の体系になります。 無料枠として、1日あたり最初の120ビルドまでは無料です。
タイムアウトが設定できるので、byebugを仕込んで料金がヤバイことになる心配はありません。 最大10件までの同時ビルドが可能です。
クイックスタートを試してみる
こちらのクイックスタートを試してみます。
ビルドに必要なファイルの作成
Dockerfile
FROM alpine
COPY quickstart.sh /
CMD ["/quickstart.sh"]
quickstart.sh
#!/bin/sh
echo "Hello, world! The time is $(date)."
ビルドの実行
$ gcloud builds submit --tag gcr.io/$PROJECT_ID/quickstart-image .
上記を実行すると、Cloud Build上でDockerイメージがビルドされ、Container RegistryにPushされます。
ただ、この方法だとDockerイメージのビルドしかできないため、ビルド・テスト・デプロイが実現できません。 そこで、ビルド構成ファイル(cloudbuild.yaml)を使用することにより、必要なステップを定義することができます。
ビルド構成ファイル(cloudbuild.yaml)
steps:
- name: 'gcr.io/cloud-builders/docker'
args: ['build', '-t', 'gcr.io/$PROJECT_ID/quickstart-image', '.']
images:
- 'gcr.io/$PROJECT_ID/quickstart-image'
name
は、コマンドを実行する際に使用するDockerイメージになります。
上記の場合、Googleが提供しているgcr.io/cloud-builders/docker
を使用してDockerビルドを実行する例になります。
$ gcloud builds submit
上記を実行すると、Cloud Build上でDockerイメージがビルドされ、Container RegistryにPushされます。 前回との違いは、Container RegistryにPushする際のタグ名をcloudbuild.yamlに定義しているので、引数に指定する必要がありません。
次は、RailsのRSpecをCloud Buildで実行してみたいと思います。