2017-02-10 24 views
9

Próbuję utworzyć zadanie z funkcją Wewnątrz:Jak zdefiniować i użyć funkcji w konfiguracji Jenkins Pipeline?

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') 
    } 
} 

Ale to gves mi wyjątek: java.lang.NoSuchMethodError: Żadna metoda taka DSL BuildAndCopyMibsHere "znaleźć wśród krokach

Czy istnieje sposób korzystania z wbudowanych funkcji w skrypcie Pipline?

Odpowiedz

8

Po pierwsze, nie należy dodawać $ gdy jesteś poza strunach (wyjątkiem jest $class w jesteś pierwszą funkcję, więc powinno być:

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) 
} 
... 

Teraz, jak na swój problem druga funkcja przyjmuje dwa argumenty, gdy jesteś dostarczanie tylko jeden argument na wezwanie czy trzeba dostarczyć dwa argumenty na wezwanie.

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

... albo trzeba dodać wartość do domyślnej funkcje drugiego argumentu nt:

+0

Ok. Teraz mówi 'java.lang.UnsupportedOperationException: musi określić klasę $ z implementacją interfejsu java.util.List'. P.S. oryginalny kod poprawiony - $ zastąpiony, gdy vars nie w ciągach znaków. –

+1

Dziwne, wygląda na oddzielny problem, spróbuj użyć generatora snippet, aby zregenerować krok artefaktu kopiowania. Jeśli nadal się nie powiedzie, proponuję opublikowanie nowych pytań, ponieważ jest to osobny problem. –

-1

Rozwiązany! Połączenie build job: project, parameters: params kończy się niepowodzeniem z błędem java.lang.UnsupportedOperationException: must specify $class with an implementation of interface java.util.List, gdy params = [:]. Zastąpienie go numerem params = null rozwiązało problem. Tutaj działa kod poniżej.

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

Mój zły, dobrze, że masz ostatni błąd rozwiązany :) Zaktualizowałem swoją odpowiedź powyżej. –

+0

Dziękuję za wskazanie mi właściwej drogi) –

Powiązane problemy