Jenkins / Hudson derleme geçmişimi nasıl temizlerim?


87

Kısa süre önce hudson yapılarından birinin yapılandırmasını güncelledim. Derleme geçmişi senkronize değil. Derleme geçmişimi temizlemenin bir yolu var mı?

Lütfen ve teşekkür ederim


"Tamamen berbat" konusunu biraz daha açabilir misin? Belki birisi daha önce benzer bir sorun yaşamış olabilir ve bu sorunu nasıl düzelteceğiniz konusunda sizi yönlendirebilir.
Rob Hruska

belirsizlik için üzgünüm. sabit.
myusuf3

Burada daha yeni ve biraz daha spesifik bir soru var: stackoverflow.com/questions/13052390/…
Erwan Legrand

Bu gönderi yardımcı olabilir codeketchup.blogspot.sg/2016/05/…
Nayana Adassuriya

İşte bulduğum en iyi cevap: superuser.com/questions/1418885/…
Asma Zubair

Yanıtlar:


51

Hudson'ı Yönet / Yapılandırmayı Diskten Yeniden Yükle'ye tıklarsanız, Hudson tüm derleme geçmişi verilerini yeniden yükleyecektir.

Diskteki verileri berbat ederseniz,% HUDSON_HOME% \ işler \ <gitmek gerekir projectname > dizin ve onlar zannediyorsunuz inşa dizinleri geri yükleme. Ardından yapılandırma verilerini yeniden yükleyin.

Sadece tüm yapı geçmişini nasıl kaldırılacağını soruyorsanız, sadece birkaç varsa UI aracılığıyla tek tek inşa silme veya \ <% HUDSON_HOME% \ işlere gidebilir projectname > dizin ve silme tüm oradaki alt dizinler - yapılara karşılık gelirler. Daha sonra değişikliklerin etkili olması için hizmeti yeniden başlatın.


"/ Var / lib / jenkins / jobs / Demo" içindeki tüm dosya ve klasörleri sildim ancak bu JOB içinde Jenkins UI'ye gittiğimde hala yapı geçmişini görüyorum.
paul

1
Dizin yapısıyla "maymun" yaptıktan sonra, "Manage Jenkins" e gidin ve "Yapılandırmayı Diskten Yeniden Yükle" yi seçin
DanBaker

1
@paul, oradaki klasörleri sildikten sonra , derleme geçmişinin UI'den kaybolduğunu görmek için Jenkins'in yeniden başlatılması gerekir. BTW, Jenkins kullanıyorsak, yol genellikle / var / jenkins_home / jobs / {project name} / builds /
Bright

Bu çözümün sistem tarafında çok fazla adım gerektirdiğini düşünüyorum, çok daha temiz bir çözüm @Nayana Adassuriya
lfn

111

Bir işin derleme geçmişini toplu olarak silmek için komut dosyası konsolunu (Manage Jenkins> Script Console) ve bu komut dosyası gibi bir şey kullanın https://github.com/jenkinsci/jenkins-scripts/blob/master/scriptler/bulkDeleteBuilds.groovy

Bu komut dosyası, yalnızca bir dizi derlemeyi silmek istediğinizi varsayar. Belirli bir iş için tüm derlemeleri silmek için şunu kullanın (test edilmiş):

// change this variable to match the name of the job whose builds you want to delete
def jobName = "Your Job Name"
def job = Jenkins.instance.getItem(jobName)

job.getBuilds().each { it.delete() }
// uncomment these lines to reset the build number to 1:
//job.nextBuildNumber = 1
//job.save()

5
Harika!! kesinlikle en iyi yaklaşım! :)
hek2mgl

harika bir numara, ancak yapı sayacını sıfırlamaya ne dersiniz? bunun için herhangi bir komut dosyası var mı?
Jes Chergui

1
@JesChergui Yapı numarasını sıfırlamayı göstermek için güncelledim. Komut dosyası konsolu her türlü şeyi kontrol etmenizi sağlar, bkz. Javadoc.jenkins-ci.org (AbstractProject, işlerle oynamak için iyi bir başlangıç
noktasıdır

Jenkins'im örneklere veya benzerlerine erişmesine izin verilmediğinden şikayet etti. Bunu özellikle bu silme işlemi için kurduğum yeni bir boru hattından çalıştırıyordum ve yukarıdaki kodu yapıştırıp adını değiştirdim.
Will

@Bunun nedeni, ardışık düzen işlerini süper kısıtlayıcı bir sanal alana yerleştiren komut dosyası güvenlik eklentisidir. "Jenkins'i Yönet"> "İşlem içi komut dosyası onayları" altında onaylamanız gereken bir imzanız olup olmadığına bakın. Diğer bir seçenek de, Scriptler eklentisinin bir işte yönetici komut dosyalarını çalıştırma yeteneğini kullanmak olabilir: wiki.jenkins-ci.org/display/JENKINS/Scriptler+Plugin
rjohnston

76

Bu cevap Jenkins için

  1. Jenkins ana sayfanıza gidin → Jenkins'i YönetKomut Dosyası Konsolu

    Buraya resim açıklamasını girin

  2. Aşağıdaki komut dosyasını orada çalıştırın. Değişim copy_folderiçinyour project name

Kod:

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

Benim yazım


4
Şimdiye kadarki en iyi cevap
Dmitry Zaytsev

1
Bu en hızlı çözümdür.
davegallant

Evet, ama bunun için Jenkins'i yeniden BAŞLATMAYIN veya yeniden başlattıktan sonra bir derleme yaptığınızda bir sonraki yapı numarasını 1 olarak güncellemiyor gibi görünüyor. Benimki 39'da başladı, bu yüzden bunu yeniden yapmak zorunda kaldım.
Will


22

İşte başka bir seçenek: yapıları cURL ile silin.

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

Yukarıdakiler, myJob işi için 1 ile 56 arasındaki yapıları siler.

Jenkins örneğinde kimlik doğrulama etkinleştirildiyse, aşağıdaki gibi bir kullanıcı adı ve API simgesi sağlanmalıdır:

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

API simgesi /me/configure, Jenkins'teki sayfadan getirilmelidir. Hem kullanıcı adını hem de API jetonunu görüntülemek için "API Simgesini Göster ..." düğmesini tıklamanız yeterlidir.

Düzenleme: Bir değiştirmek gerekebilir doDeleteAlltarafından doDeleteyapılandırma veya kullanılmış Jenkins sürümüne bağlı, bu işi yapmak için yukarıdaki URL'leri.


10

Jenkins Scripting kullanarak ...... TÜM İŞLER İÇİN TÜM YAPILARI nasıl sileceğiniz aşağıda açıklanmıştır.

def jobs = Jenkins.instance.projects.collect { it } 
jobs.each { job -> job.getBuilds().each { it.delete() }} 

9

Yalnızca son 1 yapıyı kaydetmek için proje yapılandırmasını geçici olarak değiştirebilir, yapılandırmayı yeniden yükleyebilir (eski yapıları çöpe atabilir) ve ardından yapılandırma ayarını tekrar istediğiniz değere değiştirebilirsiniz.


Üzgünüz, Hudson'ı birkaç yıldır kullanmadım, ancak yapılandırmayı yeniden yüklemekle ilgili
şuna bakın

Jenkins'e yönetici izni olmayan biri olarak, benim için çalışan tek seçenek buydu.
DrStrangepork

4

MultiBranchProject'in (örn. Ardışık düzen) derleme geçmişini temizlemek istiyorsanız, Jenkins ana sayfanıza gidin → Jenkins'i Yönet → Komut Dosyası Konsolu'na gidin ve aşağıdaki komut dosyasını çalıştırın:

def projectName = "ProjectName"
def project = Jenkins.instance.getItem(projectName)
def jobs = project.getItems().each {
  def job = it
  job.getBuilds().each { it.delete() }
  job.nextBuildNumber = 1
  job.save()
}

4

Bu, mevcut en iyi seçenektir.

Jenkins.instance.getAllItems(AbstractProject.class).each {it -> Jenkins.instance.getItemByFullName(it.fullName).builds.findAll { it.number > 0 }.each { it.delete() } }

Bu kod, tüm Jenkins Job oluşturma geçmişini silecektir.


2
Yukarıdaki kodun nasıl çalıştırılacağını merak edenler için, Jenkins Ana Sayfası> Jenkins'i Yönet> Komut Dosyası Konsolu'na gidin. Orada bu komut dosyasını girebileceğiniz bir metin alanı olacaktır.
Firavun Araçları

2

Komut Dosyası Konsolunu Kullanma.

İşlerin gruplandırılması durumunda, ya eğik çizgilerle tam bir ad vermek mümkündür:

getItemByFullName("folder_name/job_name") 
job.getBuilds().each { it.delete() }
job.nextBuildNumber = 1
job.save()

veya hiyerarşiyi şu şekilde geçin:

def folder = Jenkins.instance.getItem("folder_name")
def job = folder.getItem("job_name")
job.getBuilds().each { it.delete() }
job.nextBuildNumber = 1
job.save()

2

Doğrudan dosya sisteminden silmek güvenli değildir. Tüm yapıları tüm işlerden silmek için aşağıdaki komut dosyasını çalıştırabilirsiniz (özyinelemeli olarak).

def numberOfBuildsToKeep = 10
Jenkins.instance.getAllItems(AbstractItem.class).each {
  if( it.class.toString() != "class com.cloudbees.hudson.plugins.folder.Folder" && it.class.toString() != "class org.jenkinsci.plugins.workflow.multibranch.WorkflowMultiBranchProject") {
    println it.name
    builds = it.getBuilds()
    for(int i = numberOfBuildsToKeep; i < builds.size(); i++) {
        builds.get(i).delete()
      println "Deleted" + builds.get(i)
    }
  }
}


1

Git %HUDSON_HOME%\jobs\<projectname>kaldır buildsdir ve kaldır lastStable, lastSuccessfulbağlantıları ve kaldır nextBuildNumberdosyası.

Yukarıdaki adımları
uyguladıktan sonra UI Jenkins-> Manage Jenkins -> Diskten Yapılandırmayı Yeniden Yükle'den aşağıdaki bağlantıya gidin

İhtiyaç duyduğun gibi yapacak


1

Komut Dosyası Konsolu yöntemini kullanıyorsanız, işlerin klasör kapsayıcılarında gruplanıp gruplandırılmadığını hesaba katmak için bunun yerine aşağıdakileri kullanmayı deneyin.

def jobName = "Your Job Name"
def job = Jenkins.instance.getItemByFullName(jobName)

veya

def jobName = "My Folder/Your Job Name
def job = Jenkins.instance.getItemByFullName(jobName)

0

Şu yöne rotayı ayarla: %JENKINS_HOME%\jobs\jobName

"NextBuildNumber" dosyasını açın ve numarayı değiştirin. Bundan sonra Jenkins yapılandırmasını yeniden yükleyin. Not: "nextBuildNumber" dosyası, Jenkins tarafından kullanılacak bir sonraki yapı numarasını içerir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.