2016-03-24 18 views
0

Tüm işimizi kod olarak yapılandırmak için Jenkins Job DSL eklentisini kullanıyoruz ve genellikle değişiklikleri dağıtmadan önce test etmek için yerel bir Jenkins hazırlama ortamı kullanıyoruz. DSL'in geçerli olduğundan ve işlerin doğru bir şekilde oluşturulduğundan emin olmak istiyorsak da, yüzlerce işimizin tümünü yerel olarak oluşturmaya başlamak istemiyoruz.Bir Job DSL parametresini geçersiz kılmak mümkün mü?

trigger'un scm parametresini geçersiz kılmanın bir yolu var mıdır, böylece tüm mükemmel dosyalarımızda yerel olmayan bir işlem mi var? Bunu yapan bir özel kitaplık dosyası yazabileceğime inanıyorum, ancak ideal olmayan özel scm tanımımızı almak için her groovy dosyasına bir içe aktarma satırı eklemem gerekir.

Açıklığa kavuşturmak için, belirli tanımları zarif bir şekilde veya maymun yama koduyla geçersiz kılmanın bir yolunu arıyorum, böylece her bir dosyada ve iş tanımında bir değişiklik yapılmasını gerektirmeyiz. çok.

cevap

1

Sen işlerini kurmak ve onları disabled

job('example') { 
    disabled() 
} 

Sonra el test etmek istediğiniz işi aktive olabilir yapılandırabilirsiniz.

Aynı yöntem diğer iş türleri için de kullanılabilir. benim için çalışıyor Ne

+0

Yalnızca yerel ortamda devre dışı bırakılmasını istiyorum, ancak bunun değiştirilmiş bir sürümüyle sonuçlandım. Ortak DSL kitaplığımızda bestPractices() yöntemini oluşturdum, her işin başına koydum ve orada üretim bayrağı ve devre dışı bırakılmışsa kontrol ettim. Yeterince iyi çalışır ve zaman aşımları, log rotasyonları ve diğer yaygın şeyleri eklemek için ortak bir yer sağlar. – mrooney

0

geçerli:

  1. o anki ana bilgisayar adına göre bir üretim ya da test ortamında çalışıyor olmasına bağlı olarak doğru/yanlış döndüren bir işlev ekleyin. Örneğin. Jenkins.mydomain.com olarak çalışan üretim örneğim var ve jenkins'i jenkins-test.mydomain.com olarak test et.
  2. Add a/then/else o

örn dayalı işin tanımında ise Böyle:

JenkinsInstance.groovy içine koy:

import jenkins.model.* 

// Representing the Jenkins server instance 
class JenkinsInstance { 
    // Determine if we're executing on a Jenkins production instance. 
    static Boolean isProd() { 
     if (Jenkins.getInstance().getRootUrl() ==~ ".*jenkins\\.mydomain\\..*") { 
      return true 
     } else { 
      return false 
     } 
    } 
} 

DSL geçerli olduğundan emin olmak için DSL komut bu

import JenkinsInstance 

freeStyleJob("myjobname") { 
    if (JenkinsInstance.isProd()) { 
    scm { 
     git { 
     ... 
     } 
    } 
    } else { 
    scm { 
    } 
    } 
} 
+0

Teşekkürler, açıklama eksikliği için özür dilerim; Amacım, her bir freeStyleJob tanımını değiştirmekten kaçınmaktı. İş DSL'ini yamaya sokmayı umuyordum, böylece her dosyanın değiştirilmesi gerekmiyordu. – mrooney

+0

Ben bu ayrı bir şube (git/svn) üzerinden kod ile değil, ayrı yapmak için öneririm ... Yani kod/test arasında bir fark yoktur. – khmarbaise

0

benziyor senin iş üretmenin bir yazma bazı birim testleri. Bazı örneklerini here veya here görebilirsiniz. Her şey herhangi bir sorun olmadan üretilebiliyorsa, özellikle this test size söyleyecektir. Yapının kendisi tamamlanmışsa test etmek için bunları yerel olarak oluşturmak isterseniz, tüm otomatik tetikleyicileri devre dışı bırakmak için SeedJob'unuz tüm yapılandırmaları oluşturduktan sonra sistemdeki mükemmel bir komut dosyasını kullanabilirsiniz. Here, bunun nasıl yapılacağına dair bir örnektir.

İlgili konular