Jak powiedzieć Jenkins / Hudson, aby wyzwalał kompilację tylko w przypadku zmian w określonym projekcie w moim drzewie Git?
87
Wtyczka Git ma opcję (wykluczony region), aby użyć wyrażeń regularnych w celu określenia, czy pominąć budowanie na podstawie tego, czy pliki w zatwierdzeniu pasują do wyrażenia regularnego wykluczonego regionu.
Niestety, standardowa wtyczka Git nie ma obecnie funkcji „dołączonego regionu” (1.15). Jednak ktoś opublikował poprawki na GitHub, które działają na Jenkins i Hudson, które implementują żądaną funkcję.
Jest to trochę pracy do zbudowania, ale działa zgodnie z reklamą i jest niezwykle przydatne, ponieważ jedno z moich drzew Git ma wiele niezależnych projektów.
https://github.com/jenkinsci/git-plugin/pull/49
Aktualizacja: Wtyczka Git (1.16) ma teraz funkcję „uwzględnionego” regionu.
Ignored commit c6e2b1dca0d1885: No paths matched included region whitelist
. Jakaś wskazówka? Więcej szczegółów tutaj: stackoverflow.com/questions/47439042/…Zasadniczo potrzebujesz dwóch miejsc pracy. Jeden, aby sprawdzić, czy pliki się zmieniły, i drugi, aby wykonać właściwą kompilację:
Zadanie nr 1
Powinno to być uruchamiane po zmianach w repozytorium Git. Następnie sprawdza, czy określona ścieżka (tutaj „src”) ma zmiany, a następnie używa interfejsu wiersza polecenia Jenkinsa do wyzwolenia drugiego zadania.
Zadanie nr 2
Skonfiguruj to zadanie tak, aby przyjmowało parametr GIT_REVISION w ten sposób, aby upewnić się, że tworzysz dokładnie tę wersję, którą zbudowało pierwsze zadanie.
źródło
$? || exit 0
...test $? -eq 0 || exit 0
może?Jeśli używasz deklaratywnej składni Jenkinsfile do opisania potoku budowania, możesz użyć warunku zestawu zmian , aby ograniczyć wykonywanie etapu tylko do przypadku, gdy określone pliki zostaną zmienione. Jest to teraz standardowa funkcja Jenkinsa i nie wymaga żadnej dodatkowej konfiguracji / oprogramowania.
Możesz łączyć wiele warunków, używając słów kluczowych
anyOf
lub odpowiednioallOf
dla zachowania OR lub AND :źródło
Chociaż nie ma to wpływu na pojedyncze zadania, możesz użyć tego skryptu, aby zignorować niektóre kroki, jeśli najnowsze zatwierdzenie nie zawierało żadnych zmian:
źródło
api/
folderu). Jeśli możesz to naprawić, chciałbym zaproponować sugerowaną zmianę !Jeśli logika wyboru plików nie jest trywialna, wyzwalałbym wykonanie skryptu przy każdej zmianie, a następnie napisałbym skrypt, aby sprawdzić, czy rzeczywiście jest wymagana kompilacja, a następnie wyzwolić kompilację, jeśli jest.
źródło
Możesz do tego użyć Generic Webhook Trigger Plugin .
Ze zmienną taką jak
changed_files
i wyrażeniem$.commits[*].['modified','added','removed'][*]
.Możesz mieć tekst filtru, taki jak
$changed_files
i wyrażenie regularne filtru, takie jak"folder/subfolder/[^"]+?"
iffolder/subfolder
to folder, który powinien wyzwalać kompilacje.źródło
Odpowiedziałem na to pytanie w innym poście:
Jak uzyskać listę zmienionych plików od ostatniej kompilacji w Jenkins / Hudson
Możesz dodać czek bezpośrednio na górę powłoki exec zadania i zrobi to,
exit 0
jeśli nie zostaną wykryte żadne zmiany ... Dlatego zawsze możesz sondować najwyższy poziom, aby sprawdzić, czy uruchomi kompilację.źródło
Napisałem ten skrypt, aby pomijać lub wykonywać testy, jeśli są zmiany:
Możesz więc zrobić coś takiego:
./scripts/git-run-if-changed.sh cmd vendor go.mod go.sum fixtures/ tools/ -- go test
źródło