Eski yapıları atmak için Pipeline nasıl yazılır?


88

Harika sözdizimi oluşturucu örnek adım için çalışmıyor properties: Set Job Properties. Seçtiğim Discard old buildsgirmiş ve daha sonra 10içinde Max # of builds to keepalan ve daha sonra Generate Groovyyukarı ve hiçbir şey gösterileri.

Jenkins sürümü: 2.7


Jenkins 2.32.3 ile benim için iyi çalışıyor
Michel Jung

Yanıtlar:


182

Bildirim temelli söz dizimine gelince, optionsbloğu kullanabilirsiniz :

pipeline {
  options {
    buildDiscarder(logRotator(numToKeepStr: '30', artifactNumToKeepStr: '30'))
  }
  ...
}

Parametreler logRotator( kaynak kodundan ):

  • daysToKeepStr: geçmiş yalnızca bu günlere kadar tutulur.
  • numToKeepStr: yalnızca bu sayıda yapı günlüğü tutulur.
  • artifactDaysToKeepStr: eserler yalnızca bu günlere kadar tutulur.
  • artifactNumToKeepStr: yalnızca bu sayıda yapının eserleri saklanır.

Daha fazla bilgi Cloudbees bilgi tabanında ve blok belgelerinde bulunabiliroptions .


1
Bunun şube başına mı yoksa boru hattı başına mı olması gerekiyor? Benim çevremde işe yaramıyor gibi görünüyor.
burun

Çeşitli seçenekler için parametreleri elde etmek için kaynak koduna başvurmak genel bir uygulama mıdır? Dokümanlar sadece referanslar numToKeepStrve neyse ki cevabınızı burada diğer parametreleri bulmak için buldum. İşleri nasıl belgeledikleri bir tür karmaşa. Hayat kurtarıcı olmana rağmen teşekkürler.
emmdee

Birisi, bu buildDiscarder seçenekleri ifadesini bir (çoklu boru hattı) aşama bloğunun içine koymak için bağlamı gösterebilir mi? Denedim ama yapım başarısız.
Christopher D. Emerson

54

Sonunda ayarlamak istediğiniz anahtara sahip propertiesolan, içinde yuvalanmış olan yöntemi kullanabilirsiniz BuildDiscarderProperty. Hala her anahtarın doğru sözdizimini bulmanın sağlam bir yolunu bulamıyorum. Çok fazla tahmin ve kontrol ettikten sonra:

properties([[$class: 'BuildDiscarderProperty', strategy: [$class: 'LogRotator', artifactDaysToKeepStr: '', artifactNumToKeepStr: '', daysToKeepStr: '', numToKeepStr: '10']]]);

Bu kod parçacığının kodlanmış sözdizimi için olduğunu unutmayın.


1
Bu işe yarıyor ama bu neden iki haritanın içine yerleştirilmiş ve bunu nasıl çözdünüz?
Rupert Madden-Abbott

Cevabına bakıyorum ve ne işe yaradığını anlamıyorum. Son 10 yapıyı mı yoksa son 10 günü mü tutuyor? Son 10 hafta veya 3 aylık derlemeleri tutabilir miyim? Lütfen içindeki her *Stralanın anlamını açıklayın strategy. Bir adama balık
tutmayı

1
@AbhijitSarkar tüm seçenekler o sınıfın javadoc'unda
apottere

@apottere 1. Bağlantı cevapta değil. 2. Javadoc'a bakacak olursam, cevaba gerek yok. Cevap olabildiğince eksiksiz olmalıdır. İlgili kısım kopyalanıp yapıştırıldığı ve burada açıklandığı sürece harici bağlantılar uygundur.
Abhijit Sarkar

1
@AbhijitSarkar Ben OP değilim, sadece cevabı nerede bulabileceğinizi bildiriyordum.
apottere

18

Komut Dosyalı Ardışık Düzenler için şunu kullanın:

properties([
    buildDiscarder(logRotator(daysToKeepStr: '3', numToKeepStr: '3')),
])

17

Jenkins'in yerleşik sözdizimi oluşturucu sayfaları vardır.

Pipeline-Sözdizimi: Snippet Generator
<your jenkins url> / pipeline-syntax /

Pipeline-Sözdizimi: Directive Generator
<your jenkins url> / directive-generator /

Discard old builds Directive Generator'dan örnek eski yapı örneğini atın


8
  1. Belirli sayıda günden sonra yapıyı silmek için :

     options {
         buildDiscarder(logRotator(daysToKeepStr: '7'))
     }
    
  2. Belirli sayıda derlemeden sonra derlemeyi atmak için :

     options {
         buildDiscarder(logRotator(numToKeepStr: '7'))
     }
    

Saklanacak toplam yapı sayısının yanı sıra yapıları korumak için gün sayısı eklendi :)
Jerald Sabu M

Bu tür şeyler için yorum kullanmalısınız. Cevabımı buna göre güncelledim.
Vadim Kotov

Yorum eklemek konusunda itibarım yok.
Jerald Sabu M

Şimdi var. Ancak genel olarak, eğer itibarınız yoksa yorum yapmak yerine cevap vermemelisiniz .
Vadim Kotov

6

Vadim'in cevabı, bilinmeyen bir nedenden ötürü benim için işe yaramadı. Aşağıdaki gibi basitleştirdim ve şimdi çalışıyor:

options {
    buildDiscarder(logRotator(numToKeepStr: '3'))
}

6

Bildirimsel ardışık düzen için şunu ekleyebilirsiniz:

options {

    buildDiscarder(
        logRotator(
            // number of build logs to keep
            numToKeepStr:'5',
            // history to keep in days
            daysToKeepStr: '15',
            // artifacts are kept for days
            artifactDaysToKeepStr: '15',
            // number of builds have their artifacts kept
            artifactNumToKeepStr: '5'
        )
    )
}

Thx, ama bilgiyi nereden buldunuz? Kodlar?
silencej

1
Normalde buradan yapıyorum jenkins-base-url:port if any/pipeline-syntax/. İşte başka bir javadoc.jenkins.io/hudson/tasks/LogRotator.html . Ayrıntılarını anlamak için bazen eklentinin github kaynak koduna da bakıyorum. @silencej
bhordupur

2

Çok şubeli ardışık düzen iş seviyesinde derleme beklemeyi yapılandırmak istiyorsanız (tek tek tüm e-postalarda Jenkinsfile) bu da mümkündür: https://issues.jenkins-ci.org/browse/JENKINS-30519?focusedCommentId=325601&page=com .atlassian.jira.plugin.system.issuetabpanels: comment-tabpanel # comment-325601

Buna ek olarak, buradaki BuildRetentionBranchPropertydiğer e-postaları yapılandırabilirsiniz *BranchProperty: https://github.com/jenkinsci/branch-api-plugin/tree/master/src/main/java/jenkins/branch

Yine de GUI'de gösterilmeyebilirler, en azından benim için Jenkins 2.73.2 ile. Ancak yine de JobDSL kullanabilir veya config.xmldoğrudan değiştirebilirsiniz (Bunu söylemedim ;-))


Job DSL Eklentisinden mi bahsediyorsunuz ? Jenkins Pipelines ile aynı şey değildir. Demek istediğim, Pipelines kullanan herkes Job DSL Plugin kullanmıyor.
Vadim Kotov

@VadimKotov hayır, gerçekten değil. Jenkins Pipelines'da yapı tutmayı yapılandırma sorunuyla karşılaştım. Bunu Jenkins dosyasında değil, iş düzeyinde yapmak istemedim. Burada Job DSL kullandım, ancak bu sadece derleme işlerinin kurulumunu otomatikleştirmek için bir araç olduğu için gerçekten önemli değil. Ancak, GUI'de, derleme işini manuel olarak yapılandırdığınızda yukarıdaki ayarların görünmesini engelleyen bir hata var gibi görünüyor. (JobDSL, aksi takdirde GUI aracılığıyla yapamayacağınız hiçbir şeyi yapmaz)
Torben Knerr

2

Programlı bir yönteme ihtiyacınız varsa (yani bunu options{}ardışık düzen sözdizimi kullanmak yerine bir işlevden yapmak ):

def someFunction() {
  ...
  properties([
    buildDiscarder(logRotator(numToKeepStr: '5'))
  ])
}
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.