2012-03-14 24 views

Odpowiedz

56

Możesz użyć Parameterized Trigger Plugin, który pozwoli Ci przekazywać parametry z jednego zadania do drugiego.

+7

Cześć, przepraszam za brzmiący jak noob, ale czy to w porządku, jeśli ktoś może to edytować ze szczegółami jak to zrobić za pomocą Parameterized Trigger Plugin? – Fadi

+0

Strona z wtyczką ma przyzwoite wyjaśnienie, jak postępować, a po zainstalowaniu znaków zapytania po prawej stronie każdej opcji można znaleźć całkiem dobre wyjaśnienie na temat korzystania z wtyczki. Czego jeszcze potrzebujesz? –

+5

Nota boczna: Wygląda na to, że wyeksportowane zmienne środowiskowe utworzone w sekcjach skryptu bash nie kwalifikują się do zastąpienia w parametrach wyjściowych (na przykład "WERSJA eksportu" nie spowoduje, że "UPSTREAM_VERSION = $ VERSION" przyjmie prawidłową wartość; zamiast tego otrzymuje "WERSJĘ $"). –

9

(dla kolegów Googlersami)

Jeśli budujesz poważną rurociągu z Build Flow Plugin, możesz przekazywać parametry między zadaniami za pomocą DSL w ten sposób :

Przypuśćmy dostępny parametr string "CVS_TAG", aby przenieść go do innej pracy:

build("pipeline_begin", CVS_TAG: params['CVS_TAG']) 
parallel (
    // will be scheduled in parallel. 
    { build("pipeline_static_analysis", CVS_TAG: params['CVS_TAG']) }, 
    { build("pipeline_nonreg", CVS_TAG: params['CVS_TAG']) } 
) 
// will be triggered after previous jobs complete 
build("pipeline_end", CVS_TAG: params['CVS_TAG']) 

wskazówka dla wyświetlania dostępnych zmiennych/params:

// output values 
out.println '------------------------------------' 
out.println 'Triggered Parameters Map:' 
out.println params 
out.println '------------------------------------' 
out.println 'Build Object Properties:' 
build.properties.each { out.println "$it.key -> $it.value" } 
out.println '------------------------------------' 
25

1.Post-produkcji Działania> Wybierz "Wywołanie sparametryzowanej kompilacji na innych projektach"

2. Wprowadź zmienną środowiskową z wartością. Wartościami mogą być również parametry konstrukcyjne Jenkins.

Szczegółowe kroki można zobaczyć tutaj: -

https://itisatechiesworld.wordpress.com/jenkins-related-articles/jenkins-configuration/jenkins-passing-a-parameter-from-one-job-to-another/

nadzieję, że to pomocny :)

+0

Ta odpowiedź spełnia postawione pytanie OP bez konieczności używania wtyczki lub korzystania z DSL. – BTC

+2

FYI, ta odpowiedź nadal wymaga wtyczki. –

12

accepted answer tutaj nie działa dla mojego przypadku użycia. Musiałem być w stanie dynamicznie tworzyć parametry w jednym zadaniu i przekazywać je innym. Jak podaje Mark McKenna, nie ma żadnego sposobu na wyeksportowanie zmiennej z etapu kompilacji powłoki do akcji budowania postu.

Osiągnąłem obejście, używając Parameterized Trigger Plugin, zapisując wartości w pliku i używając tego pliku jako parametrów do zaimportowania za pomocą opcji "Dodaj akcję po instalacji" -> "Uruchom sparametryzowaną kompilację ...", a następnie wybierając opcję "Dodaj parametry "->" Parametry z pliku właściwości ".

+0

To jest to, czego potrzebowałem. Dzięki. – luckytaxi

+0

Jeśli chcesz użyć potoku Jnkins 2.x, możesz użyć polecenia writeFile/stash-> unstash/readFile, aby skopiować dane stanu między zadaniami. http://www.slideshare.net/ericlongtx/jenkins-days-workshop-pipelines-eric-long Slajd do kasy 21 na przykład. – siesta

6

Wystarczy dodać moją odpowiedź oprócz Nigel Kirby jest tak nie mogę wypowiedzieć się jeszcze:

Aby zdać dynamicznie utworzony parametr, można również wyeksportować zmienną w "Execute Shell płytki, a następnie przekazać go przez "Sparametryzowane budowanie na innych projektach" => "Predefiniowane parametry" => dają "YOUR_VAR = $ YOUR_VAR." Mój zespół używa tej funkcji do przekazania pakietu pakietu npm z zadania kompilacji do zadania wdrażania

AKTUALIZACJA: powyżej działa tylko dla parametrów wprowadzonych przez Jenkinsa, parametr utworzony z powłoki nadal wymaga użycia tej samej metody, np. echo zmiennej YOUR_VAR = $ {YOUR_VAR}>.właściwości i przekazać ten plik za

5

I Myślę, że powyższa odpowiedź wymaga aktualizacji:

Próbowałem utworzyć katalog dynamiczny do przechowywania moich artefaktów kompilacji upstream, więc chciałem przekazać mój numer kompilacji upstream do pracy downstream, którą wypróbowałem powyżej kroki, ale nie może sprawić, żeby to działało. Oto, jak zadziałało:

  1. Skopiowałem artefakty z mojej aktualnej pracy za pomocą wtyczki artefaktów kopiowania.
  2. W akcji budowania postów z pracy nadrzędnej dodałem zmienną taką jak "SOURCE_BUILD_NUMBER = $ {BUILD_NUMBER}" i skonfigurowałem ją do wyzwalania zlecenia dalszego.
  3. Wszystko działało, ale moje zlecenie niższego poziomu nie było w stanie uzyskać $ SOURCE_BUILD_NUMBER w celu utworzenia katalogu.
  4. Tak więc okazało się, że aby skorzystać z tej zmiennej muszę zdefiniować samą zmienną w dół strumienia pracy jako parametr zmienny jak na tym zdjęciu poniżej:

enter image description here

To dlatego, że w nowej wersji z Jennkins wymaga, abyś zdefiniował zmienną również w zadaniu downstream. Mam nadzieję, że to pomocne.

1

Czytając odpowiedzi, nie widzę innej opcji, która mi się podoba, więc również ją zaoferuję. Uwielbiam parametryzację miejsc pracy, ale nie zawsze dobrze się skaluje. Jeśli masz zadania, które nie znajdują się bezpośrednio za pierwszym zadaniem, ale dalej w rurociągu, tak naprawdę nie chcesz sparametryzować każdego zadania w potoku, aby móc przekazywać parametry przez cały czas. Lub jeśli masz dużą liczbę parametrów używanych przez wiele innych zadań (szczególnie tych, które niekoniecznie są powiązane z jednym zadaniem nadrzędnym lub nadrzędnym), ponowna parametryzacja nie działa.

W takich przypadkach preferuję wyprowadzanie wartości do pliku właściwości, a następnie wstrzykiwanie go w dowolne zadanie, którego potrzebuję, za pomocą wtyczki EnvInject. Można to zrobić dynamicznie, co jest kolejnym sposobem rozwiązania problemu z innej odpowiedzi powyżej, w której sparametryzowane zadania były nadal używane. To rozwiązanie bardzo dobrze sprawdza się w wielu sytuacjach.

2

Zmierzyłem się z tą samą kwestią, kiedy musiałem przekazać wersję pom do dalszej pracy w Rundeck.

Co zrobiłem, był przy zastrzyku parametrów za pomocą pliku właściwości jako takie:

1) Tworzenie właściwości w pliku właściwości poprzez skorupy:

budować działania:

  • Wykonaj skrypt
  • Wstawianie zmiennych środowiskowych

E.G: properties definition

2) Podjęcie zdefiniowanych właściwościach dalszemu pracy: post Budowanie Działania:

  • wyzwalania parametryzowane budować na inny projekt
  • Dodaj parametry: Aktualne parametry kompilacji
  • Dodaj parametry: predefiniowane parametry

Np: properties sending

3) Wtedy możliwe było użycie $ POM_VERSION jako takiego w dalszej pracy Rundeck.

/\ Jenkins Wersja: 1,636

/\ Z jakiegoś powodu podczas tworzenia wyzwalany budować, trzeba było dodać opcję „Aktualne parametry kompilacji” zdać właściwości!.

+0

EDYCJA: Znaleziono blooper w tym, co napisałem. we właściwościach definicji, powinno być: echo POM_VERSION = $ POM_VERSION> play.properties a nie: echo $ POM_VERSION >> play.properties Niestety o tym. –

Powiązane problemy