{{< details >}}
- Tier: 基础版,专业版,旗舰版
- Offering: JihuLab.com, 私有化部署
{{< /details >}}
在使用 作业产物 时,您可能会遇到以下问题。
作业未检索到某些产物
默认情况下,作业会从前一个阶段获取所有产物,但使用 dependencies
或 needs
的作业默认不会从所有作业中获取产物。
如果使用这些关键词,产物只会从部分作业中获取。请查看关键词参考以了解如何使用这些关键词获取产物:
作业产物占用太多磁盘空间
如果作业产物占用了太多磁盘空间,请查看 作业产物管理文档。
错误信息 No files to upload
当 runner 找不到要上传的文件时,作业日志中会出现此消息。要么文件路径不正确,要么文件没有被创建。您可以检查作业日志中的其他错误或警告,以确定文件名及其未生成的原因。
要获取更详细的作业日志,您可以 启用 CI/CD 调试日志 并再次尝试该作业。此日志可能提供有关为什么文件未创建的更多信息。
错误信息 Missing /usr/bin/gitlab-runner-helper. Uploading artifacts is disabled.
{{< history >}}
- 引入于极狐GitLab 15.2, runner 使用
RUNNER_DEBUG
而不是DEBUG
,解决了此问题。
{{< /history >}}
在极狐GitLab 15.1 及更早版本中,设置名为 DEBUG
的 CI/CD 变量可能会导致产物上传失败。
要解决此问题,您可以:
- 更新到极狐GitLab 和 runner 15.2
- 使用不同的变量名
-
在
script
命令中将其设置为环境变量:failing_test_job: # 由于 issue gitlab-org/gitlab-runner#3068,此作业可能失败 variables: DEBUG: true script: bin/mycommand artifacts: paths: - bin/results successful_test_job: # 该作业未定义名为 `DEBUG` 的 CI/CD 变量,不受此问题影响 script: DEBUG=true bin/mycommand artifacts: paths: - bin/results
错误信息 FATAL: invalid argument
在 Windows runner 上上传 dotenv 产物时
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
属于具有专业版订阅计划的群组。 - 运行作业的用户可以访问
my-group/my-project
中的资源。 -
project
、job
和ref
组合存在并导致所需的依赖关系。 - 使用中的任何变量都能正确评估为正确的值。
针对配置了 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 变量在当前流水线的父子流水线层级中可用。 -
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 私有化部署上: