You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用$CI_JOB_TOKEN触发流水线时出现404错误

解决用$CI_JOB_TOKEN触发GitLab流水线返回404的问题

我之前也碰到过类似的情况,结合你的命令和问题描述,下面是几个可能的原因和对应的解决办法:

1. API调用方式错误(最可能的原因)

你当前用的是--form "token=$CI_JOB_TOKEN",但这个token参数是给**GitLab流水线触发器令牌(Trigger Token)**用的,并不是$CI_JOB_TOKEN的正确用法。

$CI_JOB_TOKEN触发流水线时,需要把它放在请求头的Authorization字段里作为Bearer令牌,正确的curl命令应该是:

curl --request POST \
  --header "Authorization: Bearer $CI_JOB_TOKEN" \
  --form "ref=master" \
  https://gitlab.example.com/api/v4/projects/73237/pipeline

注意端点是/pipeline而不是/trigger/pipeline,后者是专门给触发器令牌使用的接口。

2. 检查项目ID和URL是否正确

404错误首先要确认基础信息的准确性:

  • 项目ID 73237是否对应目标项目(可以在目标项目的设置 > 通用页面查看项目ID)
  • GitLab域名是否正确(你的命令里写的是gitlab.eample.com,看起来可能是拼写错误,应该是gitlab.example.com吧?)

3. 权限配置问题

即使API调用方式正确,还需要确保权限配置到位:

  • 目标项目:在设置 > CI/CD > 流水线里,找到“允许来自外部项目的流水线触发”选项,勾选后添加触发作业所在项目的ID到允许列表中
  • 触发项目:确保当前作业的$CI_JOB_TOKEN有足够的权限,在项目的设置 > CI/CD > 作业令牌范围里,选择合适的范围(比如“这个项目和所有关联项目”,如果目标项目是关联项目;或者“所有项目”,如果需要跨无关联项目触发)
  • 另外,目标项目的master分支必须存在,且$CI_JOB_TOKEN对应的CI/CD服务账号有该分支的访问权限

4. 分支名称是否匹配

确认目标项目的默认分支是不是master,现在很多新项目已经改用main作为默认分支了,如果分支名不匹配,也可能触发失败或者返回错误。

内容的提问来源于stack exchange,提问作者Sanju Sagar

火山引擎 最新活动