Help us learn about your current experience with the documentation. Take the survey.

下游管道故障排除

触发作业失败且未创建多项目管道

在多项目管道中,如果发生以下情况,触发作业会失败且不会创建下游管道:

  • 找不到下游项目。
  • 创建上游管道的用户没有权限在下游项目中创建管道。
  • 下游管道针对的是受保护分支,而用户没有权限在受保护分支上运行管道。有关更多信息,请参阅受保护分支的管道安全

要确定下游项目中哪个用户存在权限问题,您可以在Rails 控制台中使用以下命令检查触发作业,并查看 user_id 属性。

Ci::Bridge.find(<job_id>)

管道运行时,子管道中的作业未创建

如果父管道是合并请求管道,子管道必须使用 workflow:rulesrules 来确保作业运行

如果由于缺少或不正确的 rules 配置,子管道中的任何作业都无法运行:

  • 子管道启动失败。
  • 父管道的触发作业失败,错误信息为:无法创建下游管道,生成的管道将为空。请检查相关作业的rules配置。

包含 $ 字符的变量未正确传递到下游管道

将 CI/CD 变量传递到下游管道时,您不能使用 $$ 来转义 CI/CD 变量中的 $ 字符。下游管道仍然将 $ 视为变量引用的开头。

在配置变量时,您可以在 UI 中防止 CI/CD 变量扩展,或使用 variables:expand 关键字来设置变量值不进行扩展。然后,该变量可以传递到下游管道,而 $ 不会被解释为变量引用。

Ref 不明确

当存在同名分支时,您不能使用标签触发多项目管道。下游管道创建失败,错误信息为:无法创建下游管道,Ref 不明确

仅使用与分支名称不匹配的标签名称来触发多项目管道。

从上游管道下载作业工件时出现 403 Forbidden 错误

在 GitLab 15.9 及更高版本中,CI/CD 作业令牌的作用域限定为管道执行的项目。因此,下游管道中的作业令牌默认无法用于访问上游项目。

要解决此问题,将下游项目添加到作业令牌范围允许列表

错误:needs:need pipeline 应为字符串

当使用 needs:pipeline:job 与动态子管道时,您可能会收到此错误:

无法创建管道
- jobs:<job_name>:needs:need pipeline should be a string

当管道 ID 被解析为整数而不是字符串时,会发生此错误。要修复此问题,请将管道 ID 用引号括起来:

rspec:
  needs:
    - pipeline: "$UPSTREAM_PIPELINE_ID"
      job: dependency-job
      artifacts: true