返回文章列表
CI/CD | 2024-02-29

极狐GitLab 多行命令的 CI 日志管理体验的改进

极狐GitLab

GitLab CI 是业界常用的 CI 工具,用来落地实践 DevOps。而极狐GitLab 作为 GitLab 在国内的发行版,也是一个一体化的 DevOps 平台,CI/CD 功能是内置的。通常情况下,用户将 CI 作业中需要执行的命令写在 script关键字下面,执行流水线之后,会在日志输出界面看到相应命令的执行情况,这些详细的日志信息便于 DevOps 或者研发人员查看 CI 作业的执行情况,尤其在遇到问题的情况下这些日志就能够用来故障的查找了。

 

在 script块中,多行命令的执行往往是家常便饭。但是日志的输出体验往往不是很多。现在,查看多行命令的 CI 作业的日志输出要比之前容易多了。下面的内容会解释我们是怎么做到这些的。

 

改善极狐GitLab 多行命令作业的 CI/CD 日志体验已经是一个存在了很长时间的功能请求了。在最新版本的极狐GitLab 和极狐GitLab Runner 中,对于具有多行命令作业的日志部分体验比之前好了很多。此文章,我们将描述此新功能带来的体验,并展示如何在流水线中开启新的日志输出,讨论有关 CI/CD 脚本执行和各种 Shell(例如 Bash 和 PowerShell)中日志输出的要点。

 

多行命令概览

 

首先,明白我们通常所说的具有多行命令的 CI 作业到底意味着什么是非常重要的。在极狐GitLab CI 中, script关键字被指定用来在 CI 作业中执行特定的命令。例如在下面的示例中,build-job有一个简单的命令,是一个基本的输出命令:

 

## A pipeline with a single line command in the script block for the build-job

build-job:
  stage: build
  script:
    - echo "this is the script to run for the build job"

 

如果执行此流水线,UI 界面中的日志输出如下图所示:第 17 行 - 极狐GitLab CI 会自动生成一个执行命令的日志条目。第 18 行 — 就是被执行命令的最终执行结果。

 

 

现在,如你所想象的,CI 作业的脚本块中展示的脚本内容要比上面的复杂的多,是多行命令。

 

## A pipeline with a multi-line command in the script block for the build-job

build-job:
  stage: build
  script:
       - |
         echo "this is a multi-line command"  # a simple echo statement
         ls  

 

如果执行此流水线,UI 界面上的日志输出如下图:

 

第 17 行—— 在之前的例子中,极狐GitLab 会为脚本块中指定的命令行自动生成一个日志条目。你可能注意到了,第 17 行只包含脚本块中的第一行命令。这就让问题的调试变得困难了很多,因为你需要回到原始的流水线文件来看脚本到底在执行什么命令。

 

 

新特性是什么呢?

 

自极狐GitLab & 极狐GitLab Runner 16.7 始,你可以打开功能开关 FF_SCRIPT_SECTIONS,此开关可以将多行日志脚本块的 CI 作业日志进行一个折叠。此功能开关改变了在 Bash shell 中 CI 作业的日志输出方式。

 

 

第 17 行:和之前的例子有所不同的是,可以从截图看出,默认情况下多行命令的日志输出被折叠了起来。

 

单行命令不会显示在可折叠的元素中。

 

对于多行脚本中的多行命令来说,现在变成了折叠元素,因此,但你打开折叠的第 17 行时,日志就会详细展示脚本块中所有的执行命令。

 

 

这也就是所说的 定制化折叠部分功能,此功能和全新的多行日志输出能力一起使用,能够给用户提供额外的灵活性,用来在 UI 上看 CI 作业日志输出。下面这个例子就能很好的展示这两个特性:

 

## A pipeline with a multi-line command in the script block for the build-job

variables:
  FF_PRINT_POD_EVENTS: "true"
  FF_USE_POWERSHELL_PATH_RESOLVER: "true"
  FF_SCRIPT_SECTIONS: "true"

collapsible_job_multiple:
  stage: build
  script:
    - |
      echo "{
        'test': 'data',
        'test2': 'data2',
      }"
    - |
      echo "{
        'test': 'data',
        'test2': 'data2',
      }"
    - echo -e "\033[0Ksection_start:`date +%s`:my_first_section\r\033[0KHeader of the 1st collapsible section"
    - echo 'this line should be hidden when collapsed'
    - |
      echo "{
        'test': 'data',
        'test2': 'data2',
      }"
    - echo -e "\033[0Ksection_start:`date +%s`:second_section\r\033[0KHeader of the 2nd collapsible section"
    - echo 'this line should be hidden when collapsed'
    - echo -e "\033[0Ksection_end:`date +%s`:second_section\r\033[0K"
    - echo -e "\033[0Ksection_end:`date +%s`:my_first_section\r\033[0K"

 

如果 FF_SCRIPT_SECTIONS设置为 false,然后执行此流水线,日志输出如下所示:

 

 

但是如果把 FF_SCRIPT_SECTIONS设置为 true,然后执行流水线,日志输入就变成下面这样了:

 

 

其他 shell 是怎样的呢?

 

在 16.7 中,将 CI 作业中多行命令的日志输出进行折叠仅仅对在 Bash Shell 中执行的 CI/CD 作业可见。当前还不支持在 PowerShell 中执行的 CI/CD 作业。将来的版本中可能会新增此功能。

 

极狐GitLab 一体化DevOps平台 专为中国用户研发,免费试用60天专业版高级功能
售前咨询
联系电话
在线支持
预约演示