Żadna z tych odpowiedzi nie była dla mnie wystarczająca, korzystając z Jenkins CI v.1.555, wtyczki Git Client w wersji 1.6.4 i wtyczki Git 2.0.4.
Chciałem zbudować zadanie dla jednego repozytorium Git dla jednego określonego, stałego (tj. Niesparametryzowanego) tagu. Musiałem zebrać razem rozwiązanie z różnych odpowiedzi oraz wpis na blogu „Zbuduj tag Gita” cytowany przez Thilo .
- Upewnij się, że przekazujesz swój tag do zdalnego repozytorium za pomocą
git push --tags
- W sekcji „Repozytorium Git” zadania, pod nagłówkiem „Zarządzanie kodami źródłowymi” kliknij opcję „Zaawansowane”.
- W polu Refspec dodaj następujący tekst:
+refs/tags/*:refs/remotes/origin/tags/*
- W sekcji „Branże do zbudowania”, „Specyfikator gałęzi” wpisz
*/tags/<TAG_TO_BUILD>
(zastępując <TAG_TO_BUILD>
rzeczywistą nazwą tagu).
Dodanie Refspec okazało się dla mnie krytyczne. Chociaż wydawało się, że repozytoria git domyślnie pobierały wszystkie zdalne informacje, gdy zostawiłem je puste, wtyczka Git nie mogłaby jednak znaleźć mojego tagu. Dopiero gdy wyraźnie określiłem „pobierz zdalne tagi” w polu Refspec, wtyczka Git była w stanie zidentyfikować i zbudować z mojego tagu.
Aktualizacja 2014-5-7 : Niestety, to rozwiązanie ma niepożądany efekt uboczny dla Jenkins CI (v.1.555) i mechanizm powiadomień push repozytorium Git à la Stash Webhook to Jenkins : za każdym razem, gdy aktualizowana jest dowolna gałąź w repozytorium po naciśnięciu zadania tworzenia tagów również zostaną uruchomione ponownie. Prowadzi to do wielu niepotrzebnych ponownych kompilacji tych samych zadań tagów w kółko. Próbowałem skonfigurować zadania zarówno z opcją „Wymuś sondowanie przy użyciu obszaru roboczego”, jak i bez niej, ale wydawało się, że nie przyniosło to żadnego efektu. Jedynym sposobem, w jaki mógłbym uniemożliwić Jenkinsowi tworzenie niepotrzebnych kompilacji dla zadań tagów, jest wyczyszczenie pola Refspec (tj. Usunięcie +refs/tags/*:refs/remotes/origin/tags/*
).
Jeśli ktoś znajdzie bardziej eleganckie rozwiązanie, edytuj tę odpowiedź, aktualizując. Podejrzewam na przykład, że może tak się nie stało, gdyby refspec był konkretnie, +refs/tags/<TAG TO BUILD>:refs/remotes/origin/tags/<TAG TO BUILD>
a nie gwiazdką catch-all. Na razie jednak to rozwiązanie działa dla nas, po prostu usuwamy dodatkowy Refspec po pomyślnym wykonaniu zadania.