LoginSignup
15
11

More than 5 years have passed since last update.

Google Cloud Container Builder事始め

Posted at

はじめに

Google Cloud Container Builderはdockerのコンテナイメージを構築するためのスタンドアローンのツールです。
dockerをビルドするだけでなく、任意のビルドステップを定義してnpm,git,goのような柔軟なタスクをこなすことが可能です。ローカルでビルドしたイメージをpushするのが面倒くさいぜ!という人にオススメです。pushされた変更をトリガーするだけなら30分もあれば構築することが可能です!

料金

アカウントにつき、120分/日の無料ビルドが可能です。(2017/03/21現在)
120分を超えると0.0034ドル/build time(分)の料金が発生します。

イメージ図

GCCB_image.png

解説

1.ビルドのリクエスト

ビルドリクエストは指定のブランチにpushされた場合と任意のタイミングでビルドを行う2種類の方法があります。順を追って説明しましょう。

トリガーの作成(指定のブランチにpushされた場合)

GCPのコンソールからContainer Registryを開くとトリガーを作成という項目があります。
ここでは正規表現に一致するブランチにpushされるとビルドが実行されるトリガーを作成することができます。
Sourceの取得先としてCloud Source Repositories,Github,Bitbucketから選択することが出来ますが、Cloud Source Repositories以外を選択した場合はCloud Source RepositoriesにRepositoryのミラーが作成されるので注意が必要です。ビルド設定として、Dockerfileかcloudbuild.yamlを選択することができ、image作成だけが行いたければDockerfileを、任意のビルドステップが実行したければcloudbuild.yamlを指定するとよいでしょう。ビルドが成功するとCloud Container Registryにアップロードされます。

任意のタイミングでビルドする

任意のタイミングでビルドを行うにはgoogle-cloud-SDK(gcloudコマンド)を使う、又はGoogle Cloud Container Builder APIを使うの2種類の方法があります。より詳しい内容はGCPのドキュメントを参照して下さい。

  • gcloudでビルドを行う

    1. gcloudにログインします(gcloudへのログイン方法は割愛します)
    2. gcloud container builds submit --tag gcr.io/$MY_PROJECT/$TARGET_CONTAINER .をDockerfileが存在するディレクトリで実行します。
    3. 上記のコマンドでは、カレントディレクトリの内容がCloud Storageにアップロードされ、展開された後にビルドソースとしてビルドが始まります。
    4. 出力はターミナルにストリームされ、ビルドが成功するとCloud Container Registryにアップロードされます。
  • Google Cloud Container Builder APIでビルドを行う

    1. gcloudにログインします。
    2. ビルドステップが定義されたjsonを作成します。
    3. curlでリクエストをPOSTします。
    4. ビルドが成功するとCloud Container Registryにアップロードされます。

2.ソースの取得

1.ビルドリクエストにもチラッと書きましたが、Cloud Source Repositoriesにビルドソースがない場合、どこからGCCBがソースを取得するか見ていきます。

  • トリガーを作成した場合

    • Cloud Source RepositoriesにRepositoryのミラーが作成されます。外部のRepositoryのpushイベントをhookしてビルドが実行されるため、初回に認証が必要です。
  • 任意のビルドの場合

    • ビルドステップで指定したディレクトリが.tgz形式に圧縮されCloud Storageバケットにアップロードされ、Container Builderはそのファイルを展開して使用します。

3.イメージのpush

ビルドが成功するとイメージがCloud Container Registry上に自動でアップロードされます。あとは煮るなり焼くなりすきにイメージを使用しましょう。

ビルドのカスタマイズ

Cloud Container Builderで出来ることをイメージしてもらうために、cloudbuild.yamlを使ってビルドのカスタマイズする方法を少し紹介します。このページを引用しています。

以下は最初の2つのグループは同時に実行し、3つ目のグループは他の2つのグループの完了を待ってから開始する例です。
cloudbuild.yaml

steps:
- name: 'gcr.io/cloud-builders/go'
  args: ['generate']
- name: 'gcr.io/cloud-builders/go'
  args: ['test', './...']
- name: 'gcr.io/cloud-builders/go'
  args: ['install', 'mytarget']
  id: 'go-install'

- name: 'gcr.io/cloud-builders/gsutil'
  args: ['cp', '-r', 'gs://my-resource-bucket/somefiles', './somefiles']
  waitFor: ['-']  # The '-' indicates that this step begins immediately.
  id: 'fetch-resources'

- name: 'gcr.io/cloud-builders/docker'
  args: ['build', '-t', 'gcr.io/$PROJECT_ID/mytarget', '.']
  waitFor: ['go-install', 'fetch-resources']

images: ['gcr.io/$PROJECT_ID/mytarget']

nameで実行するタスクを指定できます。Officail Builder Imageとして以下のものが用意されていますが、自前で用意したコンテナを指定することも可能です。

  • bazel: runs the bazel tool
  • docker: runs the docker tool
  • gcloud: runs the gcloud tool
  • git: runs the git tool
  • glide: runs the glide tool
  • go: runs the go tool
  • golang-project: recognizes and builds conventional Go projects into container images
  • gsutil: runs the gsutil tool
  • npm: runs the npm tool
  • wget: runs the wget tool

idでタスクをグルーピングすることでグループ毎の優先順位付けと同時実行ができます。imageで指定したイメージ名でContainer Registryにアップロードされます。

さいごに

GCPの進化が早すぎてついていけないので、勘違いしている箇所があるかもしれません。コメント欄で指摘してもらえると助かります!

15
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
11