作业产物故障排除

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

作业不获取某些产物

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

如果您使用这些关键字,则仅从作业的一个子集获取产物。查看关键字参考,获取有关如何使用这些关键字获取产物的信息:

作业产物使用了过多的磁盘空间

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

错误消息 No files to upload

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

如需更详细的作业日志,您可以启用 CI/CD 调试日志记录并重试该作业。此日志记录可能会提供有关未创建文件的原因的更多信息。

错误消息 Missing /usr/bin/gitlab-runner-helper. Uploading artifacts is disabled.

引入于 15.2 版本,极狐GitLab Runner 使用 RUNNER_DEBUG 而不是 DEBUG 来解决此问题。

在 15.1 及更早的版本,设置名为 DEBUG 的 CI/CD 变量会导致产物上传失败。

要解决此问题,您可以:

  • 更新到极狐GitLab 和极狐GitLab Runner 15.2
  • 使用不同的变量名
  • script 命令中将其设置为环境变量:

    failing_test_job:  # This job might fail due to issue gitlab-org/gitlab-runner#3068
      variables:
        DEBUG: true
      script: bin/mycommand
      artifacts:
        paths:
          - bin/results
    
    successful_test_job:  # This job does not define a CI/CD variable named `DEBUG` and is not affected by the issue
      script: DEBUG=true bin/mycommand
      artifacts:
        paths:
          - bin/results
    

在 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.

如果出现以下情况,使用 needs:artifacts 关键字配置的作业无法启动并返回此错误消息:

  • 找不到作业的依赖项。
  • 由于权限不足,作业无法访问相关资源。

要遵循的故障排除步骤因作业使用的语法而异:

对于配置了 needs:project 的作业

could not retrieve the needed artifacts. 错误可能发生在使用 needs:project 的作业中,其配置类似于:

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

要解决此错误,请验证:

  • 项目 my-group/my-project 在一个有高级订阅计划的群组中。
  • 运行作业的用户可以访问 my-group/my-project 中的资源。
  • projectjobref 组合存在并导致所需的依赖关系。
  • 使用中的任何变量都使用正确的值。

对于配置了 needs:pipeline:job 的作业

could not retrieve the needed artifacts. 错误可能发生在使用 needs:pipeline:job 的作业中,其配置类似于:

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

要解决此错误,请验证:

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