{{< details >}}

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

{{< /details >}}

流水线日志是由 runner 在处理作业时发送的。你可以在作业页面、流水线和电子邮件通知中查看日志。

数据流

一般来说,流水线日志有两种状态:logarchived log。在下表中,你可以看到日志经历的阶段:

阶段 状态 条件 数据流 存储路径
1: 打补丁 log 当作业正在运行时 Runner => Puma => 文件存储 #{ROOT_PATH}/gitlab-ci/builds/#{YYYY_mm}/#{project_id}/#{job_id}.log
2: 存档 archived log 作业完成后 Sidekiq 将日志移动到产物文件夹 #{ROOT_PATH}/gitlab-rails/shared/artifacts/#{disk_hash}/#{YYYY_mm_dd}/#{job_id}/#{job_artifact_id}/job.log
3: 上传 archived log 日志存档后 Sidekiq 将存档日志移动到对象存储(如果已配置) #{bucket_name}/#{disk_hash}/#{YYYY_mm_dd}/#{job_id}/#{job_artifact_id}/job.log

ROOT_PATH 因环境而异:

  • 对于 Linux 软件包,是 /var/opt/gitlab
  • 对于自编译安装,是 /home/git/gitlab

更改流水线日志的本地位置

{{< alert type=”note” >}}

对于 Docker 安装,你可以更改数据挂载的路径。对于 Helm chart,请使用对象存储。

{{< /alert >}}

要更改存储流水线日志的位置:

{{< tabs >}}

{{< tab title=”Linux package (Omnibus)” >}}

  1. 可选。如果你有现有的流水线日志,通过暂时停止 Sidekiq 来暂停持续集成数据处理:

    sudo gitlab-ctl stop sidekiq
    
  2. /etc/gitlab/gitlab.rb 中设置新的存储位置:

    gitlab_ci['builds_directory'] = '/mnt/gitlab-ci/builds'
    
  3. 保存文件并重新配置极狐GitLab:

    sudo gitlab-ctl reconfigure
    
  4. 使用 rsync 将流水线日志从当前位置移动到新位置:

    sudo rsync -avzh --remove-source-files --ignore-existing --progress /var/opt/gitlab/gitlab-ci/builds/ /mnt/gitlab-ci/builds/
    

    使用 --ignore-existing,这样不会用旧版本的日志覆盖新的流水线日志。

  5. 如果你选择暂停持续集成数据处理,你可以再次启动 Sidekiq:

    sudo gitlab-ctl start sidekiq
    
  6. 删除旧的流水线日志存储位置:

    sudo rm -rf /var/opt/gitlab/gitlab-ci/builds
    

{{< /tab >}}

{{< tab title=”Self-compiled (source)” >}}

  1. 可选。如果你有现有的流水线日志,通过暂时停止 Sidekiq 来暂停持续集成数据处理:

    # 对于运行 systemd 的系统
    sudo systemctl stop gitlab-sidekiq
    
    # 对于运行 SysV init 的系统
    sudo service gitlab stop
    
  2. 编辑 /home/git/gitlab/config/gitlab.yml 以设置新的存储位置:

    production: &base
      gitlab_ci:
        builds_path: /mnt/gitlab-ci/builds
    
  3. 保存文件并重启极狐GitLab:

    # 对于运行 systemd 的系统
    sudo systemctl restart gitlab.target
    
    # 对于运行 SysV init 的系统
    sudo service gitlab restart
    
  4. 使用 rsync 将流水线日志从当前位置移动到新位置:

    sudo rsync -avzh --remove-source-files --ignore-existing --progress /home/git/gitlab/builds/ /mnt/gitlab-ci/builds/
    

    使用 --ignore-existing,这样不会用旧版本的日志覆盖新的流水线日志。

  5. 如果你选择暂停持续集成数据处理,你可以再次启动 Sidekiq:

    # 对于运行 systemd 的系统
    sudo systemctl start gitlab-sidekiq
    
    # 对于运行 SysV init 的系统
    sudo service gitlab start
    
  6. 删除旧的流水线日志存储位置:

    sudo rm -rf /home/git/gitlab/builds
    

{{< /tab >}}

{{< /tabs >}}

上传日志到对象存储

存档日志被视为作业产物。因此,当你设置对象存储集成时,流水线日志会自动与其他作业产物一起迁移到对象存储。

查看 数据流 中的 “阶段 3: 上传” 以了解该过程。

最大日志文件大小

极狐GitLab 中流水线日志文件大小限制默认为 100 兆字节。任何超过限制的作业将被标记为失败,并被 runner 丢弃。更多详情请参见流水线日志的最大文件大小

防止本地磁盘使用

如果你想避免任何本地磁盘使用流水线日志,你可以使用以下选项之一:

如何删除流水线日志

没有办法自动过期旧的流水线日志。然而,如果它们占用了太多空间,安全删除它们是可以的。如果你手动删除日志,UI 中的流水线输出将为空。

有关如何使用极狐GitLab CLI 删除流水线日志的详细信息,请参见删除流水线日志

或者,你可以使用 shell 命令删除流水线日志。例如,要删除所有超过 60 天的流水线日志,请从极狐GitLab 实例中的 shell 运行以下命令。

{{< alert type=”note” >}}

对于 Helm chart,请使用你的对象存储提供的存储管理工具。

{{< /alert >}}

{{< alert type=”warning” >}}

以下命令永久删除日志文件且不可逆。

{{< /alert >}}

{{< tabs >}}

{{< tab title=”Linux package (Omnibus)” >}}

find /var/opt/gitlab/gitlab-rails/shared/artifacts -name "job.log" -mtime +60 -delete

{{< /tab >}}

{{< tab title=”Docker” >}}

假设你将 /var/opt/gitlab 挂载到 /srv/gitlab

find /srv/gitlab/gitlab-rails/shared/artifacts -name "job.log" -mtime +60 -delete

{{< /tab >}}

{{< tab title=”Self-compiled (source)” >}}

find /home/git/gitlab/shared/artifacts -name "job.log" -mtime +60 -delete

{{< /tab >}}

{{< /tabs >}}

删除日志后,你可以通过运行检查 上传文件完整性的 Rake 任务来找到任何损坏的文件引用。 有关更多信息,请参见如何 删除丢失产物的引用

增量日志记录

增量日志记录改变了流水线日志的处理和存储方式,提高了在扩展部署中的性能。

默认情况下,流水线日志以块的形式从极狐GitLab runner 发送并暂时缓存到磁盘。作业完成后,后台任务会将日志存档到产物目录或对象存储(如果已配置)。

使用增量日志记录时,日志存储在 Redis 和持久存储中,而不是文件存储。这种方法:

  • 防止流水线日志的本地磁盘使用。
  • 消除了在 Rails 和 Sidekiq 服务器之间共享 NFS 的需求。
  • 提高了多节点安装的性能。

增量日志记录过程使用 Redis 作为临时存储,并遵循以下流程:

  1. runner 从极狐GitLab 获取一个作业。
  2. runner 发送一段日志到极狐GitLab。
  3. 极狐GitLab 将数据附加到 Redis 的 Gitlab::Redis::TraceChunks 命名空间。
  4. 当 Redis 中的数据达到 128 KB 时,将数据刷新到持久存储。
  5. 上述步骤重复直到作业完成。
  6. 作业完成后,极狐GitLab 安排 Sidekiq 工作来存档日志。
  7. Sidekiq 工作将日志存档到对象存储并清理临时数据。

增量日志记录不支持 Redis 集群。

配置增量日志记录

在启用增量日志记录之前,必须为 CI/CD 产物、日志和构建配置对象存储。启用增量日志记录后,文件无法写入磁盘,并且没有保护措施来防止配置错误。

启用增量日志记录时,正在运行的作业的日志继续写入磁盘,但新作业使用增量日志记录。

关闭增量日志记录时,正在运行的作业继续使用增量日志记录,但新作业写入磁盘。

要配置增量日志记录: