如何在Gitlab CI任务日志中为自定义脚本显示运行时间
GitLab CI 自定义脚本命令显示运行时间的方法
可以直接调用GitLab CI自带的能力实现,也可以通过自定义脚本配置实现,两种方案如下:
方案1:复用GitLab原生区段特性(最贴合需求)
GitLab CI内置的可折叠区段特性,会自动统计每个区段的运行时长,展示效果和系统预置命令完全一致,仅需在自定义脚本前后添加对应的标记即可:
- 区段开始标记:
echo -e "\e[0Ksection_start:$(date +%s):自定义区段ID\r\e[0K区段展示名称" - 区段结束标记:
echo -e "\e[0Ksection_end:$(date +%s):自定义区段ID\r\e[0K"
使用示例:
job: script: # 打包区段开始 - echo -e "\e[0Ksection_start:$(date +%s):build_pkg\r\e[0K执行项目打包" - yarn install - yarn build - tar -zcvf dist.tar.gz dist/ # 打包区段结束 - echo -e "\e[0Ksection_end:$(date +%s):build_pkg\r\e[0K" # 部署区段开始 - echo -e "\e[0Ksection_start:$(date +%s):deploy\r\e[0K部署到测试环境" - scp dist.tar.gz root@test:/opt/project/ - ssh root@test "cd /opt/project && tar -xf dist.tar.gz" # 部署区段结束 - echo -e "\e[0Ksection_end:$(date +%s):deploy\r\e[0K"
该方案优势:
- 完全复用GitLab原生能力,无需额外配置
- 运行时长展示位置、样式和系统预置命令完全一致
- 支持区段折叠展开,日志可读性更高
方案2:自定义每行命令的时间前缀
如果需要给每一行自定义命令都添加时间标记,可以通过修改shell的提示符配置实现,还可以自定义显示距离任务启动的时间差:
job: script: # 记录任务启动时间戳 - export CI_JOB_START_AT=$(date +%s) # 配置命令执行前缀:显示距离任务启动的秒数+当前时间 - export PS4='+ \033[32m[$(( $(date +%s) - $CI_JOB_START_AT ))s $(date +%H:%M:%S)]\033[0m ' # 开启命令追踪,每执行一行命令都会打印前缀 - set -x # 后面接你的自定义脚本 - echo "开始执行任务" - sleep 3 - echo "任务执行完成"
该方案优势:
- 每行命令都有独立的时间标记,适合排查慢执行命令
- 时间格式、颜色可以完全自定义,适配不同的日志阅读需求
内容的提问来源于stack exchange,提问作者miile7
相关产品推荐
相关产品推荐

