Jenkins'te yapı numarası nasıl sıfırlanır?


90

Java projemi oluşturmak için Jenkins ve Gradle kullanıyorum.

Projemi her oluşturduğumda, Jenkins ekranında yeni bir yapı numarası alıyorum.

Aşağıdakiler, Jenkins derleme bilgilerim:

Success > Console Output  #96   03-Jan-2014 15:35:08    
Success > Console Output  #95   03-Jan-2014 15:27:29     
Failed > Console Output  #94    03-Jan-2014 15:26:16     
Failed > Console Output  #93    03-Jan-2014 15:25:01     
Failed > Console Output  #92    03-Jan-2014 15:23:50     
Success > Console Output  #91   03-Jan-2014 12:42:32    
Success > Console Output  #90   03-Jan-2014 12:02:45

Jenkins yapı numarasını şu şekilde sıfırlamak istiyorum:

Success > Console Output  #1    03-Jan-2014 12:02:45

Jenkins'teki yapı numarasını nasıl sıfırlayabilirim?

Yanıtlar:


162

Harika komut dosyası konsolundan daha kolay yapılabilir. Git http:-Jenkins-sunucu / script // komut penceresinde girin:

item = Jenkins.instance.getItemByFullName("your-job-name-here")
//THIS WILL REMOVE ALL BUILD HISTORY
item.builds.each() { build ->
  build.delete()
}
item.updateNextBuildNumber(1)

6
veya cli ilejava -jar jenkins-cli.jar -s https://jenkins.example.com groovysh \ 'jenkins.instance.getItemByFullName("job-name").updateNextBuildNumber(1021)'
ykhrustalev

3
Bu kesinlikle en iyi cevap. Yalnızca numarayı ayarlamak istiyorsanız silme döngüsüne bile ihtiyacınız yoktur.
Nick

Bazı nedenlerden dolayı, bu yalnızca en son echo "deleting all builds of ${jobName}" item = Jenkins.instance.getItemByFullName("${jobName}") for (build in item.builds){ build.delete(); } item.updateNextBuildNumber(1)
sürümde

Çaylak bir soru .. tam iş adını nasıl bildiğimi.
Ammar Mujeeb

@AmmarMujeeb Jenkins panonuza gidin ve orada iş adını göreceksiniz. Ayrıca /var/lib/jenkins/jobs/Linux'a da gidebilirsiniz ve dizinin adı tam iş adıdır
rickrizzo

62

Gönderen burada

Hudson işinizin adı FooBar olduğu için,

  • FooBar'ı FooBar-Copy olarak yeniden adlandır
  • FooBar-Copy'den 'Mevcut işi kopyala' seçeneğini kullanarak FooBar adında yeni bir iş oluşturun
  • FooBar-Copy'yi sil

36
  • Önce çalışma alanını silin ve önceki yapılardan kurtulun.
    • Sunucuda iş dizinine gidin örn. 'var / lib / jenkins / jobs / myJob' çalışma alanını ve derleme dizinlerinin yanı sıra herhangi bir sorgulama dosyasını, lastSuccessful, lastStable dosyalarını vb. silin. Yalnızca config.xml ve lastBuildNumber'a sahip olmanız gerekir.
    • Service jenkins stop gibi bir şey kullanarak jenkins'i kapatın
    • NextBuildNumber adlı dosyayı , mevcut yapı numarası yerine 1 ekleyerek düzenleyin
    • Jenkins'i tekrar başlatın , servis jenkinleri başlar
    • Jenkins'e giriş yapın ve işinize gidin ve inşaa tıklayın. 1 numaralı işi inşa etmeye başlamalı

1
Bu çok yardımcı oldu. Teşekkürler.

23

Bir sonraki yapı numarasını ayarlamak isterseniz, bunun için "NextBuildNumber" eklentisi vardır. Ancak bu, sizin durumunuzda işe yaramayacaktır çünkü ihtiyacınız olan yapı numarası, yani 1, mevcut yapı numaranızdan daha azdır.

Burada önce tüm önceki yapıları silmeniz gerekiyor. Bu basit komut dosyasını çalıştırarak bunu yapabilirsiniz -> Jenkins'i Yönet -> Komut dosyası konsoluna gidin

// 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() }

Şimdi bir sonraki yapı numarasını 1 olarak ayarlayabilir ve yapıyı çalıştırabilirsiniz. 1 ile başlayacak . :) Bu kadar basit.

Güncelleme - Jenkins'in artık bunu en kolay şekilde yapmak için Purge Job History eklentisi var. Daha fazla ayrıntı için sayfayı kontrol edin - https://wiki.jenkins.io/display/JENKINS/Purge+Job+History+Plugin


6

Daha genel olarak yapı numaranızı sıfırlamak için N( N1 olması gerekmez):

  • Mevcut tüm yapıları silin buildNumber >= N .
  • Düzenle Program Files (x86)/Jenkins/jobs/yourjob/nextBuildNumber. İçerdiği sayıyı ayarlayınN .
  • Jenkins'ten seçin Manage Jenkins -> Reload Configuration from Disk.

"Yapılandırmayı diskten yeniden yükle" yi seçmeden önce bu kusuru okuduğunuzdan emin olun - issues.jenkins-ci.org/browse/JENKINS-32984
user3181500

6

Kabul edilen yanıtı genişleterek, işte bunu tüm projeler için aynı anda nasıl yapacağınız:

Jenkins.instance.allItems.each() { 
  item -> item.builds.each() { 
    build -> build.delete()
  }
  item.updateNextBuildNumber(1)
}  

4

@ Antweiss'in mükemmel cevabının bir uzantısı olarak, aslında daha ileri gidebiliriz ...

Derleme Geçmişinin tamamını silmenize gerek yoktur, istemiyorsanız, yalnızca önceki bir noktaya zamanı geri alabilirsiniz:

resetNumberTarget = 14
item = Jenkins.instance.getItemByFullName("Project Name [from project Dashboard]")
//println(item)

item.builds.each() { build ->
  //println(build)
  //println(build.number)

  if(build.number >= resetNumberTarget)
  {
    //println("About to Delete '" + build + "'")    
    build.delete()  
  }
}

item.updateNextBuildNumber(resetNumberTarget)

Sahte bir çalışma istiyorsanız, gerçekten yapmadan ne yapacağını kontrol etmek istiyorsanız, basitçe build.delete()veitem.updateNextBuildNumber(resetNumberTarget) satırlarını ve çeşitli yazdırma komutlarını kaldırın.


Belgeler: Bu nesnelerin ayrıntılarını bulmak zordu, ancak aşağıdakileri belirledim:


1

Yapı numarasını sıfırlamak için nexBuildNumbereklentiyi kullanabilir veya nexBuildNumberdosyayı değiştirebilirsiniz . Yapmanız gereken adımlar şunlardır:

  • Adresine gidin .jenkins/Jobs/<YourJobName>/build/, bu klasörün yedeğini alın (daha sonra kullanmanız gerekiyorsa) ve derleme klasörünü silin .

Not: Eski yapıları temizledikten sonra, yapı geçmişlerini kaybedersiniz ve artık Jenkins kontrol panelinde bulunmazlar.

  • Yapılandırmayı yeniden yükleyin (Jenkins -> Manage Jenkins).
  • Sonraki Yapı Numarası eklentisini kullanarak veya nextBuildNumberiş dizininizdeki dosyayı değiştirerek sonraki derleme sürümünü 1 olarak ayarlayın .

0

Bunu yapmanın kolay bir yolunu buldum.

  1. Çalışma alanınızı silin.
  2. Jenkins'e kaydedilen her yapıya gidin ve silin.
  3. Derleme numarasını 1 olarak ayarlayın ve ardından oluşturun.

Jenkins, bir sonraki yapı numarasını belirlemek için önceki yapıyı kullanır, girdiğiniz yapı numarası önceki yapı numarasından düşükse, Jenkins otomatik olarak yapı numaranızı önceki derlemeden daha yükseğe çıkaracaktır. İşte buradayız



-1

Tüm işlerin yapı numaralarını sıfırlamak için:

Jenkins.instance.getAllItems(AbstractProject.class).each {
    item = Jenkins.instance.getItemByFullName(it.fullName)
    //THIS WILL REMOVE ALL BUILD HISTORY
    item.builds.each() { build ->
        build.delete()
    }
    item.updateNextBuildNumber(1)
}
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.