如何通过curl获取Google Cloud Source Repository的revision标签列表
我的需求
- 我有一个运行在Docker中的Python后端应用,使用服务账号进行身份验证。
- 我配置了连接Bitbucket仓库的Cloud Build触发器,该触发器通过Webhook调用,版本使用tag标识。
- 我需要通过后端应用触发这个Webhook,并传入指定tag(使用占位符变量传值)。
- 我需要后端返回所有可用tag的列表,效果和console.google.com前端展示的一致(见截图)

我尝试过的方案
我使用可以正常生效的Bearer token调用了以下API端点,但无法返回标签列表:Source Repo API
curl https://sourcerepo.googleapis.com/v1/projects/<project>/repos/<repo>' --header "Authorization: Bearer $(gcloud auth print-access-token)" --header 'Accept: application/json'
由于在云控制台可以查看所有标签,我通过开发者工具抓包找到了提供全量标签的端点:
https://console.cloud.google.com/m/source/repos/get?project=<project>&repo=<repo>
我遇到的问题是该接口需要Cookie进行身份验证,使用Bearer token调用会失败。
请问有没有办法让我的服务账号自动通过console.google.com的身份验证来调用该接口?或者是否有其他方式可以获取标签列表?
解决方案
你之前调用Source Repo API没有返回结果,是因为该接口仅适用于谷歌云托管的Source Repository代码库,你的代码存放在Bitbucket上,自然无法通过该接口拉取标签。
不建议尝试调用谷歌控制台的内部接口:这类接口没有对外服务承诺,仅面向控制台前端使用,不支持服务账号认证,随时可能因版本升级导致参数、权限、返回结构变更,完全不适合在生产业务中集成。
推荐你直接通过Bitbucket官方接口拉取全量标签列表,实现成本和稳定性都更高:
- 在Bitbucket后台为你的服务账号分配对应仓库的只读权限,生成应用访问密钥,存储到你的Python后端的环境变量中。
- 调用Bitbucket仓库的标签查询接口:
- 公开仓库可直接访问无需认证,私有仓库使用生成的密钥做身份校验
- 接口返回的标签列表和谷歌云控制台展示的内容完全一致
- 拿到标签列表后,触发Cloud Build Webhook时直接将选中的tag作为参数传入占位符即可,Cloud Build会自动拉取Bitbucket对应tag的代码执行构建。
如果确实不想对接Bitbucket接口,也可以通过Cloud Build的projects.builds.list接口拉取历史构建记录,提取过往构建使用过的tag,但这种方式只能拿到曾经触发过构建的标签,无法获取仓库全量未触发过构建的标签。
内容的提问来源于stack exchange,提问作者Jonas
相关产品推荐
相关产品推荐

