All Articles

Cloud Buildを試してみる

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で実行してみたいと思います。