Próbuję przekonwertować mój przepływ pracy w starym stylu projektu na potok oparty na Jenkins. Przeglądając dokumenty, odkryłem, że istnieją dwie różne składnie o nazwach scripted
i declarative
. Na przykład declarative
niedawno wydana składnia internetowa Jenkins (koniec 2016 r.). Chociaż pojawiło się nowe wydanie składni, Jenkins nadal obsługuje również składnię skryptową.
Teraz nie jestem pewien, w której sytuacji każdy z tych dwóch typów byłby najlepiej dopasowany. A więc będzie declarative
przyszłość rurociągu Jenkins?
Każdy, kto może podzielić się przemyśleniami na temat tych dwóch typów składni.
jenkins
continuous-integration
jenkins-pipeline
Nayana Adassuriya
źródło
źródło
Odpowiedzi:
Skopiowano z https://jenkins.io/doc/book/pipeline/syntax/#compare
źródło
Kolejną rzeczą do rozważenia jest deklaratywne potoki mają krok script () . To może uruchomić dowolny potok skryptowy. Więc moim zaleceniem byłoby użycie potoków deklaratywnych, aw razie potrzeby użycie
script()
potoków skryptowych. Dlatego otrzymujesz to, co najlepsze z obu światów.źródło
script
bloku w potoku deklaratywnym, powinieneś rozważyć użycie całego potoku skryptowego.Niedawno przeszedłem na deklaratywne ze skryptów z agentem kubernetes. Do lipca 2018 roku deklaratywne potoki nie miały pełnej możliwości określania podów Kubernetes. Jednak po dodaniu
yamlFile
kroku możesz teraz odczytać szablon poda z pliku yaml w swoim repozytorium.Dzięki temu możesz użyć np. Świetnej wtyczki kubernetes vscode do walidacji szablonu pod, a następnie wczytać go do pliku Jenkinsfile i używać kontenerów w krokach, jak chcesz.
Jak wspomniano powyżej, możesz dodawać bloki skryptów. Przykładowy szablon pod z niestandardowym jnlp i dockerem.
źródło
deklaratywna wydaje się być bardziej przyszłościową opcją i tą, którą ludzie zalecają. jest to jedyne, które może obsługiwać Visual Pipeline Editor. obsługuje walidację. i kończy się na tym, że ma większość mocy skryptów, ponieważ w większości kontekstów możesz wrócić do skryptów. Czasami ktoś wymyśla przypadek użycia, w którym nie może zrobić tego, co chce, z deklaratywnym, ale zazwyczaj są to ludzie, którzy używają skryptów od jakiegoś czasu, a te luki w funkcjach prawdopodobnie znikną z czasem.
więcej kontekstu: https://jenkins.io/blog/2017/02/03/declarative-pipeline-ga/
źródło
Dokumentacja Jenkinsa właściwie wyjaśnia i porównuje oba typy.
Cytując: „Scripted Pipeline oferuje ogromną elastyczność i rozszerzalność użytkownikom Jenkinsa. Krzywa uczenia się Groovy nie jest zazwyczaj pożądana dla wszystkich członków danego zespołu, więc Declarative Pipeline został stworzony, aby zaoferować prostszą i bardziej upartą składnię dla autor Jenkins Pipeline.
Oba są zasadniczo tym samym podsystemem rurociągów pod spodem. "
Przeczytaj więcej tutaj: https://jenkins.io/doc/book/pipeline/syntax/#compare
źródło
Możesz również polecić to. Bardzo dobra lektura -> https://e.printstacktrace.blog/jenkins-scripted-pipeline-vs-declarative-pipeline-the-4-practical-differences/ @ Szymon.Stepniak https://stackoverflow.com/users/ 2194470 / szymon-stepniak? Tab = profile
źródło
Mam też to pytanie, które mnie tu sprowadziło. Deklaratywny potok z pewnością wydaje się preferowaną metodą i osobiście uważam go za znacznie bardziej czytelny, ale próbuję przekonwertować zadanie Freestyle na średnim poziomie złożoności na deklaratywne i znalazłem co najmniej jedną wtyczkę, wtyczkę Build Blocker, którą nie można uruchomić nawet w bloku skryptu w kroku (próbowałem umieścić odpowiednie polecenie "blockOn" wszędzie bez powodzenia, a błąd powrotu zwykle to "Nie znaleziono takiej metody DSL 'blockOn' wśród kroków" .) Więc myślę, że obsługa wtyczek to osobny problem, nawet w przypadku bloku skryptu (ktoś proszę mnie poprawić, jeśli się mylę). Musiałem też kilka razy użyć bloku skryptu, aby uzyskać to, co uważam za proste zachowanie działają, takie jak ustawienie nazwy wyświetlanej kompilacji.
Ze względu na moje doświadczenie skłaniam się ku przerobieniu mojej pracy zgodnie ze skryptem, ponieważ wsparcie dla Declarative wciąż nie jest tam, gdzie potrzebujemy, ale jest to niefortunne, ponieważ zgadzam się, że wydaje się to najbardziej przyszłościową opcją i jest oficjalnie obsługiwana. Może przed dokonaniem wyboru zastanów się, z ilu wtyczek zamierzasz korzystać.
źródło
Deklaratywna Rurociąg jest o wiele lepszy do skryptów Pipeline . Deklaratywny potok jest w stanie wykonać wszystko, co może wykonać skryptowany potok, korzystając z kroku skryptu i ma wiele dodatkowych funkcji.
Co więcej, Declarative Pipeline obsługuje różne technologie, takie jak Docker czy Kubernetes (patrz tutaj ).
Deklaratywny potok jest również bardziej przyszłościowy. Jest wciąż w fazie rozwoju, a nowe funkcje, takie jak nowo wprowadzona funkcja Matrix , zostały dodane niedawno pod koniec 2019 r.
tl; dr - Declarative Pipeline może zrobić wszystko, co Scripted Pipeline, a nawet więcej.
źródło