Jenkins CI: Jak wyzwalać kompilacje na podstawie zatwierdzenia SVN

79

Jakie wtyczki i funkcje wtyczek muszę ustawić, aby moje zadanie Jenkinsa uruchamiało kompilację za każdym razem, gdy kod jest przydzielany do projektu SVN?

Zainstalowałem zarówno standardową wtyczkę SVN, jak i wtyczkę do tagowania SVN, ale nie widzę żadnych nowych funkcji umożliwiających konfigurację wyzwalacza.

IAmYourFaja
źródło
1
możliwy duplikat Trigger hudson build when svn commit
highlycaffeinated

Odpowiedzi:

86

Można to zrobić na dwa sposoby:

Na początek polecam pierwszą opcję ze względu na łatwość jej wdrożenia. Gdy dojrzejesz w procesach kompilacji, przełącz się na drugą.

  1. Sonduj repozytorium, aby zobaczyć, czy nastąpiły zmiany. Może to "pominąć" zatwierdzenie, jeśli dwa zatwierdzenia pojawią się w tym samym interwale sondowania. Opis tego, jak to zrobić , zwróć uwagę na czwarty zrzut ekranu, na którym konfigurujesz w zadaniu „wyzwalacz kompilacji” oparty na odpytywaniu repozytorium (z konfiguracją podobną do crontab).

  2. Skonfiguruj repozytorium tak, aby miało punkt zaczepienia po zatwierdzeniu, który powiadamia Jenkinsa, że ​​musi rozpocząć się kompilacja. Opis jak to zrobić tutaj , w sekcji „punkty zaczepienia po zatwierdzeniu”

Funkcja znacznika SVN nie jest częścią odpytywania, jest częścią promowania aktualnego „nagłówka” kodu źródłowego do tagu w celu wykonania migawki kompilacji. Pozwala to na odniesienie się do Jenkinsa buid # 32 jako tag / tags / build-32 SVN (lub coś podobnego).

Edwin Buck
źródło
haki po zatwierdzeniu rock. Krótsze czasy odpowiedzi i (na dużą skalę) system CI nie niszczy repozytorium źródłowego setkami żądań dziennika zmian.
EricMinick
5
@EricMinick Są świetne, ale czasami mogą stopić serwer CI, jeśli w krótkim czasie otrzymujesz dużo małych zatwierdzeń. To wszystko konie na kursy i trudno jest wiedzieć, która metoda jest korzystna bez analizy, jak obecnie przebiega proces tworzenia.
Edwin Buck
1
@EdwinBuck: Czy wiesz, czy istnieje sposób skonfigurowania Jenkinsa do budowania tylko selektywnych zatwierdzeń? Wyjaśnię, mam tortoiseSVN i projekt Jenkins, który ciągle odpytuje repozytorium. Teraz, jeśli chcę, aby zatwierdzenie, które wykonuję, nie powodowało uruchomienia Jenkinsa, czy istnieje sposób, aby to zrobić?
SandBag_1996
@UnderDog Jeśli dojrzałeś do punktu, w którym masz wyzwalacz po zatwierdzeniu w maven, to wolę rozwiązanie, które szuka specjalnych "słów kluczowych" w wyzwalaczu po zatwierdzeniu i po ich odkryciu decyduje się NIE mówić Jenkinsowi serwer, aby uruchomić nową kompilację. Na przykład „^ DONTBUILD -. *” Może być użyte jako flaga „nie buduj”, jeśli jest podane w pierwszym wierszu zatwierdzenia.
Edwin Buck,
@mxdsp Zaktualizowano łącze. Nie jest tak ładny jak stary wandisco, ale wykona swoje zadanie. Dziękuję Ci!
Edwin Buck
2

Potrzebujesz tylko jednej wtyczki, którą jest wtyczka Subversion.

Następnie po prostu przejdź do Jenkins → nazwa_zadania → sekcja Wyzwalacz budowania → (i) Uruchom budowanie zdalnie (tj. Ze skryptów) Token uwierzytelniania: Token_name

Przejdź do katalogu hooks serwera SVN, a następnie po odpaleniu wykonaj poniższe polecenia:

  1. cp post-commit.tmpl post-commit
  2. chmod 777 post-commit
  3. chown -R www-data:www-data post-commit
  4. vi post-commit

    Uwaga: Wszystkie wiersze powinny być komentowane. Na koniec dodaj poniższy wiersz

Składnia (dla użytkowników Linuksa):

/usr/bin/curl http://username:API_token@localhost:8081/job/job_name/build?token=Token_name

Składnia (dla użytkownika systemu Windows):

C:/curl_for_win/curl http://username:API_token@localhost:8081/job/job_name/build?token=Token_name
Hemin Patel
źródło
Ta odpowiedź jest mniej więcej identyczna z tą odpowiedzią .
Peter Mortensen
1

Stworzyłem narzędzie używając Pythona z odrobiną basha, aby wywołać kompilację Jenkinsa. Zasadniczo musisz zebrać te dwie wartości z post-commit, kiedy zatwierdzenie trafi na serwer SVN:

REPOS="$1"
REV="$2"

Następnie użyj polecenia „svnlook dirs -anged $ 1 -r $ 2”, aby uzyskać ścieżkę, która została właśnie zatwierdzona. Następnie możesz sprawdzić, które repozytorium chcesz zbudować. Wyobraź sobie, że masz setki tysięcy projektów. Nie możesz sprawdzić całego repozytorium, prawda?

Możesz sprawdzić mój skrypt z GitHub .

Phan Dolphy
źródło
-1

Możesz użyć haka po zatwierdzeniu.

Umieść skrypt przechwytujący po zatwierdzeniu w hooksfolderze, utwórz plik wget_folderna dysku C: \ i umieść wget.exeplik w tym folderze. Dodaj następujący kod w pliku o nazwiepost-commit.bat

SET REPOS=%1   
SET REV=%2

FOR /f "tokens=*" %%a IN (  
'svnlook uuid %REPOS%'  
) DO (  
SET UUID=%%a  
)  

FOR /f "tokens=*" %%b IN (  
'svnlook changed --revision %REV% %REPOS%'  
) DO (  
SET POST=%%b   
)

echo %REPOS% ----- 1>&2

echo %REV% -- 1>&2

echo %UUID% --1>&2

echo %POST% --1>&2

C:\wget_folder\wget ^   
    --header="Content-Type:text/plain" ^   
    --post-data="%POST%" ^   
    --output-document="-" ^   
    --timeout=2 ^     
    http://localhost:9090/job/Test/build/%UUID%/notifyCommit?rev=%REV%    

gdzie Test = nazwa zadania

echosłuży do wyświetlania wartości, a exit 2na końcu można dodać, aby dowiedzieć się o problemie i czy skrypt przechwytujący po zatwierdzeniu jest uruchomiony, czy nie.

Megha
źródło