CI/CD 作业日志
- Tier: Free, Premium, Ultimate
- Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
作业日志显示 CI/CD 作业 的完整执行历史。
查看作业日志
要查看作业日志:
- 选择要查看作业日志的项目。
- 在左侧边栏,选择 CI/CD > Pipelines。
- 选择要检查的流水线。
- 在流水线视图中,在作业列表中,选择一个作业以查看作业日志页面。
要查看作业及其日志输出的详细信息,请滚动浏览作业日志页面。
全屏模式查看作业日志
你可以通过点击 显示全屏 来全屏查看作业日志内容。
要使用全屏模式,你的网页浏览器也必须支持它。如果你的网页浏览器不支持全屏模式,则该选项不可用。
展开/折叠作业日志部分
作业日志被分为可以折叠或展开的部分。每个部分都会显示持续时间。
在以下示例中:
- 三个部分已被折叠,可以展开。
- 三个部分已展开,可以折叠。
自定义可折叠部分
你可以通过手动输出 GitLab 用于分隔可折叠部分的特殊代码,在作业日志中创建 可折叠部分:
- 部分开始标记:
\e[0Ksection_start:UNIX_TIMESTAMP:SECTION_NAME\r\e[0K+TEXT_OF_SECTION_HEADER - 部分结束标记:
\e[0Ksection_end:UNIX_TIMESTAMP:SECTION_NAME\r\e[0K
你必须将这些代码添加到 CI 配置的 script 部分。例如,使用 echo:
job1:
script:
- echo -e "\e[0Ksection_start:`date +%s`:my_first_section\r\e[0KHeader of the 1st collapsible section"
- echo 'this line should be hidden when collapsed'
- echo -e "\e[0Ksection_end:`date +%s`:my_first_section\r\e[0K"转义语法可能因你的 runner 使用的 shell 而异。例如,如果使用 Zsh,你可能需要用 \e 或 \r 转义特殊字符。
在上面的示例中:
date +%s:生成 Unix 时间戳的命令(例如1560896352)。my_first_section:给部分指定的名称。名称只能由字母、数字以及_、.或-字符组成。\r\e[0K:转义序列,防止部分标记在呈现(着色)的作业日志中显示。它们在查看原始作业日志时会显示,通过在作业日志右上角选择 显示完整原始( )访问。\r:回车(将光标返回到行首)。\e[0K:ANSI 转义码,用于从光标位置清除到行尾。 (单独使用\e[K不起作用;必须包含0)。
示例原始作业日志:
\e[0Ksection_start:1560896352:my_first_section\r\e[0KHeader of the 1st collapsible section
this line should be hidden when collapsed
\e[0Ksection_end:1560896353:my_first_section\r\e[0K示例作业控制台日志:
使用脚本改进可折叠部分的显示
要从作业输出中移除创建部分标记的 echo 语句,你可以将作业内容移动到脚本文件中,然后从作业中调用它:
-
创建一个可以处理部分标题的脚本。例如:
# 用于开始部分的功能 function section_start () { local section_title="${1}" local section_description="${2:-$section_title}" echo -e "section_start:`date +%s`:${section_title}[collapsed=true]\r\e[0K${section_description}" } # 用于结束部分的功能 function section_end () { local section_title="${1}" echo -e "section_end:`date +%s`:${section_title}\r\e[0K" } # 创建部分 section_start "my_first_section" "Header of the 1st collapsible section" echo "this line should be hidden when collapsed" section_end "my_first_section" # 根据需要重复 -
将脚本添加到
.gitlab-ci.yml文件中:job: script: - source script.sh
预折叠部分
你可以通过在部分开始处添加 collapsed 选项,使作业日志自动折叠可折叠部分。在部分名称后和 \r 前添加 [collapsed=true]。部分结束标记保持不变:
- 带有
[collapsed=true]的部分开始标记:\e[0Ksection_start:UNIX_TIMESTAMP:SECTION_NAME[collapsed=true]\r\e[0K+TEXT_OF_SECTION_HEADER - 部分结束标记(不变):
\e[0Ksection_end:UNIX_TIMESTAMP:SECTION_NAME\r\e[0K
将更新后的部分开始文本添加到 CI 配置中。例如,使用 echo:
job1:
script:
- echo -e "\e[0Ksection_start:`date +%s`:my_first_section[collapsed=true]\r\e[0KHeader of the 1st collapsible section"
- echo 'this line should be hidden automatically after loading the job log'
- echo -e "\e[0Ksection_end:`date +%s`:my_first_section\r\e[0K"删除作业日志
当你删除作业日志时,也会 擦除整个作业。
有关更多详细信息,请参阅 删除作业日志。
作业日志时间戳
- Tier: Free, Premium, Ultimate
- Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
你可以为 CI/CD 作业日志中的每一行生成一个 ISO 8601 格式 的时间戳。通过作业日志时间戳,你可以识别作业中特定部分的持续时间。默认情况下,作业日志不包含每条日志行的时间戳。
启用时间戳后,作业日志会使用大约 10% 的额外存储空间。
先决条件:
- 你必须使用 GitLab Runner 17.0 或更高版本。
要在作业日志中启用时间戳,向你的流水线添加一个 FF_TIMESTAMPS CI/CD 变量,并将其设置为 true。
例如,将变量添加到你的 .gitlab-ci.yml 文件:
variables:
FF_TIMESTAMPS: true
job:
script:
- echo "This job's log has ISO 8601 timestamps!"以下是启用 FF_TIMESTAMPS 的示例日志输出:
要对此功能提供反馈,请在 问题 463391 上发表评论。
故障排除
作业日志更新缓慢
当你访问正在运行作业的作业日志页面时,日志更新可能会有长达 60 秒的延迟。默认刷新时间为 60 秒,但在 UI 中查看日志一次后,日志更新应每 3 秒发生一次。
GitLab 18.0 或更高版本中的错误:This job does not have a trace
将 GitLab 自托管实例升级到 18.0 或更高版本后,你可能会看到 This job does not have a trace 错误。这可能是由于升级迁移失败导致的,该实例同时具有:
- 启用了对象存储
- 之前已启用增量日志记录,使用了已移除的功能标志
ci_enable_live_trace。 此功能标志在 GitLab 环境工具包或 Helm Chart 部署中默认启用,但也可能手动启用。
要恢复查看受影响作业日志的能力,重新启用增量日志记录