2012-10-24 40 views
40

我刪除舊詹金斯與rm建立在那裏的工作託管:詹金斯:刪除舊的建立與命令行

my_job/builds/$ rm -rf [1-9]* 

這些舊版本是仍在工作頁面可見。 如何使用命令行刪除它們?
(無需在每個構建用戶界面刪除按鈕)

+0

不是一個答案解決在AWS EC2這個問題:但有用的,如果你有常規: https://github.com/jenkinsci/jenkins-scripts/blob/master/scriptler/discardOldBuilds.groovy – Jayan

回答

35

它看起來像這樣已經加入到CLI,或者至少正在對工作:http://jenkins.361315.n4.nabble.com/How-to-purge-old-builds-td385290.html

語法將是這樣的:java -jar jenkins-cli.jar -s http://my.jenkins.host delete-builds myproject '1-7499' --username $user --password $password

+0

這工作奇蹟非常感謝! – mors

+10

你沒有提到從哪裏得到'jenkins-cli.jar':你的Jenkins安裝會告訴你在這個頁面上的什麼位置:'http:// localhost:8080/cli /'。 – Ben

+0

whaere我應該安裝jar文件嗎? – user3502786

6

是否有原因需要手動完成而不是讓Jenkins爲您刪除舊版本?

您可以根據天數或構建數量來更改作業配置以自動刪除舊版本。沒有更多的擔憂或不必追蹤,詹金斯只是爲你做。

+8

我發現這在創建項目時很有用,並且在設置正確之前會出現幾個故障。完成後,我想清除舊的錯誤版本,因爲它們最終只是噪音 –

+0

此選項在哪裏?我無法在我的Jenkins版本中找到它 - 1.5。 – ziggy

+1

它在每個作業的配置中。選擇放棄舊版本複選框,並選擇可用來控制刪除舊版本的方式。 –

21

命令刪除所有詹金斯工作建立

/jenkins_home/jobs> rm -rf */builds/* 

刪除重新載入配置後:

"Manage Jenkins" ==> "Reload Configuration from Disk" 
+0

我無法獲得cURL或jar解決方案工作,這似乎是一個很好的解決方案,只是刪除構建日誌。長話短說,一些密碼泄露在我的日誌中,我只需要做一些清理。但是,該方法確實保留了構建的其他記錄,例如,在工作屏幕上。就我而言,我並不在乎。 – killthrush

48

這裏是另一種選擇:刪除與遠程捲曲建立。 (換上無論您使用瀏覽器訪問詹金斯的URL的開始。)

$ curl -X POST http://jenkins-host.tld:8080/jenkins/job/myJob/[1-56]/doDeleteAll 

上述刪除打造#1至#56作業myJob。

如果認證是對詹金斯實例啓用,必須提供這樣的用戶名和API令牌:

$ curl -u userName:apiToken -X POST http://jenkins-host.tld:8080/jenkins/job/myJob/[1-56]/doDeleteAll 

的API令牌必須從詹金斯的/我/配置頁面中獲取。只需點擊「Show API Token ...」按鈕即可顯示用戶名和API令牌。

編輯:正如在下面評論中指出yegeniy,一個可能必須通過doDelete在上述網址,以取代​​,使這項工作,根據不同的配置。

+3

此答案值得擁有更多選票。謝謝! –

+11

我不得不使用'doDelete'而不是'doDeleteAll'。可能不在詹金斯的正確版本。 – yegeniy

+0

這是舊功能還是新功能?它在1.556中不可用。 – greggles

10

您可以通過使用哈德森API Groovy腳本做到這一點..訪問您的詹金斯安裝目錄

http://localhost:38080/script. 

例如,刪除所有舊的構建使用如下腳本中的所有項目: 注意:如果你要小心使用指紋,你將失去所有的歷史。

import hudson.model.* 
// For each project 
for(item in Hudson.instance.items) { 
    // check that job is not building 
    if(!item.isBuilding()) { 
    System.out.println("Deleting all builds of job "+item.name) 
    for(build in item.getBuilds()){ 
     build.delete() 
    } 
    } 
    else { 
    System.out.println("Skipping job "+item.name+", currently building") 
    } 
} 

或者清洗所有的工作區:

​​

上有Jenkins wiki

+1

他啓用groovy特定的代碼突出顯示。 – Slav

+0

啊好..謝謝:) –

+0

如何刪除幾個版本讓我們說在特定版本1-10,我在哪裏可以找到使用哈德森包的文檔 – user3502786

-5

要走很多的例子來配置詹金斯作業的面板中,找到源代碼管理 - >附加行爲 - >點擊添加,選擇結賬前清潔。詹金斯將清理舊建立在此版本

+2

這不會刪除舊版本,只會清理工作區,如果我理解正確的話。 – Clerenz

0

從詹金斯Scriptler控制檯運行以下Groovy腳本刪除所有建立的視圖中列出的作業:

import jenkins.model.Jenkins 

hudson.model.Hudson.instance.getView('<ViewName>').items.each() { 
    println it.fullDisplayName 


    def jobname = it.fullDisplayName 
    def item = hudson.model.Hudson.instance.getItem(jobname) 
    def build = item.getLastBuild() 
    if (item.getLastBuild() != null) { 
     Jenkins.instance.getItemByFullName(jobname).builds.findAll { 
      it.number <= build.getNumber() 
     }.each { 
      it.delete() 
     } 

    } 
} 
1

下面的腳本清除舊的構建作業。你應該從磁盤重新加載配置,如果你手動刪除構建:

import hudson.model.* 

for(item in Hudson.instance.items) { 
    if (!item.isBuilding()) { 
     println("Deleting old builds of job " + item.name) 
     for (build in item.getBuilds()) { 
      //delete all except the last 
      if (build.getNumber() < item.getLastBuild().getNumber()) { 
       println "delete " + build 
       try { 
        build.delete() 
       } catch (Exception e) { 
        println e 
       } 
      } 
     } 
    } else { 
     println("Skipping job " + item.name + ", currently building") 
    } 
} 
+1

也向你的回答添加解釋。 –