Jak uruchomić zadanie Jenkins po sukcesie wielu jednoczesnych zadań upstream?

Aby uzyskać jak najszybsze informacje zwrotne, czasami chcemy, aby zadania Jenkinsa działały równolegle. Jenkins ma możliwość uruchamiania wielu kolejnych zadań (lub "rozwidlania" potoku) po zakończeniu zadania. Wydaje się jednak, że Jenkins nie ma żadnego sposobu na zrobienie zadania podrzędnego tylko początek wszystkich gałęzi tego widelca (lub "połączenie" widelca z powrotem).

Jenkins ma przycisk "Build after other projects are built", ale interpretuję to jako " start this job when any upstream job finishes "(Nie"start this job when all upstream jobs successful").

Oto wizualizacja tego, o czym mówię. Czy ktoś wie, czy istnieje plugin do robienia tego, czego szukam? Budowa Rurociągu


Edit:

Kiedy pierwotnie opublikowałem to pytanie w 2012 roku, odpowiedź Jasona (Dołącz i promuj wtyczki Build) była najlepsza, a rozwiązanie wybrałem.

Jednak odpowiedź dnozaya (Wtyczka Build Flow) stała się popularna rok lub więc po tym pytaniu, które jest znacznie lepszą odpowiedzią. Jeśli to coś warte, jeśli ludzie zadają mi to pytanie dzisiaj, teraz polecam to zamiast tego.

Author: Captain Man, 2012-01-26

6 answers

Są dwa rozwiązania, które stosowałem w przeszłości w tym scenariuszu:

  1. Użyj wtyczki Join w swoim zadaniu "deploy" i określ "Promuj" jako zadanie docelowe. Będziesz musiał określić "testy funkcjonalne" i "testy wydajności" jako połączone zadania i uruchomić je za pomocą w jakiś sposób, post build. Sparametryzowana Wtyczka wyzwalająca jest do tego dobra.

  2. Użyj promowane buduje Plugin na" wdrożyć " zadanie, określ promocję działa po zakończeniu zadań podrzędnych i określeniu zadań testowych funkcjonalnych i wydajnościowych. W ramach akcji promocyjnej Uruchom zadanie "Promuj". Nadal musisz uruchomić dwa zadania testowe od"deploy"

Istnieje krytyczny aspekt obu tych rozwiązań: odciski palców muszą być prawidłowo używane. Oto co znalazłem:

  1. zadanie "build" musi pochodzić z nowego pliku z odciskami palców. Innymi słowy, musi odcisnąć jakiś plik, który Jenkins uważa za / align = "left" / Sprawdź dwukrotnie link "Zobacz odciski palców" zadania, aby to zweryfikować.
  2. wszystkie powiązane zadania (w tym przypadku "deploy"," testy funkcjonalne "i" testy wydajności") muszą uzyskać i odcisnąć ten sam plik. Wtyczka do kopiowania artefaktów jest świetna do tego rodzaju rzeczy.
  3. Należy pamiętać, że niektóre wtyczki pozwalają zmienić kolejność pobierania odcisków palców i uruchamiania zadań downstream; w tym przypadku pobieranie odcisków palców musi nastąpić przed pobieraniem job fingerprints ten sam plik, aby upewnić się, że pochodzenie odcisku palca jest prawidłowo ustawione.
 26
Author: Jason Swager,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-08 18:15:40

Wtyczka Pipeline

Możesz użyć wtyczki Pipeline (dawniej workflow-plugin).

Zawiera wiele przykładów , a Ty możesz śledzić ten tutorial .

Np.

// build
stage 'build'
...

// deploy
stage 'deploy'
...

// run tests in parallel
stage 'test'
parallel 'functional': {
  ...
}, 'performance': {
  ...
}

// promote artifacts
stage 'promote'
...

Build flow plugin

Możesz również użyć wtyczki Build Flow. Jest po prostu niesamowity-ale jest przestarzały (rozwój zamrożony).

Tworzenie miejsc pracy

Tworzenie miejsc pracy za:

  • zbuduj
  • testy wydajnościowe
  • testy funkcjonalne
  • promocja

Ustawianie upstream

  1. W upstream (tutaj build) Stwórz unikalny artefakt, np.:

    echo ${BUILD_TAG} > build.tag
    
  2. Archiwum artefaktu build.tag.

  3. nagrywaj odciski palców, aby śledzić użycie pliku; Jeśli dowolne zadanie skopiuje ten sam plik build.tag i zapisze odciski palców, będziesz mógł śledzić rodzic.
  4. Konfiguracja, aby uzyskać awans, gdy zadanie promotion zakończy się sukcesem.

Tworzenie dalszych zadań

  1. używam 2 parametrów PARENT_JOB_NAME i PARENT_BUILD_NUMBER
  2. Skopiuj artefakty z zadania upstream build za pomocą wtyczki Copy Artifact

    • Nazwa projektu = ${PARENT_JOB_NAME}
    • które budują = ${PARENT_BUILD_NUMBER}
    • artefakty do skopiowania = build.tag
  3. Nagrywać odciski palców; to kluczowe.

Ustawianie posady w Dziale Promocji

Zrób to samo, co powyżej, aby ustanowić relację upstream-downstream. Nie wymaga żadnego kroku budowania. Możesz wykonać dodatkowe działania po kompilacji, takie jak "Hej QA, twoja kolej".

Tworzenie zadania build flow

// start with the build
parent = build("build")
parent_job_name = parent.environment["JOB_NAME"]
parent_build_number = parent.environment["BUILD_NUMBER"]

// then deploy
build("deploy")

// then your qualifying tests
parallel (
    { build("functional tests",
          PARENT_BUILD_NUMBER: parent_build_number,
          PARENT_JOB_NAME: parent_job_name) },
    { build("performance tests",
          PARENT_BUILD_NUMBER: parent_build_number,
          PARENT_JOB_NAME: parent_job_name) }
)

// if nothing failed till now...
build("promotion",
    PARENT_BUILD_NUMBER: parent_build_number,
    PARENT_JOB_NAME: parent_job_name)

// knock yourself out...
build("more expensive QA tests",
    PARENT_BUILD_NUMBER: parent_build_number,
    PARENT_JOB_NAME: parent_job_name)
Powodzenia.
 30
Author: dnozay,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-01 23:25:25

Jenkins niedawno ogłosił pierwszorzędną obsługę przepływu pracy.

 11
Author: Andrew Gray,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-01 06:49:07

Wtyczka Multijob działa pięknie dla tego scenariusza. Przydaje się również, jeśli chcesz, aby jedno zadanie "rodzica" rozpoczęło wiele zadań "dzieci", ale nadal możesz wykonać każde z dzieci ręcznie, samodzielnie. Działa to poprzez tworzenie "faz", do których można dodać 1 do n zadań. Budowanie jest kontynuowane tylko wtedy, gdy cała faza jest wykonywana, więc jeśli Faza jako wiele zadań, wszystkie muszą zakończyć się przed wykonaniem reszty. Oczywiście jest konfigurowalne, czy budowa kontynuuje, jeśli nie ma awarii w fazie.

 8
Author: tbradt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-11 15:42:57

Odpowiedzi Jasona i dnozaya są wystarczająco dobre. Ale w przypadku, gdy ktoś szuka łatwego sposobu, wystarczy użyć wtyczki jobfanin .

 3
Author: Yogesh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-01 05:01:53

Uważam, że wtyczka Workflow nazywa się teraz Pipeline Plugin i jest (aktualnym) preferowanym rozwiązaniem oryginalnego pytania, zainspirowanym Wtyczką Build Flow. Istnieje również Getting Started Tutorial w Githubie.

 1
Author: geipel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-14 19:39:15