2017-02-10 57 views
9

içimde bir fonksiyonu olan bir görev oluşturmak çalışıyorum:Jenkins Pipeline config içindeki işlev nasıl tanımlanır ve kullanılır?

def doCopyMibArtefactsHere(projectName) { 
    step ([ 
     $class: 'CopyArtifact', 
     projectName: projectName, 
     filter: '**/**.mib', 
     fingerprintArtifacts: true, 
     flatten: true 
    ]); 
} 

def BuildAndCopyMibsHere(projectName, params = [:]) { 
    build job: project, parameters: params 
    doCopyMibArtefactsHere(projectName) 
} 


node { 
    stage('Prepare Mib'){ 
     BuildAndCopyMibsHere('project1') 
    } 
} 

Ama bu bana bir istisna gves: java.lang.NoSuchMethodError: adımların yanı sıra bulunamadı böyle DSL yöntemi 'BuildAndCopyMibsHere'

Pipline komut dosyasında gömülü işlevleri kullanmanın bir yolu var mı?

cevap

8

Eğer dizeleri (önce işlevini konum içinde olması gerektiği, böylece istisna, $class olduğu dışında olduğunuzda, size $ eklemek gerekir Öncelikle:

def doCopyMibArtefactsHere(projectName) { 
    step ([ 
     $class: 'CopyArtifact', 
     projectName: projectName, 
     filter: '**/**.mib', 
     fingerprintArtifacts: true, 
     flatten: true 
    ]); 
} 

def BuildAndCopyMibsHere(projectName, params) { 
    build job: project, parameters: params 
    doCopyMibArtefactsHere(projectName) 
} 
... 

Şimdi sorun için olduğu gibi, yalnızca çağrı az bir argüman temin etmişken, ikinci işlevi, iki bağımsız değişkeni alır ya çağır iki argüman sunmak zorundadır.

... 
node { 
    stage('Prepare Mib'){ 
     BuildAndCopyMibsHere('project1', null) 
    } 
} 

... yoksa varsayılan bir değer katmak gerekir fonksiyonların ikinci argümanı nt:

def BuildAndCopyMibsHere(projectName, params = null) { 
    build job: project, parameters: params 
    doCopyMibArtefactsHere($projectName) 
} 
+0

Tamam. Şimdi java.lang.UnsupportedOperationException diyor: arayüz java.util.List' bir uygulama ile $ sınıfı belirtmeniz gerekir. P.S. orijinal kod düzeltildi - $ değiştirilemez, dizelerde bulunmaz. –

+1

Garip, ayrı bir sorun gibi görünüyor, kopya artefakt adımını yeniden oluşturmak için snippet jeneratörü kullanmayı deneyin. Eğer hala başarısız olursa, ayrı bir sorun olarak yeni bir soru göndermenizi öneririm. –

-1

Çözüldü!build job: project, parameters: params numaralı çağrı, numaralı telefondan java.lang.UnsupportedOperationException: must specify $class with an implementation of interface java.util.List numaralı hatayla başarısız oluyor. params = null ile değiştirilmesi sorunu çözdü. Aşağıda çalışma kodu.

def doCopyMibArtefactsHere(projectName) { 
    step ([ 
     $class: 'CopyArtifact', 
     projectName: projectName, 
     filter: '**/**.mib', 
     fingerprintArtifacts: true, 
     flatten: true 
    ]); 
} 

def BuildAndCopyMibsHere(projectName, params = null) { 
    build job: project, parameters: params 
    doCopyMibArtefactsHere(projectName) 
} 
node { 
    stage('Prepare Mib'){ 
     BuildAndCopyMibsHere('project1') 
    } 
} 
+0

Benim hatam, son hatayı çözdüğün iyi oldu :) Yukarıdaki cevabımı güncelledim. –

+0

Bana doğru yoldan pointong için teşekkür ederiz) –