2017-06-06 32 views
6

mam pracę rurociągu nazwie buildall który wygląda następująco:Jenkins rurociąg przekazać wszystkie parametry do dalszych prac

pipeline { 
    stages { 
     stage("job1") { 
      build job: "job1" 
     } 
    } 
} 

buildall praca ma 25 parametrów. Chciałbym przekazać wszystkie parametry buildall do job1. Czy mogę to zrobić w prosty sposób, zamiast ręcznie określać każdy parametr?

W tej kwestii: Pipeline pass parameters to downstream jobs sub-pytano, ale nigdy nie odpowiedział: Albo jeszcze lepiej, tam jest mniej uciążliwy sposób, w jaki mogę tylko przekazać wszystkie parametry rurociągu do dalszego pracy.

To samo pytanie, które mam.

Odpowiedz

6

Poniższy wydaje się działać (nie testowałem go obszernie choć):

pipeline { 
    agent any 
    parameters { 
     string(name: 'PARAM1', description: 'Param 1?') 
     string(name: 'PARAM2', description: 'Param 2?') 
    } 
    stages { 
     stage('Example') { 
      steps { 
       echo "${params}" 
       script { 
        def myparams = currentBuild.rawBuild.getAction(ParametersAction).getParameters() 
        build job: 'downstream-pipeline-with-params', parameters: myparams 
       }  
      } 
     } 
    } 
} 

wadę: aby uzyskać dostęp rawBuild i getAction trzeba wyłączyć piaskownicy Groove lub zatwierdzić te podpisy pod Manage Jenkins Jenkins > Zatwierdzenie skryptu w procesie. To okno dialogowe pokaże, że możesz wprowadzić lukę w zabezpieczeniach. Zależy więc od twojego środowiska, czy chcesz podjąć to ryzyko, czy nie.

+0

Dzięki @Philip! To działa. Bez twojej pomocy nie odkryłbym tego. –

+0

dlaczego oni to zrobili? mają dziwny zestaw klas * ParameterValue, używanych do wywoływania kompilacji, ale nie wystawiają całego zestawu na bieżącą kompilację? Zaczynałem od tego rurociągu Jenkinsa, ale myślę o odłożeniu go, szczególnie, gdy istniał specjalny przypadek użycia, aby przekazać "Bieżące parametry kompilacji", które nie są obsługiwane w potokach – lqbweb

0

Jeśli nie dbam o typach parametrów, takie podejście nie wymaga wyłączając Groovy Sandbox - to po prostu zakłada, że ​​wszystkie parametry mogą być traktowany jako ciąg (nie będzie działać na „Plik” na przykład):

def myparams = params.collect{ 
    string(name: it.key, value: it.value) 
} 
build job: 'downstream-job', parameters: myparams 

to nie byłoby zbyt trudne, aby rozwinąć logikę obsłużyć predefiniowanych typów parametrów non-strunowych, ale zgadzam się, że to nie powinno być konieczne. Lepszym rozwiązaniem byłoby wystawiać parametry w formacie wymaganym przez zamknięcie DSL build(), w tym specyfiki typu, które obecnie nie są widoczne poprzez zmienną globalną „params”, czy może dodać wartość logiczną, np

// I wish: 
build job: 'downstream-job', includeMyParameters: true, parameters: anyExtras