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

如何在Jenkins Maven自由风格项目的构建后邮件中显示构建时长?

解决Jenkins自由风格项目邮件中添加构建耗时的方案

以下是几种可靠的实现方式,可根据你的环境选择:

方案1:通过Groovy脚本注入构建耗时变量(推荐)

利用Jenkins的Groovy脚本直接从构建对象中获取准确的耗时,注入为环境变量后在邮件中引用:

  1. 在自由风格项目的构建后操作中添加「Execute system Groovy script」(若没有该选项,需安装Groovy插件)
  2. 填入以下脚本:
def build = Thread.currentThread().executable
def durationMillis = build.duration
def minutes = (durationMillis / 60000) as Integer
def seconds = ((durationMillis % 60000) / 1000) as Integer
def durationStr = "${minutes}分${seconds}秒"

// 将变量注入构建环境,供邮件通知使用
build.envVars.put("BUILD_DURATION", durationStr)
  1. 在邮件通知的内容中直接引用${BUILD_DURATION}即可,比如在Extended Email插件的邮件正文里插入这个变量。

方案2:修改Jenkins邮件模板(全局生效)

若你有权限修改Jenkins服务器的邮件模板,可直接在模板中添加耗时计算逻辑,所有使用该模板的项目都会自动带上耗时:

  1. 找到Jenkins的邮件模板目录(通常为$JENKINS_HOME/email-templates)
  2. 编辑目标模板文件(如html.jelly或text.jelly),插入以下代码:
<j:set var="durationMillis" value="${build.duration}" />
<j:set var="minutes" value="${durationMillis / 60000}" />
<j:set var="seconds" value="${(durationMillis % 60000) / 1000}" />
<p>构建耗时:${(minutes as int)}分${(seconds as int)}秒</p>
  1. 保存后,后续所有构建的邮件通知都会自动包含这段耗时信息。

方案3:修复Shell脚本的不一致问题

如果偏好使用Shell脚本,可通过记录构建前后时间戳的方式计算准确耗时,避免之前的结果不一致问题:

  1. 在构建前步骤添加Shell脚本,记录开始时间:
echo "BUILD_START=$(date +%s)" > "${WORKSPACE}/build_timestamp.txt"
  1. 在构建后步骤添加Shell脚本,计算并输出耗时:
source "${WORKSPACE}/build_timestamp.txt"
BUILD_END=$(date +%s)
DURATION=$((BUILD_END - BUILD_START))
MINUTES=$((DURATION / 60))
SECONDS=$((DURATION % 60))
echo "BUILD_DURATION=${MINUTES}分${SECONDS}秒" > "${WORKSPACE}/build_duration.txt"
  1. 在邮件通知中,可通过读取文件内容引用耗时:$(cat "${WORKSPACE}/build_duration.txt"),或使用EnvInject插件将文件中的变量注入到构建环境。

各方案对比

  • 方案1:最可靠,直接从Jenkins内部获取构建时长,无外部依赖,适合单项目配置
  • 方案2:全局生效,一次配置所有项目受益,但需要服务器修改权限
  • 方案3:无需额外插件,但需确保构建前后的Shell步骤在同一节点执行,且服务器时间同步正常

内容的提问来源于stack exchange,提问作者Yashwanth Subramanian

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 16:04:56