{{< details >}}
- Tier: 基础版,专业版,旗舰版
- Offering: 私有化部署
{{< /details >}}
流水线日志是由 runner 在处理作业时发送的。你可以在作业页面、流水线和电子邮件通知中查看日志。
数据流
一般来说,流水线日志有两种状态:log
和 archived 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)” >}}
-
可选。如果你有现有的流水线日志,通过暂时停止 Sidekiq 来暂停持续集成数据处理:
sudo gitlab-ctl stop sidekiq
-
在
/etc/gitlab/gitlab.rb
中设置新的存储位置:gitlab_ci['builds_directory'] = '/mnt/gitlab-ci/builds'
-
保存文件并重新配置极狐GitLab:
sudo gitlab-ctl reconfigure
-
使用
rsync
将流水线日志从当前位置移动到新位置:sudo rsync -avzh --remove-source-files --ignore-existing --progress /var/opt/gitlab/gitlab-ci/builds/ /mnt/gitlab-ci/builds/
使用
--ignore-existing
,这样不会用旧版本的日志覆盖新的流水线日志。 -
如果你选择暂停持续集成数据处理,你可以再次启动 Sidekiq:
sudo gitlab-ctl start sidekiq
-
删除旧的流水线日志存储位置:
sudo rm -rf /var/opt/gitlab/gitlab-ci/builds
{{< /tab >}}
{{< tab title=”Self-compiled (source)” >}}
-
可选。如果你有现有的流水线日志,通过暂时停止 Sidekiq 来暂停持续集成数据处理:
# 对于运行 systemd 的系统 sudo systemctl stop gitlab-sidekiq # 对于运行 SysV init 的系统 sudo service gitlab stop
-
编辑
/home/git/gitlab/config/gitlab.yml
以设置新的存储位置:production: &base gitlab_ci: builds_path: /mnt/gitlab-ci/builds
-
保存文件并重启极狐GitLab:
# 对于运行 systemd 的系统 sudo systemctl restart gitlab.target # 对于运行 SysV init 的系统 sudo service gitlab restart
-
使用
rsync
将流水线日志从当前位置移动到新位置:sudo rsync -avzh --remove-source-files --ignore-existing --progress /home/git/gitlab/builds/ /mnt/gitlab-ci/builds/
使用
--ignore-existing
,这样不会用旧版本的日志覆盖新的流水线日志。 -
如果你选择暂停持续集成数据处理,你可以再次启动 Sidekiq:
# 对于运行 systemd 的系统 sudo systemctl start gitlab-sidekiq # 对于运行 SysV init 的系统 sudo service gitlab start
-
删除旧的流水线日志存储位置:
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 作为临时存储,并遵循以下流程:
- runner 从极狐GitLab 获取一个作业。
- runner 发送一段日志到极狐GitLab。
- 极狐GitLab 将数据附加到 Redis 的
Gitlab::Redis::TraceChunks
命名空间。 - 当 Redis 中的数据达到 128 KB 时,将数据刷新到持久存储。
- 上述步骤重复直到作业完成。
- 作业完成后,极狐GitLab 安排 Sidekiq 工作来存档日志。
- Sidekiq 工作将日志存档到对象存储并清理临时数据。
增量日志记录不支持 Redis 集群。
配置增量日志记录
在启用增量日志记录之前,必须为 CI/CD 产物、日志和构建配置对象存储。启用增量日志记录后,文件无法写入磁盘,并且没有保护措施来防止配置错误。
启用增量日志记录时,正在运行的作业的日志继续写入磁盘,但新作业使用增量日志记录。
关闭增量日志记录时,正在运行的作业继续使用增量日志记录,但新作业写入磁盘。
要配置增量日志记录: