[英]Is there a way to run the Datastore Emulator in Cloud Build?
每次將 PR 提交到我存儲庫中的特定分支時,我都會嘗試在 Cloud Build 中運行一些 Go 單元測試。 問題是我的單元測試依賴於與 Datastore Emulator 1的連接。 這是我在運行單元測試之前如何設置模擬器的示例。 我有一個*_test.go
文件, init
為 function,如下所示:
func init() {
// Set up port for Datastore Emulator
err := os.Setenv("DATASTORE_EMULATOR_HOST", "localhost:8000")
if err != nil {
log.Fatalf("Error setting up Port for DS Emulator: %v", err)
}
// Check if Datastore Emulator is running on port 8000
_, err = net.Dial("tcp", "localhost:8000")
if err != nil {
log.Fatalf("Please ensure you have Datastore Emulator running on port 8000 before running tests: %v", err)
}
dsClient, err = datastore.NewClient(ctx, mockCfg.GCP.ProjectID)
if err != nil {
log.Fatalf("Error creating datastore client: %v", err)
}
defer dsClient.Close()
}
在本地,我使用 cloud-sdk 運行模擬器:
gcloud --project=dsemu beta emulators datastore start \
--host-port 0.0.0.0:8000 \
--no-store-on-disk \
--use-firestore-in-datastore-mode
測試在本地運行良好,我使用以下cloudbuild.yaml
在 Cloud Build 中執行測試:
steps:
- name: gcr.io/cloud-builders/docker
args:
- run
- '-d'
- '--network=cloudbuild'
- '--name=dsemu'
- google/cloud-sdk
- gcloud
- '--project=dsemu'
- beta
- emulators
- datastore
- start
- '--host-port=0.0.0.0:8000'
- '--no-store-on-disk'
- '--use-firestore-in-datastore-mode'
- name: jwilder/dockerize
args:
- dockerize
- '-timeout=60s'
- '-wait=tcp://dsemu:8000'
- name: 'golang:1.19'
env:
- 'DATASTORE_EMULATOR_HOST=dsemu:8000'
args:
- go
- test
- ./...
- name: gcr.io/cloud-builders/docker
args:
- rm
- '--force'
- dsemu
timeout: 600s
這就是出現問題的地方。 測試無法連接到cloudbuild
.network 來完成。 構建達到 10m 的超時並失敗。 有什么可能是錯誤的想法嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.