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

获取Jenkins构建启动时间(支持未完成构建场景)

获取Jenkins构建启动时间的可行方案

当然有靠谱的解决方案!不管目标构建是还在运行,还是已经完成,我们都能通过两种常用路径拿到它的启动时间——要么直接在Jenkins服务器上跑脚本查询,要么通过Jenkins的REST API远程调用。下面给你拆解每种方法的具体操作:

方法一:在Jenkins服务器本地查询(适合有权限访问服务器的场景)

1. Groovy脚本(Jenkins原生支持,推荐)

Jenkins本身基于Groovy,用Groovy脚本可以直接访问Jenkins内部对象,准确性最高。你可以在Jenkins的脚本控制台(路径:Manage Jenkins -> Script Console)直接运行,或者写成脚本文件在服务器上执行。

示例代码:

def jobName = "你的构建名称"
def buildNumber = 123 // 替换成目标构建编号

try {
    def job = Jenkins.instance.getItemByFullName(jobName)
    if (!job) {
        println "找不到名为${jobName}的构建任务"
        return
    }
    def build = job.getBuildByNumber(buildNumber)
    if (!build) {
        println "构建任务${jobName}不存在编号为${buildNumber}的构建"
        return
    }
    // 获取启动时间(毫秒级时间戳)
    def startTimeMillis = build.getStartTimeInMillis()
    // 转换为可读时间格式
    def startTime = new Date(startTimeMillis)
    println "构建${jobName} #${buildNumber}的启动时间:"
    println "时间戳(毫秒):${startTimeMillis}"
    println "可读格式:${startTime}"
} catch (Exception e) {
    println "查询出错:${e.getMessage()}"
}

注意:不管构建是否完成,startTimeInMillis在构建启动时就会被Jenkins记录,所以正在运行的构建也能正常返回结果。

2. Shell脚本(适合Linux服务器,直接读取Jenkins存储文件)

如果服务器是Linux系统,你可以直接读取Jenkins存储构建数据的XML文件,从中提取启动时间。Jenkins的构建数据默认存在$JENKINS_HOME/jobs/目录下。

示例命令:

# 替换为你的实际值
JENKINS_HOME="/var/lib/jenkins"
JOB_NAME="你的构建名称"
BUILD_NUMBER=123

# 构建文件路径(如果是文件夹中的任务,路径为${JENKINS_HOME}/jobs/文件夹名称/jobs/${JOB_NAME}/builds/${BUILD_NUMBER}/build.xml)
BUILD_FILE="${JENKINS_HOME}/jobs/${JOB_NAME}/builds/${BUILD_NUMBER}/build.xml"

if [ -f "$BUILD_FILE" ]; then
    # 提取startTime字段(毫秒时间戳)
    START_TIME_MILLIS=$(grep -oP '<startTime>\K\d+' "$BUILD_FILE")
    # 转换为可读时间
    START_TIME=$(date -d "@$((START_TIME_MILLIS/1000))" "+%Y-%m-%d %H:%M:%S")
    echo "构建${JOB_NAME} #${BUILD_NUMBER}的启动时间:"
    echo "时间戳(毫秒):${START_TIME_MILLIS}"
    echo "可读格式:${START_TIME}"
else
    echo "找不到构建文件,请检查任务名称和构建编号是否正确"
fi

方法二:通过Jenkins REST API调用(适合远程访问或集成到其他系统)

Jenkins提供了完善的REST API,不管你在本地还是远程,只要能访问Jenkins服务,就能通过API获取构建信息,包括启动时间。

1. 基础API调用示例

API的基本路径为:http://你的Jenkins地址/job/<任务名称>/<构建编号>/api/json(如果是文件夹中的任务,路径为http://你的Jenkins地址/job/<文件夹名称>/job/<任务名称>/<构建编号>/api/json)。

你可以用curl结合jq(JSON处理工具)来提取启动时间:

# 替换为你的实际值
JENKINS_URL="http://jenkins.example.com"
JOB_NAME="你的构建名称"
BUILD_NUMBER=123
USERNAME="你的Jenkins用户名"
API_TOKEN="你的Jenkins API令牌" # 在用户设置中生成

# 调用API并提取timestamp字段(毫秒时间戳)
START_TIME_MILLIS=$(curl -s -u "${USERNAME}:${API_TOKEN}" "${JENKINS_URL}/job/${JOB_NAME}/${BUILD_NUMBER}/api/json" | jq '.timestamp')
# 转换为可读时间
START_TIME=$(date -d "@$((START_TIME_MILLIS/1000))" "+%Y-%m-%d %H:%M:%S")

echo "构建${JOB_NAME} #${BUILD_NUMBER}的启动时间:"
echo "时间戳(毫秒):${START_TIME_MILLIS}"
echo "可读格式:${START_TIME}"

注意:API返回的timestamp字段就是构建的启动时间戳(毫秒级),同样不管构建是否完成,这个字段都会存在。如果构建不存在,API会返回404状态码,你可以在脚本中添加状态码判断来处理这种情况。

2. 无jq的替代方案

如果服务器没有安装jq,可以用grep和sed来提取:

START_TIME_MILLIS=$(curl -s -u "${USERNAME}:${API_TOKEN}" "${JENKINS_URL}/job/${JOB_NAME}/${BUILD_NUMBER}/api/json" | grep -oP '"timestamp":\K\d+')

内容的提问来源于stack exchange,提问作者The Governor

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:58:46