删除Jenkins中的构建历史记录
我正尝试使用以下答案中的说明从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) 如果我运行此脚本:删除Jenkins中的构建历史记录,jenkins,groovy,Jenkins,Groovy,我正尝试使用以下答案中的说明从Jenkins中删除构建历史记录: 但是,我收到以下错误消息: groovy.lang.MissingMethodException:没有方法的签名: jenkins.branch.OrganizationFolder.getBuilds()适用于 参数类型:()值:[]可能的解决方案:GetView(), doBuild(jenkins.util.TimeDuration)、getUrl()、getClass(), getActions(),getApi()位于
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循环中删除生成的其他部分。