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
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
Yanıtlar:
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.
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()
Bu cevap Jenkins için
Jenkins ana sayfanıza gidin → Jenkins'i Yönet → Komut Dosyası Konsolu
Aşağıdaki komut dosyasını orada çalıştırın. Değişim copy_folder
içinyour project name
Kod:
def jobName = "copy_folder"
def job = Jenkins.instance.getItem(jobName)
job.getBuilds().each { it.delete() }
job.nextBuildNumber = 1
job.save()
İş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 doDeleteAll
tarafından doDelete
yapılandırma veya kullanılmış Jenkins sürümüne bağlı, bu işi yapmak için yukarıdaki URL'leri.
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.
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()
}
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.
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()
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)
}
}
}
Yapıları temizlemenin bir başka kolay yolu, işlerin sonuna Eski Eklentiyi At'ı eklemektir. Kaydedilecek maksimum derleme sayısını ayarlayın ve ardından işi yeniden çalıştırın:
https://wiki.jenkins-ci.org/display/JENKINS/Discard+Old+Build+plugin
Git %HUDSON_HOME%\jobs\<projectname>
kaldır builds
dir ve kaldır lastStable, lastSuccessful
bağlantıları ve kaldır nextBuildNumber
dosyası.
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
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)