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

极狐GitLab 是 GitLab 在中国的发行版,专门面向中国程序员和企业提供企业级一体化 DevOps 平台,用来帮助用户实现需求管理、源代码托管、CI/CD、安全合规,而且所有的操作都是在一个平台上进行,省事省心省钱。可以一键安装极狐GitLab,详情可以参考极狐GitLab 下载安装官网

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 作业。将来的版本中可能会新增此功能。

相关推荐
厨 神3 分钟前
vmware中的ubuntu系统扩容分区
linux·运维·ubuntu
Karoku0668 分钟前
【网站架构部署与优化】web服务与http协议
linux·运维·服务器·数据库·http·架构
geek_Chen0110 分钟前
虚拟机共享文件夹开启后mnt/hgfs/下无sharefiles? --已解决
linux·运维·服务器
(⊙o⊙)~哦41 分钟前
linux 解压缩
linux·运维·服务器
牧小七2 小时前
Linux命令---查看端口是否被占用
linux
鸡鸭扣3 小时前
虚拟机:3、(待更)WSL2安装Ubuntu系统+实现GPU直通
linux·运维·ubuntu
友友马3 小时前
『 Linux 』HTTP(一)
linux·运维·服务器·网络·c++·tcp/ip·http
记得开心一点嘛4 小时前
在Linux系统上使用Docker部署javaweb项目
linux·运维·docker
Tak1Na5 小时前
2024.9.18
linux·运维·服务器
Yana.nice5 小时前
linux中将文本转为unix格式
linux