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

如何通过Jenkins.instance.queue.items区分构建与仓库扫描任务

解决Jenkins仓库扫描耗尽API限额的问题

问题背景

我们遇到仓库扫描耗尽API限额的问题,计划修改JobDSL种子任务,使其运行后终止大量仓库扫描。目前已采用Webhooks,除触发日志轮转外,扫描并无必要。但通过Jenkins.instance.queue.items获取任务队列后,无法区分构建任务与仓库扫描任务,当前队列能识别的任务类型包括:

  • org.jenkinsci.plugins.workflow.job.WorkflowJob
  • org.jenkinsci.plugins.workflow.support.steps.ExecutorStepExecution$PlaceholderTask
    尚未找到仓库扫描任务对应的类型。

解决方案步骤

1. 定位仓库扫描任务的真实类型

在Jenkins脚本控制台执行以下Groovy脚本,遍历队列任务并打印完整类型信息,从中找出扫描任务的类名:

Jenkins.instance.queue.items.each { task ->
    println "任务名称: ${task.name}, 完整类型: ${task.class.name}"
}

常见的仓库扫描任务类名类似org.jenkinsci.plugins.github_branch_source.GitHubSCMSource$ScanTask(根据你使用的SCM插件不同会有差异)。

2. 在JobDSL种子任务中添加终止扫描任务的逻辑

将找到的扫描任务类名替换到以下代码中,加入JobDSL脚本里:

// 替换为实际找到的扫描任务类名
def scanTaskClass = Class.forName("org.jenkinsci.plugins.github_branch_source.GitHubSCMSource\$ScanTask")

Jenkins.instance.queue.items.each { task ->
    // 判断任务类型为扫描任务,且排除日志轮转相关任务
    if (task.class == scanTaskClass && !task.name.contains("日志轮转")) {
        Jenkins.instance.queue.cancel(task)
        println "已终止扫描任务: ${task.name}"
    }
}

根据日志轮转任务的名称特征,调整!task.name.contains("日志轮转")这一判断条件,确保保留必要的扫描任务。

3. 验证效果

运行修改后的JobDSL种子任务,查看Jenkins队列确认无关扫描任务已被终止,同时监控API限额的使用情况,确认问题得到缓解。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 18:23:11