nouhau
nouhau copied to clipboard
Cloud BuildでGoogle Cloud * Emulator を使う
Google Cloud BuildをCIのように回す時に、Google Cloud * Emulatorたちを動かしたい!という気持ちを言ったら、 @apstndb さんが一晩でやってくれました https://gist.github.com/apstndb/f362881ac2335f10a5ebe5456e5c4cec
以下はDatastore Emulatorを動かしている例
steps:
# Cloud Build uses cloud
# https://cloud.google.com/cloud-build/docs/overview#build_configuration_and_build_steps
- name: gcr.io/cloud-builders/docker
args: ['run', '-d', '--network=cloudbuild', '--name=cds-emulator', 'google/cloud-sdk:248.0.0', 'gcloud', 'beta', 'emulators', 'datastore', 'start', '--host-port=0.0.0.0:8081']
- name: jwilder/dockerize:0.6.1
args: ['dockerize', '-timeout=60s', '-wait=tcp://cds-emulator:8081']
# ここの部分を自分のTestを動かすものに置き換える。
- name: google/cloud-sdk:248.0.0
env:
- DATASTORE_EMULATOR_HOST=cds-emulator:8081
args: ['sh', '-c', 'curl $${DATASTORE_EMULATOR_HOST}/v1/projects/example-project/indexes']
# for cloud-build-local
- name: gcr.io/cloud-builders/docker
args: ['rm', '--force', 'cds-emulator']
例えば、GoのTestを動かしたい時は以下のような感じ
steps:
- name: gcr.io/cloud-builders/docker
args: ['run', '-d', '--network=cloudbuild', '--name=cds-emulator', 'google/cloud-sdk:248.0.0', 'gcloud', 'beta', 'emulators', 'datastore', 'start', '--host-port=0.0.0.0:8081']
- name: jwilder/dockerize:0.6.1
args: ['dockerize', '-timeout=60s', '-wait=tcp://cds-emulator:8081']
- name: 'golang:1.11.5-stretch'
entrypoint: 'go'
args: ['test', '-v', './...']
env:
- 'GO111MODULE=on'
- 'DATASTORE_EMULATOR_HOST=cds-emulator:8081'
# for cloud-build-local
- name: gcr.io/cloud-builders/docker
args: ['rm', '--force', 'cds-emulator']
余談
Emulatorではないけど、似たような話で、DBのようなものを動かしたいという話がある。 https://github.com/GoogleCloudPlatform/cloud-builders/issues/376 にそれをいい感じにやるドキュメントを書いて欲しいというissueが存在している。 PhilmodさんがGooglerのようで、docker-composeを使う方法を提案している https://github.com/Philmod/gcb-docker-compose が、みんなあんまりdocker-composeは使いたくない雰囲気がある。 それがそのまま公式ドキュメントになったのか、ドキュメントでもdocker-composeでやっている https://cloud.google.com/cloud-build/docs/configuring-builds/build-test-deploy-artifacts#running_unit_tests_and_integration_tests
Goの場合 https://github.com/ory/dockertest を利用してUnitTest実行時に起動する方法もあるが、なんか動く時と動かない時がある。
Refs
一晩ではない…一時間だ
カッコいい
元の issue にも書いておくべきでは?となったので書いておいた https://github.com/GoogleCloudPlatform/cloud-builders/issues/376
上の issue でやりとりをした結果ドキュメントに追記された https://cloud.google.com/cloud-build/docs/configuring-builds/build-test-deploy-artifacts?hl=en#running_unit_tests_and_integration_tests