删除Jenkins中的构建历史记录

删除Jenkins中的构建历史记录,jenkins,groovy,Jenkins,Groovy,我正尝试使用以下答案中的说明从Jenkins中删除构建历史记录: 但是,我收到以下错误消息: groovy.lang.MissingMethodException:没有方法的签名: jenkins.branch.OrganizationFolder.getBuilds()适用于 参数类型:()值:[]可能的解决方案:GetView(), doBuild(jenkins.util.TimeDuration)、getUrl()、getClass(), getActions(),getApi()位于

我正尝试使用以下答案中的说明从Jenkins中删除构建历史记录:

但是,我收到以下错误消息:

groovy.lang.MissingMethodException:没有方法的签名: jenkins.branch.OrganizationFolder.getBuilds()适用于 参数类型:()值:[]可能的解决方案:GetView(), doBuild(jenkins.util.TimeDuration)、getUrl()、getClass(), getActions(),getApi()位于 org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:58) 在 org.codehaus.groovy.runtime.callsite.PojoMetaClassSite.call(PojoMetaClassSite.java:49) 在 org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48) 在 org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113) 在 org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:117)

如果我运行此脚本:

def jobName = "github-test"
def job = Jenkins.instance.getItem(jobName)
println(job)
我得到以下输出:

詹金斯,布兰奇。OrganizationFolder@134f3a3c[github测试]

我使用的是2.32.2版

下面是我运行的确切脚本:

def jobName = "github-test"
def job = Jenkins.instance.getItem(jobName)
job.getBuilds().each { it.delete() }
job.nextBuildNumber = 1
job.save()

您可以使用下面的脚本删除生成。您可以指定要保留的最新版本的数量,只需将您选择的值添加到MAX_builds。将其设为0即可删除所有内容

假设要删除的构建属于“github测试”。用您的选择替换jobName值

MAX_BUILDS = 5
def jobName = "github-test"
def job = Jenkins.instance.getItem(jobName)

println ""

println "selected Jenkins Job : "
println job.name

def recent = job.builds.limit(MAX_BUILDS)
println recent

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

您可以使用下面的脚本删除生成。您可以指定要保留的最新版本的数量,只需将您选择的值添加到MAX_builds。将其设为0即可删除所有内容

假设要删除的构建属于“github测试”。用您的选择替换jobName值

MAX_BUILDS = 5
def jobName = "github-test"
def job = Jenkins.instance.getItem(jobName)

println ""

println "selected Jenkins Job : "
println job.name

def recent = job.builds.limit(MAX_BUILDS)
println recent

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

您试图删除的作业,
github test
,是一个组织文件夹,例如,您得到的是
jenkins.branch.OrganizationFolder
。这意味着它不是具有实际构建的实际作业,而是包含其他作业的文件夹。值得注意的是,
OrganizationFolder
属于
ComputedFolder
类型,这意味着Jenkins在发现新的存储库和分支(在github上)时会自动填充它

因此,我猜您不想从您的
github测试
job/文件夹中的子作业中删除所有构建。我已经修改了链接答案,以便它可以用于文件夹:

import com.cloudbees.hudson.plugins.folder.AbstractFolder
import hudson.model.AbstractItem

// change this variable to match the name of the job whose builds you want to delete
def jobName = "test"
// Set to true in order to reset build number to 1
def resetBuildNumber = false

def removeBuilds(job, resetBuildNumber) {
  if (job instanceof AbstractFolder) {
    for (subJob in job.getItems()) {
      removeBuilds(subJob, resetBuildNumber)
    }
  } else if (job instanceof AbstractItem) {
    job.getBuilds().each { it.delete() }
    if (resetBuildNumber) {
      job.nextBuildNumber = 1
      job.save()
    }
  } else {
    throw new RuntimeException("Unsupported job type ${job.getClass().getName()}!")
  }
}
removeBuilds(Jenkins.instance.getItem(jobName), resetBuildNumber)

您试图删除的作业,
github test
,是一个组织文件夹,例如,您得到的是
jenkins.branch.OrganizationFolder
。这意味着它不是具有实际构建的实际作业,而是包含其他作业的文件夹。值得注意的是,
OrganizationFolder
属于
ComputedFolder
类型,这意味着Jenkins在发现新的存储库和分支(在github上)时会自动填充它

因此,我猜您不想从您的
github测试
job/文件夹中的子作业中删除所有构建。我已经修改了链接答案,以便它可以用于文件夹:

import com.cloudbees.hudson.plugins.folder.AbstractFolder
import hudson.model.AbstractItem

// change this variable to match the name of the job whose builds you want to delete
def jobName = "test"
// Set to true in order to reset build number to 1
def resetBuildNumber = false

def removeBuilds(job, resetBuildNumber) {
  if (job instanceof AbstractFolder) {
    for (subJob in job.getItems()) {
      removeBuilds(subJob, resetBuildNumber)
    }
  } else if (job instanceof AbstractItem) {
    job.getBuilds().each { it.delete() }
    if (resetBuildNumber) {
      job.nextBuildNumber = 1
      job.save()
    }
  } else {
    throw new RuntimeException("Unsupported job type ${job.getClass().getName()}!")
  }
}
removeBuilds(Jenkins.instance.getItem(jobName), resetBuildNumber)

你用的是什么版本的詹金斯?你有链接答案中提供的确切脚本吗?问题是什么?你使用的是什么版本的jenkins?你有链接答案中提供的确切脚本吗?问题是什么?如果我有多份工作,我应该如何删除它们。例如:def jobs=[“World-2.6.0.6”,“Hello-1.7.0”]将作业列表添加到数组中,在for循环中迭代该数组,并重用在for循环中删除生成的其他部分。如果我有多个作业,我应该如何删除它们。例如:def jobs=[“World-2.6.0.6”,“Hello-1.7.0”]将作业列表添加到数组中,在for循环中迭代该数组,并重用在for循环中删除生成的其他部分。