作业产物故障排除
- Tier: Free, Premium, Ultimate
- Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
在使用 作业产物 时,你可能会遇到以下问题。
作业未获取某些产物
默认情况下,作业会获取来自之前阶段的所有产物,但使用 dependencies 或 needs 的作业默认不会获取所有作业的产物。
如果你使用这些关键字,产物只会从部分作业中获取。请查阅关键字参考,了解如何使用这些关键字获取产物:
作业产物占用过多磁盘空间
如果作业产物占用过多磁盘空间,请参阅 作业产物管理文档。
错误消息 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中的资源。 project、job和ref的组合存在并且会产生所需的依赖项。- 任何正在使用的变量都计算为正确的值。
如果你使用 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_IDCI/CD 变量在当前流水线的父子流水线层次结构中可用。pipeline和job的组合存在并且解析为现有的流水线。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 中的评论。