2015-01-13 5 views
18

Aşağıdaki JobDSL spec var:Ortak Jenkins JobDSL kodu nasıl yeniden kayıt edilir?

job { 
    steps { 
    gradle('generateLock saveLock', '-PdependencyLock.includeTransitives=true', true) { node -> 
     node/wrapperScript('${NEBULA_HOME}/gradlew') 
    } 
    gradle('check', '', true) { node -> 
     node/wrapperScript('${NEBULA_HOME}/gradlew') 
    } 
    } 
} 
Ben bir fonksiyonu haline ortak kod, diyelim refactor istiyorum

:

def gradlew(String tasks, String options) { 
    gradle(tasks, options, true) { node -> 
    node/wrapperScript('${NEBULA_HOME}/gradlew') 
    } 
} 

Ama gradle işlev içinde görünür değil gradlew işlevi. Bunu yapmanın doğru yolu nedir?

cevap

24

Kıvrımlı parantezler bir Groovy kapanışı oluşturur. Her kapağın, yöntem çağrılarının yönlendirildiği bir temsilci nesnesi vardır. Ve delegeye delegate özelliği üzerinden erişilebilir. Bu delegeyi, yöntemlerine erişmek için yardımcı işlevine geçirebilirsiniz.

def gradlew(def context, String tasks, String options = '') { 
    context.gradle(tasks, options, true) { node -> 
    node/wrapperScript('${NEBULA_HOME}/gradlew') 
    } 
} 
job { 
    steps { 
    gradlew(delegate, 'generateLock saveLock', '-PdependencyLock.includeTransitives=true') 
    gradlew(delegate, 'check') 
    } 
} 
+3

Genellikle kullanılan kodun nasıl çıkarılacağına ilişkin proje wiki'sinde bazı açık örnekler vermenizi öneririz. Aynı şeyi bir süreliğine arıyorduk. –

+3

Blokları yapılandırma hakkında Job DSL wiki sayfasını güncelleyeceğim, bkz. Https://github.com/jenkinsci/job-dsl-plugin/pull/683 – daspilker

+0

Eğik çizgi - düğümden sonra ne yapar? ..? – sloven