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

如何通过Jenkins API筛选带指定参数的正在构建任务(Bash脚本场景)

解决Jenkins API获取指定参数的正在运行任务问题

嘿,我帮你梳理下问题所在,然后给你可行的解决方案!

首先,你之前的API请求有两个核心问题:

  • 你调用的是computer端点,但XPath却试图从/hudson/job节点查询,这完全不匹配——computer端点返回的是Jenkins节点和执行器的结构,根节点下是computer列表,不是job列表。
  • 你的tree参数没有包含任务的actions/parameters数据,就算路径对了,也拿不到参数信息,根本没法过滤。

下面是具体的解决步骤和脚本示例:

1. 修正API请求,获取带参数的运行中任务

首先要调整API的tree参数,确保能拿到每个运行中任务的参数信息:

curl -s "https://jenkins.{company}.com/computer/api/xml?tree=computer[executors[currentExecutable[actions[parameters[name,value]],name,url]],oneOffExecutors[currentExecutable[actions[parameters[name,value]],name,url]]]"

这个请求会返回所有Jenkins节点上,普通执行器和临时执行器中正在运行的任务,包含任务名、URL,以及任务的参数列表(name和value)。

2. 在Bash中过滤指定参数的任务

我们可以用xmlstarlet(一个轻量的XML处理工具)来过滤XML数据,筛选出TAG参数值为web-2773的任务。

完整Bash脚本示例

#!/bin/bash

# 配置你的Jenkins地址和目标TAG
JENKINS_BASE_URL="https://jenkins.{company}.com"
TARGET_TAG_VALUE="web-2773"

# 如果Jenkins需要认证,取消下面的注释并替换为你的账号和API Token
# AUTH="-u your_jenkins_username:your_api_token"

# 获取运行中任务的XML数据
RUNNING_JOBS_XML=$(curl -s $AUTH "${JENKINS_BASE_URL}/computer/api/xml?tree=computer[executors[currentExecutable[actions[parameters[name,value]],name,url]],oneOffExecutors[currentExecutable[actions[parameters[name,value]],name,url]]]")

# 过滤并输出符合条件的任务
echo "$RUNNING_JOBS_XML" | xmlstarlet sel -t \
  -m "//currentExecutable[actions/parameters[name='TAG' and value='${TARGET_TAG_VALUE}']]" \
  -v "name" -o " | 任务地址: " -v "url" -n

没有xmlstarlet?用xmllint替代

如果你的系统没有安装xmlstarlet,也可以用xmllint(大部分Linux系统默认自带),不过输出需要简单格式化:

# 提取符合条件的任务名和URL
RESULTS=$(echo "$RUNNING_JOBS_XML" | xmllint --xpath "//currentExecutable[actions/parameters[name='TAG' and value='${TARGET_TAG_VALUE}']]/name/text() | //currentExecutable[actions/parameters[name='TAG' and value='${TARGET_TAG_VALUE}']]/url/text()" -)

# 格式化输出(每两行一组:任务名+URL)
echo "$RESULTS" | paste - - | awk '{print $1 " | 任务地址: " $2}'

关键说明

  • 为什么用computer端点?因为它能覆盖所有Jenkins节点(包括主节点和代理节点)上的所有运行中任务,不管是普通执行器还是临时执行器的任务都能拿到。
  • 认证问题:如果你的Jenkins开启了权限验证,一定要在curl命令中加上-u 用户名:API_TOKEN,API Token可以在Jenkins个人设置中生成。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:27:53