Help us learn about your current experience with the documentation. Take the survey.

CI/CD 作业日志

  • Tier: Free, Premium, Ultimate
  • Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated

作业日志显示 CI/CD 作业 的完整执行历史。

查看作业日志

要查看作业日志:

  1. 选择要查看作业日志的项目。
  2. 在左侧边栏,选择 CI/CD > Pipelines
  3. 选择要检查的流水线。
  4. 在流水线视图中,在作业列表中,选择一个作业以查看作业日志页面。

要查看作业及其日志输出的详细信息,请滚动浏览作业日志页面。

全屏模式查看作业日志

你可以通过点击 显示全屏 来全屏查看作业日志内容。

要使用全屏模式,你的网页浏览器也必须支持它。如果你的网页浏览器不支持全屏模式,则该选项不可用。

展开/折叠作业日志部分

作业日志被分为可以折叠或展开的部分。每个部分都会显示持续时间。

在以下示例中:

  • 三个部分已被折叠,可以展开。
  • 三个部分已展开,可以折叠。

带有可展开和可折叠部分的作业日志

自定义可折叠部分

你可以通过手动输出 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:转义序列,防止部分标记在呈现(着色)的作业日志中显示。它们在查看原始作业日志时会显示,通过在作业日志右上角选择 显示完整原始 doc-text )访问。
    • \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 语句,你可以将作业内容移动到脚本文件中,然后从作业中调用它:

  1. 创建一个可以处理部分标题的脚本。例如:

    # 用于开始部分的功能
    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"
    
    # 根据需要重复
  2. 将脚本添加到 .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 的示例日志输出:

显示每行 UTC 时间戳的作业日志

要对此功能提供反馈,请在 问题 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 部署中默认启用,但也可能手动启用。

要恢复查看受影响作业日志的能力,重新启用增量日志记录