簡體   English   中英

有沒有辦法在 Cloud Build 中運行數據存儲模擬器?

[英]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 的超時並失敗。 有什么可能是錯誤的想法嗎?

您可以使用Docker 容器在 Cloud Build 中運行數據存儲模擬器。

您可以按照此處的說明使用 docker 容器創建數據存儲模擬器。

您需要將 --host-port 標志傳遞給模擬器命令。 沒有它,模擬器將只在容器內監聽本地主機。 你可以參考這個鏈接

也看看這些thread1thread2這可能會有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM