gcpug / nouhau

Google Cloud Platformのノウハウを共有するRepository
https://gcpug.jp
MIT License
653 stars 23 forks source link

Cloud BuildでGoogle Cloud * Emulator を使う #97

Open sinmetal opened 5 years ago

sinmetal commented 5 years ago

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

apstndb commented 5 years ago

一晩ではない…一時間だ

sinmetal commented 5 years ago

カッコいい

apstndb commented 5 years ago

元の issue にも書いておくべきでは?となったので書いておいた https://github.com/GoogleCloudPlatform/cloud-builders/issues/376

apstndb commented 4 years ago

上の issue でやりとりをした結果ドキュメントに追記された https://cloud.google.com/cloud-build/docs/configuring-builds/build-test-deploy-artifacts?hl=en#running_unit_tests_and_integration_tests