2015-07-10 9 views
5

Próbuję skonfigurować jenkins-workflow, aby wykonać nasze testy integracyjne. Nasze testy integracji działają w następujący sposób:Jak sprawić, by gałęzie z funkcjami git działały z Jennkins-workflow?

Ktoś dokonuje zmiany na LibraryA w gałęzi funkcji w git. Chcielibyśmy, aby firma Jennkins przeprowadziła testy jednostkowe w odniesieniu do kodu w gałęzi funkcji, a następnie chcielibyśmy zainstalować kod z tej gałęzi funkcji w client1 i client2 (którzy są użytkownikami LibraryA) i przeprowadzić ich testy.

Udało mi się skonfigurować przepływ pracy, aby zrobić wszystko z wyjątkiem uzyskania odpowiedniego zatwierdzenia do gałęzi funkcji LibraryA. Zamiast tego, moja instalacja po prostu wyciąga zatwierdzenie z jakiejś (pozornie przypadkowej) gałęzi LibraryA.

Posiadamy wiele gałęzi funkcjonalnych, więc kodowanie w konkretnym odgałęzieniu w konfiguracji przepływu pracy nie jest odpowiednie. Wygląda na to, że powinien istnieć jakiś sposób uzyskania skrótu zatwierdzenia, które uruchamia zadanie przepływu pracy (nawet podczas korzystania z odpytywania SCM).

Moja konfiguracja wygląda następująco:

currentBuild.setDisplayName("#" + env.BUILD_NUMBER) 

node { 
    git credentialsId: '033df7f1-7752-46bd-903d-8a70e613eed0', url: '[email protected]:mycompany/myrepo.git' 
    sh ''' 
echo `git rev-parse HEAD` > libraryA_version.txt 
sudo docker run --rm=true -e LANG=en_US.UTF-8 -a stdout -i -t mycompany/libraryA run_tests 
''' 
    archive 'libraryA_version.txt' 
} 

def integration_jobs = [:] 

integration_jobs[0]={ 
    node{ 
    ws { 
     unarchive mapping: ['libraryA_version.txt':'.'] 
     sh 'sudo docker run -t --rm mycompany/client1:v1 bash run_tests.sh "`cat libraryA_version.txt`"' 
    } 
    } 
} 

integration_jobs[1] = { 
    node{ 
    ws { 
     unarchive mapping: ['libraryA_version.txt' : '.'] 
     sh 'sudo docker run -t --rm mycompany/client2 run_tests.sh "`cat libraryA_version.txt`" ' 
    } 
    } 
} 

parallel integration_jobs 

Więc mój obecny pytanie brzmi jak mogę skonfigurować git repo/ankietowanie, aby uzyskać prawo zobowiązać się do uruchomienia w pierwszym badaniu, które zostaną wykorzystane w libraryA_version.txt w kolejnych testach?

Czy powinienem omówić ten proces w zupełnie inny sposób?

Odpowiedz

0

Funkcja, której szukasz, to "Build-Per-Branch" i moim zdaniem powinna być zaimplementowana odpowiednio za pomocą dopasowanych wtyczek.

  • Rozgałęzienie odbywa się w git.

  • Jenkins musi skopiować zlecenie budowy lub budowy potoku, aby pasowało do oddziału i było w stanie zbudować i przetestować oddział.

  • Po reintegracji git musi poinformować Jenkinsa i Jenkinsa o zamknięciu pracy.

znalazłem tej wtyczki:

https://wiki.jenkins-ci.org/display/JENKINS/Multi-Branch+Project+Plugin

I to plugin/Tutorial:

http://entagen.github.io/jenkins-build-per-branch/

Realizacja jest silnie uzależniona od scenariusza, więc nie może być bardziej szczegółowo. Mówię tylko, że wyzwania są następujące:

  • Budowanie zadań Jenkinsa, które mogą być wykonywane jednocześnie i niezależnie.

  • Praca z szablonami dla zadań Jenkins.

  • Obsługa zdarzeń między Jenkinsem a git.

W twoim przypadku:

  • zbudować cały proces jako rurociąg dostawy od przodu do końca.

  • Jeśli ktoś rozgałęzia się i implementuje obiekt, skopiuj cały rurociąg i przeprowadź cały rurociąg.

  • Uzyskaj to działanie, a następnie udoskonal.

+0

Tego właśnie się obawiałem. Tak zaczęliśmy. Mamy działający na wielu stanowiskach łańcuch narzędzi, ale ma on niepożądane cechy. Nie skaluje się z naszymi repo w tym sensie, że mamy za dużo zadań do zarządzania. Powiadomienia o niepowodzeniach i winowajcy nie działają dobrze. Konfiguracja pomiędzy stanowiskami jest nieoczekiwana. Właśnie dlatego wtyczka Jenn-Workflow jest przyjemna - konfiguracja całego łańcucha integracji jest jednym, dość kompaktowym zadaniem. – Robert

+0

Następnie pozwól nam odpowiedzieć na twoje oryginalne pytanie, oto lista zmiennych dotyczących pracy Jenkinsa: https://wiki.jenkins-ci.org/display/JENKINS/Building+a+software+project. W twoim przypadku GIT_COMMIT i GIT_BRANCH powinny być informacjami, których szukasz w budowaniu przepływu pracy. – blacklabelops

+0

Wydrukuję moje env vars na górze zadania, a te nie są dostępne. Najwyraźniej zadanie pracy Jenkinsa nie ustawia tych zmiennych GIT. "Poniższe zmienne są aktualnie niedostępne wewnątrz skryptu workflow: EXECUTOR_NUMBER node_name NODE_LABELS Workspace zmienne SCM-specyficzne takie jak SVN_REVISION" – Robert

3

Jak @maybeg zasugerował, czego najprawdopodobniej patrząc na to projekt wielobranżowy, dostępny po zainstalowaniu potoku: wielobranżowy. To pozwala ci zdefiniować skrypt w Jenkinsfile, który po prostu wywołuje jeden lub więcej razy w twojej kompilacji, unikając potrzeby libraryA_version.txt.

Tymczasem zastanawiam się nad konfiguracją projektu. Twój krok git używa wartości domyślnej branch: 'master', co oznacza, że ​​powinien odpytywać tylko od gałęzi master i sprawdzać tylko tę gałąź. Wtyczka Git jest dość skomplikowana, więc być może jest to w jakiś sposób zepsute. Oczekując na odpowiednią obsługę wielu gałęzi, zawsze możesz użyć kroku z GitSCM skonfigurowanym do korzystania ze specyfikacji karty wieloznacznej, w którym to przypadku do wyboru zostanie wybrana arbitralna głowa gałęzi, która nie została wcześniej zbudowana i twoja sztuczka git-rev-parse (pewnie ponownie odkryłeś obejście dla JENKINS-26100) powinno działać tak jak jest.

+0

OK, aby się zastanowić, w zadaniu przepływu pracy skonfiguruj sondowanie scm, aby wywołać zadanie po zatwierdzeniu, a następnie użyj krok 'checkout' z gałęzią wieloznaczną (**). Wybierze gałąź z głową, która nie została zbudowana, najlepiej gałąź zatwierdzenia, które uruchomiło zadanie? – Robert

+0

Nie ma gwarancji, że wybrane zatwierdzenie głowicy będzie przyczyną wyzwalacza, ale jest prawdopodobne. Nie wiadomo od ręki, co się stanie, jeśli w jednej sesji odpytywania zostanie odkrytych wiele kwalifikujących się głów - może to powodować wiele kompilacji, ale zawsze przy korzystaniu z odpytywania SCM (w tym."web/web")/git/notifyCommit) dobrze jest dodać '@ daily' /' @ hourly' do harmonogramu, aby wychwycić wszelkie bezpańskie zatwierdzenia. Ponownie, przy użyciu nadchodzącego przepływu pracy wielu ścieżek staje się to łatwiejsze: każda gałąź otrzymuje swój własny podprojekt, a notacja 'checkout scm' może być użyta ≥1 razy, aby uzyskać dopasowanie kas. –

+0

Udało mi się użyć nomenklatury "branch:" "z nową wtyczką Pipeline job pod Jenkins ver. 1.634. – MarkHu

Powiązane problemy