使用curl触发BitBucket Pipeline返回Resource not found报错
问题排查与解决
这个Resource not found报错在手动触发正常、同工作区其他仓库同curl命令可正常运行的前提下,只会是当前新仓库缺以下对应配置,按优先级排查即可:
- 最常见原因:仓库未开启API触发流水线的独立开关
进入当前仓库的 Settings > Pipelines > Settings 页面,找到Enable API access to trigger pipelines选项勾选后保存。这个配置是仓库级独立开关,不会继承工作区、项目的全局设置,新建仓库默认处于关闭状态,你工作区里其他老仓库大概率是之前已经开过这个开关,所以同命令可以正常触发。 - 次常见原因:请求参数和仓库实际配置不匹配
两个参数任意一个写错都会返回资源不存在:- 检查当前仓库
bitbucket-pipelines.yml里定义的自定义流水线名称,是不是和curl里pattern字段的create-tenant完全一致,注意大小写、连字符、拼写不能有偏差,手动触发是从下拉列表选不会出错,API传字符串很容易写错 - 检查当前仓库默认分支是不是
master,现在很多新建仓库默认分支是main,ref_name字段要和实际存在的分支名完全一致
- 检查当前仓库
- 少见原因:账号权限不足
确认你curl命令里用的账号,对这个新仓库至少持有Write及以上权限。Bitbucket API有权限校验的特殊逻辑:如果账号对目标仓库没有对应操作权限,不会返回403无权限,而是直接返回404资源不存在,避免泄露仓库存在信息。新仓库如果没单独给账号配权限,哪怕账号在工作区有其他仓库权限,也会触发这个报错。
连通性验证步骤
配置改完可以先去掉自定义流水线选择参数,先触发分支默认流水线验证API链路是否通,测试命令如下:
curl -X POST -is -u username:password \ -H 'Content-Type: application/json' \ https://api.bitbucket.org/2.0/repositories/workspace-name/repo-name/pipelines/ \ -d ' { "target": { "type": "pipeline_ref_target", "ref_type": "branch", "ref_name": "master" }}'
如果这个命令能正常返回流水线运行信息,再补全selector字段的自定义流水线参数即可。
你当前用的curl命令末尾带了路径斜杠,格式是对的,不需要调整这部分。
内容的提问来源于stack exchange,提问作者Ranopriyo Neogy
相关产品推荐
相关产品推荐

