Jenkins为所有作业删除比最新20版本更早的版本

问题描述 投票:6回答:5

我正在清理Jenkins(它设置不正确),我需要删除比每个作业最新的20个版本更旧的版本。

有没有办法使用脚本或其他东西自动化?

我找到了许多解决方案来删除特定作业的某些构建,但我似乎无法一次找到所有作业的任何内容。

任何帮助深表感谢。

bash jenkins groovy jobs
5个回答
13
投票

您可以使用Jenkins Script Console迭代所有作业,获取最近N个列表并对其他作业执行某些操作。

import jenkins.model.Jenkins
import hudson.model.Job

MAX_BUILDS = 20

for (job in Jenkins.instance.items) {
  println job.name

  def recent = job.builds.limit(MAX_BUILDS)

  for (build in job.builds) {
    if (!recent.contains(build)) {
      println "Preparing to delete: " + build
      // build.delete()
    }
  }
}

Jenkins脚本控制台是一个很好的管理维护工具,并且通常有一个现有的脚本可以执行类似于您想要的操作。


2
投票

有很多方法可以做到这一点

我个人会在作业配置中使用'discard old builds'

如果你有很多工作,你可以使用CLI逐步完成所有工作来添加它

另外还有configuration slicing plugin,它也会为您大规模地做这件事


2
投票

对于Multibranch Pipelines,我稍微修改了Dave Bacher的脚本。使用此选项删除早于最新20版“master”分支的构建:

MAX_BUILDS = 20

for (job in Jenkins.instance.items) {
  if(job instanceof jenkins.branch.MultiBranchProject) {
    job = job.getJob("master")
    def recent = job.builds.limit(MAX_BUILDS)
    for (build in job.builds) {
      if (!recent.contains(build)) {
        println "Preparing to delete: " + build
        // build.delete()
      }
    }
  }
}

1
投票

这可以通过多种方式完成。您可以尝试以下方法

  1. 通过转到jenkins中的作业位置获取文本文件中的所有作业名称并运行以下命令

ls> jobs.txt

现在,您可以使用for循环编写shell脚本

#!/bin/bash
##read the jobs.txt
for i in 'cat <pathtojobs.txt>'
     do
curl -X POST http://jenkins-host.tld:8080/jenkins/job/$i/[1-9]*/doDeleteAll
     done

以上删除所有工作

你也可以refer here获得更多答案


1
投票

在运行@Dave Bacher的脚本时,我在文件夹插件6.6上遇到了问题No such property: builds for class: com.cloudbees.hudson.plugins.folder.Folder

改变它使用功能api

import jenkins.model.Jenkins
import hudson.model.Job

MAX_BUILDS = 5
Jenkins.instance.getAllItems(Job.class).each { job ->
  println job.name
  def recent = job.builds.limit(MAX_BUILDS)
  for (build in job.builds) {
    if (!recent.contains(build)) {
      println "Preparing to delete: " + build
      build.delete()
    }
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.