删除 Jenkins 中的构建历史记录



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

如何清除我的 Jenkins/Hudson 构建历史记录?

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

groovy.lang.MissingMethodException: 没有方法的签名: jenkins.branch.OrganizationFolder.getBuilds() 适用于 参数类型: () 值: [] 可能的解决方案: getViews(), doBuild(jenkins.util.TimeDuration), getUrl(), getClass(), getActions(), getApi() at 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)

我得到以下输出:

jenkins.branch.OrganizationFolder@134f3a3c[github-test]

我使用的是 2.32.2 版。

这是我运行的确切脚本:

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

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

所以我猜你不想从github-test作业/文件夹中的子作业中删除所有构建。我已经修改了链接的答案,以便它考虑文件夹:

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)

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

假设您要删除的构建属于"github-test"。将作业名称值替换为您的选择

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 ""
}
}

最新更新