2017-03-17 100 views
0

我试图用这个答案的说明,从詹金斯删除构建历史:删除构建历史詹金斯

How do I clear my Jenkins/Hudson build history?

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

groovy.lang.MissingMethodException:方法的无签名: jenkins.branch.OrganizationFolder.getBuilds()是适用于 参数类型:()值:[]可能的,从而lutions: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) 

我得到以下输出:

[email protected] [github上测试]

我使用版本2.32.2。

下面是我跑的确切脚本:

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

您使用的是什么版本的jenkins?你有链接答案中提供的确切脚本吗? – Rao

+0

是什么问题? –

回答

3

您尝试删除的作业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) 
1

您可以使用以下脚本删除builds.You可以指定多少最新建立挽留,只是增加你的选择MAX_BUILDS.make它的值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 "" 
    } 
    } 

请接受我的答案更换作业名值,如果它帮助你解决你的问题,投票,如果它是有用的。如果您需要更多信息,请随时恢复。

+0

如果我有多个工作,我应该如何删除它们。例如:def jobs = [“World-2.6.0.6”,“Hello-1.7.0”] – binbjz

+0

将您的作业列表添加到数组中,在for循环中迭代数组并重新使用删除内部版本的其他部分for循环。 – prudviraj