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

时间:2016-02-24 18:23:51

标签: bash jenkins groovy jobs

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

有没有办法使用脚本或其他东西自动执行此操作?

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

非常感谢任何帮助。

6 个答案:

答案 0 :(得分: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脚本控制台是一个很好的管理维护工具,通常是现有的脚本,可以执行类似于您想要的操作。

答案 1 :(得分:2)

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

就个人而言,我会使用'丢弃旧版本'在作业配置

如果您有大量工作,可以使用CLI逐步完成所有工作添加

或者,configuration slicing plugin也可以大规模地为您执行此操作

答案 2 :(得分: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()
      }
    }
  }
}

答案 3 :(得分:1)

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

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

    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获取更多答案

答案 4 :(得分:1)

在运行@Dave Bacher的脚本时,我在Folders Plugin 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()
    }
  }
}

答案 5 :(得分:0)

我在Jenkins实例上运行建议时遇到问题。可能是因为它已被docker化。无论如何,事先使用基础bash解释器删除文件夹即可解决此问题。我还修改了脚本以保留180天的构建日志,并至少保留7个构建日志:

attempted relative import with no known parent package