如何批量为Jenkins非声明式任务配置Discard Build策略?
批量配置Jenkins任务构建丢弃策略及全局配置疑问
一、批量启用Discard Build策略的脚本方案
你之前尝试的脚本仅用于删除指定范围的历史构建,并非配置自动构建丢弃策略,所以无法实现需求。针对Jenkins 2.332.2版本,推荐使用Jenkins内置的**脚本控制台(Script Console)**执行Groovy脚本批量配置,比Bash脚本更直接可靠:
批量配置脚本(Groovy)
// 配置参数:最大保留构建数 def maxBuildsToKeep = 6 // 是否仅处理非Declarative Pipeline任务(根据需求设置) def filterNonPipelineJobs = true // 遍历所有Jenkins任务 Jenkins.instance.getAllItems(AbstractProject.class).each { job -> // 过滤非Pipeline任务(如果开启过滤) if (filterNonPipelineJobs && job instanceof org.jenkinsci.plugins.workflow.job.WorkflowJob) { return // 跳过Pipeline任务 } // 构建丢弃策略配置 def discardOldBuilds = new hudson.tasks.LogRotator( maxBuildsToKeep, // 最大保留构建数 -1, // 最大保留天数(-1表示不限制) -1, // 最大保留日志天数(-1表示不限制) -1 // 最大保留日志个数(-1表示不限制) ) // 应用策略 job.setLogRotator(discardOldBuilds) job.save() println "已为任务 [${job.fullName}] 配置构建丢弃策略:保留最多 ${maxBuildsToKeep} 个构建" }
使用说明
- 进入Jenkins后台 → Manage Jenkins → Script Console
- 将上述脚本粘贴到输入框,按需修改
maxBuildsToKeep和filterNonPipelineJobs参数 - 点击Run执行,执行后会输出每个已配置的任务名称
如果坚持要用Bash脚本,可通过jenkins-cli工具调用脚本控制台,示例Bash命令:
# 前提是已配置jenkins-cli并完成认证 java -jar jenkins-cli.jar -s http://your-jenkins-url/ groovy = << EOF # 粘贴上述Groovy脚本内容 EOF
二、全局构建丢弃器的生效逻辑
在「Manage Jenkins - Configuration - Global Build Discarders」中启用的全局策略,并非对所有任务强制生效,具体规则如下:
- 若任务未单独配置构建丢弃策略,会自动继承全局配置
- 若任务已单独配置过构建丢弃策略,全局配置会被任务自身的配置覆盖
如果你的100个任务之前都没有配置过丢弃策略,启用全局配置后会自动生效;但如果部分任务已有自定义策略,全局配置不会覆盖它们。若要确保所有目标任务统一使用「保留6个构建」的策略,建议使用上述批量脚本直接配置任务自身的策略。
内容的提问来源于stack exchange,提问作者Wiki
相关产品推荐
相关产品推荐

