2017-03-17 86 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