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

如何通过Jenkins API筛选定时触发的夜间构建并实现失败重触发?

解决Jenkins定时器构建筛选与重触发问题

1. 用Jenkins REST API结合jq筛选目标构建

直接访问job页面没法精准过滤构建,我们得借助Jenkins的JSON API拉取构建元数据,再用jq工具筛选出定时器触发且在夜间时间范围内的最新构建。

先计算时间范围(比如取最近24小时,覆盖夜间构建窗口),再调用API做过滤:

# 计算24小时前的毫秒时间戳(Jenkins API用毫秒级时间戳)
START_TIMESTAMP=$(( $(date +%s) - 86400 ))000

# 获取符合条件的构建列表,仅保留核心字段
filtered_builds=$(curl --insecure --user test:test 'https://jenkins.domain.com/job/leaves/job/tenant/job/develop/api/json?tree=builds[number,status,timestamp,triggerInfo]' | \
jq --arg start_ts "$START_TIMESTAMP" '.builds[] | select(.timestamp >= $start_ts) | select(.triggerInfo | has("timer"))')

# 提取最新构建(Jenkins返回的builds默认按时间倒序排列,直接取第一个)
latest_timer_build=$(echo "$filtered_builds" | jq '.[0]')
build_number=$(echo "$latest_timer_build" | jq -r '.number')
build_status=$(echo "$latest_timer_build" | jq -r '.status')

2. 检查状态并执行重触发

如果筛选到的最新构建状态是FAILURE,就调用Jenkins的rebuild API触发重跑:

if [ "$build_status" = "FAILURE" ]; then
  echo "构建#${build_number}失败,开始重触发..."
  curl --insecure --user test:test -X POST "https://jenkins.domain.com/job/leaves/job/tenant/job/develop/${build_number}/rebuild"
  echo "重触发请求已发送"
else
  echo "最新定时器构建#${build_number}状态为${build_status},无需操作"
fi

3. 整合为定时脚本并部署

把上面的代码保存为jenkins_night_build_check.sh,给它加执行权限:

chmod +x jenkins_night_build_check.sh

再用cron设置每日定时运行(比如早上8点检查夜间构建结果):

# 编辑cron任务
crontab -e
# 添加以下行(替换脚本路径和日志路径)
0 8 * * * /path/to/jenkins_night_build_check.sh >> /var/log/jenkins_build_check.log 2>&1

额外注意事项

  • 确保服务器上已安装jq工具(Debian/Ubuntu用apt install jq,macOS用brew install jq)
  • 验证Jenkins用户test拥有读取构建信息和触发构建的权限(在Jenkins全局安全配置中配置)
  • 如果夜间构建有固定时间窗口(比如每晚20:00到次日6:00),可以调整START_TIMESTAMP的计算逻辑,精准匹配这个时间段

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 18:52:32