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

作业产物故障排除

  • Tier: Free, Premium, Ultimate
  • Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated

在使用 作业产物 时,你可能会遇到以下问题。

作业未获取某些产物

默认情况下,作业会获取来自之前阶段的所有产物,但使用 dependenciesneeds 的作业默认不会获取所有作业的产物。

如果你使用这些关键字,产物只会从部分作业中获取。请查阅关键字参考,了解如何使用这些关键字获取产物:

作业产物占用过多磁盘空间

如果作业产物占用过多磁盘空间,请参阅 作业产物管理文档

错误消息 No files to upload

当 runner 找不到要上传的文件时,作业日志中会出现此消息。文件路径不正确,或者文件未创建。你可以检查作业日志,查找其他错误或警告,这些信息会指定文件名以及文件未生成的原因。

要获取更详细的作业日志,可以 启用 CI/CD 调试日志 并重新尝试运行作业。此日志可能会提供更多关于文件为何未创建的信息。

在 Windows runner 上上传 dotenv 产物时出现 FATAL: invalid argument 错误消息

PowerShell echo 命令使用 UCS-2 LE BOM(字节顺序标记)编码写入文件,但仅支持 UTF-8。如果你尝试使用 echo 创建 dotenv 产物,会导致 FATAL: invalid argument 错误。

请改用 PowerShell Add-Content,它使用 UTF-8:

test-job:
  stage: test
  tags:
    - windows
  script:
    - echo "test job"
    - Add-Content -Path build.env -Value "MY_ENV_VAR=true"
  artifacts:
    reports:
      dotenv: build.env

作业产物未过期

如果某些作业产物未按预期过期,请检查是否启用了 保留最近成功作业的产物 设置。

启用此设置后,每个 ref 的最新成功流水线的作业产物不会过期,也不会被删除。

错误消息 This job could not start because it could not retrieve the needed artifacts.

如果作业无法获取其期望的产物,作业将无法启动并返回此错误消息。在以下情况下会出现此错误:

  • 作业的依赖项未找到。默认情况下,后续阶段的作业会获取所有之前阶段作业的产物,因此之前的所有作业都被视为依赖项。如果作业使用 dependencies 关键字,则只有列出的作业是依赖项。
  • 产物已经过期。你可以使用 artifacts:expire_in 设置更长的过期时间。
  • 由于权限不足,作业无法访问相关资源。

如果作业使用 needs:artifacts 关键字,请查看以下额外的故障排除步骤:

针对 needs:project 配置的作业

对于使用类似以下配置的 needs:project 的作业,可能会出现 could not retrieve the needed artifacts. 错误:

rspec:
  needs:
    - project: my-group/my-project
      job: dependency-job
      ref: master
      artifacts: true

要解决此错误,请验证:

  • 项目 my-group/my-project 在具有 Premium 订阅计划的组中。
  • 运行作业的用户可以访问 my-group/my-project 中的资源。
  • projectjobref 的组合存在并且会产生所需的依赖项。
  • 任何正在使用的变量都计算为正确的值。

如果你使用 CI_JOB_TOKEN,请将令牌添加到项目的 允许列表 中,以便从不同项目拉取产物。

针对 needs:pipeline:job 配置的作业

对于使用类似以下配置的 needs:pipeline:job 的作业,可能会出现 could not retrieve the needed artifacts. 错误:

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

要解决此错误,请验证:

  • $UPSTREAM_PIPELINE_ID CI/CD 变量在当前流水线的父子流水线层次结构中可用。
  • pipelinejob 的组合存在并且解析为现有的流水线。
  • dependency-job 已运行并成功完成。

升级后作业显示 UnlockPipelinesInQueueWorker

作业可能会卡住并显示 UnlockPipelinesInQueueWorker 错误。

此问题在升级后发生。

解决方法是启用 ci_unlock_pipelines_extra_low 功能标志。要切换功能标志,你必须是一个管理员。

在 GitLab SaaS 上:

  • 运行以下 ChatOps 命令:

    /chatops run feature set ci_unlock_pipelines_extra_low true

在 GitLab Self-Managed 上:

  • 启名为 ci_unlock_pipelines_extra_low功能标志

有关更多信息,请参阅 merge request 140318 中的评论。