Mam problemy z utworzeniem przez Jenkinsa określonego tagu. Znacznik jest częścią sparametryzowanej kompilacji, ale nie wiem, jak przekazać to do wtyczki git, aby po prostu zbudować ten tag. Zajęło mi to 3 godziny mojego dnia i przyznałem mistrzom porażkę przy przepełnieniu stacka.
120
Odpowiedzi:
Udało mi się to zrobić za pomocą parametru „branch to build”:
Zastąp [nazwa-tagu] nazwą swojego tagu.
źródło
HEAD
. Logika wtyczki git wydaje się porównywać te dwie wersje, które w moim repozytorium są zawsze nierówne, a zatem zawsze uruchamiana jest nowa kompilacja.Ż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 .
git push --tags
+refs/tags/*:refs/remotes/origin/tags/*
*/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.źródło
+refs/heads/*:refs/remotes/origin/*
, teraz będzie+refs/heads/*:refs/remotes/origin/* +refs/tags/*:refs/remotes/origin/tags/*
. (Nie pracowałem zbyt wiele z refspecami, więc zajęło trochę eksperymentów, aby dowiedzieć się, że to pole jest ograniczone przestrzenią.)Czy nie możesz powiedzieć Jenkinsowi, aby budował z nazwy referencyjnej? Jeśli tak, to tak
Ze wszystkich pytań, które widzę na temat Jenkinsa i Hudsona, sugerowałbym przejście na TeamCity. Nie musiałem edytować żadnych plików konfiguracyjnych, aby TeamCity działało.
źródło
git push --tags
Jeśli używasz potoków Jenkinsa i chcesz pobrać konkretny tag (np.
TAG
Parametr swojej kompilacji), oto co możesz zrobić:źródło
W najnowszym Jenkinsie (1.639 i nowszym) możesz:
źródło
1.0.1
) W gałęziach do budowania pola.Zrobiłem coś takiego i zadziałało:
Dziennik Jenkinsa potwierdził, że pobierał źródło z tagu
Sprawdzanie wersji
0b4d6e810546663e931cccb45640583b596c24b9
(v0.9.5.2)źródło
refspec
było sztuczką, klikając przycisk Zaawansowane.Ustawiam pole Advanced-> Refspec na
refs/tags/[your tag name]
. Wydaje się to prostsze niż różne inne sugestie dotyczące Refspec, ale dla mnie zadziałało dobrze.AKTUALIZACJA 23.07.2014 - Właściwie po dalszych testach okazuje się, że nie działa to zgodnie z oczekiwaniami. Wygląda na to, że wersja HEAD wciąż była sprawdzana. Cofnij to jako zaakceptowaną odpowiedź. Skończyło się na tym, że otrzymałem działające rozwiązanie, śledząc post z gotgenes w tym wątku (30 marca). Wspomniany w tym poście problem niepotrzebnego wyzwalania kompilacji nie był dla mnie problemem, ponieważ moja praca jest uruchamiana z zadania nadrzędnego, a nie z odpytywania SCM.
AKTUALIZACJA KWIECIEŃ-2018 - Zwróć uwagę w komentarzach, że działa to dla jednej osoby i zgadza się z dokumentacją Jenkins.
źródło
refs/tags/<tagname>
jest tym, co mówi dokumentacja Jenkinsa , i dla mnie działa dobrze. Być może wtyczka zawierała błędy w czasie publikacji oryginalnego posta, ale ... od kwietnia 2018 r. To jest poprawna odpowiedź.refs/tags
prefiks i po prostu użyć<tagname>
. YMMV, ale ... do moich celów działa dobrze.Udało mi się skłonić Jenkinsa do zbudowania tagu, ustawiając Refspec i specyfikator gałęzi zgodnie z opisem w tym poście na blogu .
Musiałem również ustawić nazwę repozytorium (w moim przypadku na „origin”), aby móc odwoływać się do niego w Refspec (w przeciwnym razie najwyraźniej używałby losowo wygenerowanej nazwy).
źródło
W końcu zrobiłem:
jenkins-target
i skłonił Jenkinsa do śledzenia tegojenkins-target
jenkins-target
gałęziNie jestem pewien, czy to zadziała dla wszystkich, mój projekt był dość mały, niezbyt wiele tagów i innych rzeczy, ale jest bardzo łatwy do zrobienia, nie musisz się bawić z refspecami i parametrami i tak dalej :-)
źródło
Możesz zbudować nawet typ tagu, na przykład
1.2.3-alpha43
używając symboli wieloznacznych:Refspec:
+refs/tags/*:refs/remotes/origin/tags/*
Specyfikator gałęzi:
origin/tags/1.2.3-alpha*
Możesz również zaznaczyć opcję „Kompiluj, gdy zmiana zostanie przesłana do GitHub ”, aby wywołać wypychanie, ale musisz dodać akcję „ Utwórz ” do elementu webhook
źródło
Dodając tutaj moje dwa centy, ponieważ nie widziałem odpowiedzi używającej opcji „Buduj z parametrami” w Jenkinsie.
Tutaj używam konsoli przeglądarki Jenkins CI dla projektu starwars_api i mogłem budować bezpośrednio z "Buduj z parametrami" z wartościami refs / tags / tag-name
build z nazwą tagu ref
źródło