You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jenkins任务自定义指标:如何获取Build任务各步骤与后置动作运行时长?

没问题,我来帮你搞定这两个需求——获取「Build」任务里每个Execute Shell和Post Build Action的运行时间,以及配置自定义指标。针对自由风格的Jenkins任务,具体方案如下:

一、获取各步骤的运行时间

1. 用插件自动拆分耗时(最省心)

推荐安装Build Duration Breakdown Plugin,它专门针对自由风格项目,能自动统计每个构建步骤(包括所有Execute Shell、Post Build Action)的具体运行时间,不需要手动修改脚本。安装完成后,构建结束页面会多出一个「Duration Breakdown」标签,里面清晰列出每个步骤的起止时间和耗时,直观又方便。

如果需要更精细的时间戳日志,搭配Timestamper Plugin使用——它会给日志的每一行加上精确到毫秒的时间戳,你可以直接在构建日志里定位每个Shell步骤或Post动作的开始/结束节点,手动计算或用日志工具提取耗时。

2. 手动给Execute Shell加时间统计脚本

要是不想依赖插件,也可以给每个Execute Shell步骤手动嵌入时间统计代码:

# 记录步骤开始时间(纳秒级)
start_time=$(date +%s%N)

# 这里写你的原有构建命令
echo "执行编译/打包任务..."

# 计算并输出耗时(转换为毫秒)
end_time=$(date +%s%N)
duration=$(( (end_time - start_time) / 1000000 ))
echo "当前Shell步骤耗时:${duration}ms"

这样每个Shell步骤的耗时会直接打印到构建日志里,随时可以查看。

3. 追踪Post Build Action的运行时间

对于系统自带的Post动作(比如发送邮件、归档产物),它们的运行时间会被Jenkins日志记录,结合Timestamper的时间戳就能轻松提取。如果是自定义的Post任务,建议先安装Post build task Plugin,给Post动作也加上类似的时间统计脚本,就能精准拿到耗时数据。

二、配置自定义指标

1. 用Metrics Plugin快速自定义

安装Metrics Plugin后,在任务配置页的「Metrics」板块可以直接添加自定义指标:

  • 比如添加gauge类型指标,记录每次构建中某个Shell步骤的耗时;
  • 或者添加counter类型指标,统计构建成功/失败的累计次数。
    你可以在Execute Shell步骤里通过脚本更新这些指标,比如调用插件提供的命令行工具,或者用Groovy脚本操作Metrics API(需要开启Jenkins脚本控制台权限)。

2. 结合Prometheus Plugin暴露监控指标

如果需要把指标同步到Prometheus这类监控系统,安装Prometheus Plugin:

  • 插件会自动暴露Jenkins基础指标,同时支持读取自定义指标文件;
  • 在Execute Shell或Post Build Action中,用脚本将自定义指标写入到指定文件(比如$WORKSPACE/custom_metrics.txt),示例代码如下:
echo "# HELP build_shell_step1_duration_ms 第一个Shell步骤的耗时" > $WORKSPACE/custom_metrics.txt
echo "# TYPE build_shell_step1_duration_ms gauge" >> $WORKSPACE/custom_metrics.txt
echo "build_shell_step1_duration_ms $duration" >> $WORKSPACE/custom_metrics.txt

然后在插件配置里指定这个文件的路径,插件就会把这些自定义指标加入到Prometheus的暴露端点中。

3. 用Groovy脚本自定义进阶指标(适合技术栈较深的场景)

在Post Build Action中添加「Execute system Groovy script」步骤,通过Jenkins API记录自定义指标,比如将步骤耗时作为构建参数保存:

def build = Thread.currentThread().executable
def stepDuration = 1234 // 替换为实际获取的步骤耗时(比如从日志提取或脚本计算)
build.addAction(new hudson.model.ParametersAction(
  new hudson.model.StringParameterValue("shell_step1_duration", stepDuration.toString())
))

这样每次构建的自定义指标会被持久化保存,方便后续查询、统计或对接其他系统。

内容的提问来源于stack exchange,提问作者Prasanth P

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 07:40:01