You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GitLab CI运行google-cloud-sdk的Datastore模拟器报错如何解决

修复GitLab CI中Datastore Emulator运行错误的方案

问题根因

  • 端口不匹配:服务启动时监听8080端口,但全局环境变量中配置的Datastore访问端口为8081,两端端口不一致
  • 域名解析异常:未给service指定别名,GitLab Runner生成的默认hostname与配置中使用的google-cloud-sdk不匹配
  • 项目ID配置未生效:模拟器初始化日志显示使用的是GitLab Runner自动生成的项目ID,而非指定的project-007,和业务代码使用的项目ID不一致
  • 健康检查失败:google/cloud-sdk镜像默认未声明暴露8080端口,GitLab Runner的健康检查逻辑无法找到待检测的端口,直接报错

方案1:调整现有Service配置

修改现有配置中的错误项即可修复,调整后的核心配置如下:

# 修改全局环境变量,统一端口为8080
variables:
  DATASTORE_DATASET: project-007
  DATASTORE_EMULATOR_HOST: google-cloud-sdk:8080
  DATASTORE_EMULATOR_HOST_PATH: google-cloud-sdk:8080/datastore
  DATASTORE_HOST: http://google-cloud-sdk:8080
  DATASTORE_PROJECT_ID: project-007

test:
  services:
    - name: google/cloud-sdk:latest
      alias: google-cloud-sdk # 显式指定服务hostname,和环境变量保持一致
      command: ["gcloud", "beta", "emulators", "datastore", "start", "--host-port", "0.0.0.0:8080", "--project", "project-007", "--no-store-on-disk", "--consistency", "1.0"]
      variables:
        CLOUDSDK_CORE_PROJECT: project-007
  script:
    # 新增端口等待步骤,避免模拟器未完全启动就运行测试
    - apt-get update && apt-get install -y netcat
    - while ! nc -z google-cloud-sdk 8080; do sleep 1; done
    - make test

方案2:更稳妥的Job内直接运行模拟器

无需依赖GitLab Service机制,直接在测试Job内部安装启动模拟器,可控性更高,不会出现健康检查相关问题,配置参考如下:

test:
  before_script:
    # 安装基础依赖与Google Cloud SDK
    - apt-get update && apt-get install -y ffmpeg make apt-transport-https ca-certificates gnupg curl netcat
    - echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg] https://packages.cloud.google.com/apt cloud-sdk main" | tee -a /etc/apt/sources.list.d/google-cloud-sdk.list
    - curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | gpg --dearmor -o /usr/share/keyrings/cloud.google.gpg
    - apt-get update && apt-get install -y google-cloud-cli google-cloud-cli-datastore-emulator
    # 原有Python环境配置步骤
    - python --version
    - cd backend
    - python -m pip install -r dev-requirements.txt
    # 后台启动Datastore模拟器,日志写入文件方便排查问题
    - gcloud beta emulators datastore start --host-port 0.0.0.0:8080 --project project-007 --no-store-on-disk --consistency 1.0 > emulator.log 2>&1 &
    # 等待模拟器启动完成
    - while ! nc -z localhost 8080; do sleep 1; done
    # 加载模拟器环境变量,自动配置业务代码需要的Datastore连接参数
    - $(gcloud beta emulators datastore env-init)
  script:
    - make test

内容的提问来源于stack exchange,提问作者Miki Tebeka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 20:45:03