{{< details >}}

  • Tier: 基础版,专业版,旗舰版
  • Offering: JihuLab.com, 私有化部署

{{< /details >}}

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

作业未检索到某些产物

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

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

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

如果作业产物占用了太多磁盘空间,请查看 作业产物管理文档

错误信息 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 中的资源。
  • projectjobref 组合存在并导致所需的依赖关系。
  • 使用中的任何变量都能正确评估为正确的值。

针对配置了 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 私有化部署上: