极狐GitLab 是 GitLab 在中国的发行版,专门面向中国程序员和企业提供企业级一体化 DevOps 平台,用来帮助用户实现需求管理、源代码托管、CI/CD、安全合规,而且所有的操作都是在一个平台上进行,省事省心省钱。可以一键安装极狐GitLab,详情可以参考极狐GitLab 下载安装官网。
GitLab 中文版学习资料
- 驭码CodeRider 官网:https://coderider.gitlab.cn/
- GitLab 中文版官网:https://gitlab.cn
- GitLab 中文文档:https://docs.gitlab.cn
- GitLab 中文下载安装:https://gitlab.cn/install
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 作业。将来的版本中可能会新增此功能。