如何在us-central1区域使用curl调用Cloud Build触发器?
解决Cloud Build区域Webhook触发器404/400问题
问题背景
在Google Cloud Build中创建us-central1区域的Webhook类型触发器时,系统预览给出的Webhook URL为:
https://cloudbuild.googleapis.com/v1/projects/PROJECT_ID/triggers/TRIGGER_NAME?key=XXXXXXXX&secret=XXXXXXXX
使用curl调用该URL时,返回404错误:
{ "error": { "code": 404, "message": "triggerError spanner trigger (11111111111, TRIGGER_NAME) not found", "status": "NOT_FOUND" } }
注:全局区域创建的触发器可正常使用,仅us-central1区域的触发器出现此问题,需解决API如何正确定位区域触发器的问题。
已尝试的调用方式
以下是已测试的curl调用及结果:
# 直接使用预览URL,返回404 $ curl https://cloudbuild.googleapis.com/v1/projects/{PROJECT}/triggers/hello-central1:webhook \ -d key=xxx \ -d secret=xxx # 错误返回: # { # "error": { # "code": 404, # "message": "triggerError spanner trigger (11111111111, hello-central1) not found", # "status": "NOT_FOUND" # } # } # 在URL路径中加入区域信息,返回400 $ curl https://cloudbuild.googleapis.com/v1/projects/{PROJECT}/locations/us-central1/triggers/hello-central1:webhook \ -d key=xxx \ -d secret=xxx # 错误返回: # { # "error": { # "code": 400, # "message": "Request contains an invalid argument.", # "status": "INVALID_ARGUMENT" # } # } # 在请求体中指定触发器完整名称,返回400 $ curl https://cloudbuild.googleapis.com/v1/projects/{PROJECT}/triggers/{TRIGGER}:webhook \ -d name=projects/{PROJECT}/locations/us-central1/triggers/{TRIGGER} \ -d key=xxx \ -d secret=xxx # 错误返回: # { # "error": { # "code": 400, # "message": "Request contains an invalid argument.", # "status": "INVALID_ARGUMENT" # } # }
正确解决方案
区域化的Cloud Build触发器需要使用对应区域的API端点,而非全局端点。具体操作:
- 将全局端点
cloudbuild.googleapis.com替换为区域专属端点:us-central1-cloudbuild.googleapis.com - URL路径保持与全局触发器一致,无需额外添加
locations/us-central1
正确的curl调用示例:
$ curl https://us-central1-cloudbuild.googleapis.com/v1/projects/{PROJECT}/triggers/hello-central1:webhook \ -d key=xxx \ -d secret=xxx
原理说明
全局API端点cloudbuild.googleapis.com仅会查找部署在全局区域的触发器,而区域触发器的元数据存储在对应区域的服务节点中,必须通过区域专属端点才能正确寻址。Google Cloud多数区域化服务均采用[区域ID]-[服务名].googleapis.com的端点格式,Cloud Build遵循此规则。
内容的提问来源于stack exchange,提问作者vbarbarosh
相关产品推荐
相关产品推荐

