W tworzeniu oprogramowania potoki CI/CD lub ciągłej integracji/ciągłego dostarczania pomagają w budowaniu i wdrażaniu kodu w różnych środowiskach w ramach zautomatyzowanego procesu.
Jednak utworzenie i utrzymanie tego potoku samo w sobie może stać się trudnym zadaniem. Wprowadź potok jako kod — podejście, w którym tworzysz cały potok CI/CD w formacie kodu. Zamiast polegać na internetowych interfejsach użytkownika i narzędziach typu „przeciągnij i upuść”, używasz plików konfiguracyjnych do definiowania sposobu budowania, testowania i wdrażania kodu aplikacji.
Zanim jednak przejdziemy do szczegółów Pipeline jako kodu i tego, jak możesz zbudować swój własny, najpierw zrozummy, czym dokładnie jest potok.
Spis treści:
Co to jest potok w rozwoju oprogramowania?
Potok w tworzeniu oprogramowania to seria zautomatyzowanych kroków, które pobierają najnowsze zmiany w kodzie, uruchamiają na nim określone procesy i wdrażają je w wybranym przez Ciebie środowisku. Rozumiemy to lepiej na przykładzie.
Wyobraź sobie, że masz trzy mikrousługi i do jednego z nich dodałeś nowe funkcje. Teraz chcesz uruchomić testy jednostkowe na poziomie kodu. Po ich przejściu warto także sprawdzić, czy nie występują problemy z formatowaniem kodu. Następnie chcesz zbudować swój kod. Następnie chcesz wdrożyć go w dwóch różnych środowiskach z wieloma maszynami w każdym środowisku. Na koniec warto przeprowadzić testy integracyjne, aby upewnić się, że zmiany są zsynchronizowane z innymi usługami.
Możesz wykonać wszystkie powyższe kroki ręcznie. Ale to zajmie dużo czasu i będziesz podatny na błędy. Czy istnieje zatem sposób na ich zautomatyzowanie? Tak! Można utworzyć potok i zdefiniować wszystkie kroki. Następnie za każdym razem, gdy wprowadzisz zmiany w kodzie, możesz uruchomić potok i nie martwić się o żadne ręczne kroki.
Korzyści z Pipeline jako kodu
Jeśli używasz narzędzi takich jak przeciąganie i upuszczanie, śledzenie zmian, utrzymywanie standaryzacji lub promowanie współpracy staje się trudne. Pipeline as Code to lepszy sposób na zdefiniowanie potoku rozwoju oprogramowania.
Pomaga zachować spójność. Promując automatyzację, zyskujesz powtarzalność i wykorzystanie tego samego potoku dla innych systemów. I podobnie jak kod aplikacji, kod używany do definiowania potoku promuje współpracę.
#1. Konsystencja
Zdefiniowanie w formacie tekstowym gwarantuje, że nic nie stanie się nie w porządku. Wymuszając standardowy przepływ pracy dla wszystkich kompilacji i wdrożeń aplikacji, uzyskujesz spójność i zmniejszasz ryzyko nieoczekiwanych problemów.
Dzięki spójności zyskujesz także kontrolę zgodności i bezpieczeństwo. Zapewnienie spójnego potoku umożliwia zdefiniowanie skanów bezpieczeństwa i kontroli podatności na ataki w taki sposób, że nic nie umknie Twojej uwadze.
#2. Powtarzalność
Stwórz swój potok i ustaw automatyzację. Oprócz spójności zautomatyzowany potok zapewnia, że każdy kod aplikacji przechodzi przez te same etapy i kontrole.
Twój kod będzie przechodził przez ten sam proces kompilacji i wdrażania przy każdym uruchomieniu potoku. Utrzymujesz powtarzalność we wszystkich swoich seriach.
#3. Współpraca
Ponieważ kod jest medium, za pomocą którego tworzysz potok, promujesz współpracę. Wiele osób w Twoich zespołach może współtworzyć ten sam kod, tak jak w przypadku kodu aplikacji.
Pipeline as Code pozwala także zachować kontrolę wersji i umożliwia przeglądanie kodu. Gwarantuje to przestrzeganie najlepszych praktyk i wczesne wykrywanie potencjalnych problemów.
Przyjrzyjmy się teraz, jak utworzyć własny potok przy użyciu potoku jako kodu.
Pipeline jako kod w Jenkins
Jeśli chodzi o systemy ciągłej integracji i ciągłego wdrażania (CI/CD), Jenkinsa jest wiodącym serwerem automatyzacji typu open source. Dzięki Jenkins możesz bez wysiłku integrować zmiany w kodzie, automatyzować testowanie i budowanie oraz wdrażać oprogramowanie. A wszystko to możesz zrobić niezawodnie i efektywnie.
Niezależnie od tego, czy jesteś hobbystą, który chce dowiedzieć się więcej o potokach automatyzacji, czy też budujesz złożone systemy dla przedsiębiorstw, Jenkins spełnia wszystkie unikalne wymagania Twojego projektu. Bogactwo wtyczek i stale rosnąca społeczność mogą pomóc Ci w pełni wykorzystać automatyzację.
W Jenkins Pipeline to zestaw różnych wtyczek zdefiniowanych w określonej kolejności, które tworzą Twój system CI/CD. Niezależnie od tego, czy są to proste, czy złożone przypadki użycia, możesz utworzyć potok za pomocą kodu z rozszerzeniem Składnia języka specyficznego dla domeny (DSL) potoku. DSL jest zbudowany na górze Apache Groovy.
Podstawą Pipeline as Code w Jenkins jest Plik Jenkinsa – plik tekstowy zawierający kod opisujący wszystkie etapy i działania. Nauczmy się, jak utworzyć potok jako kod przy użyciu pliku Jenkinsfile.
Jak stworzyć swój potok jako kod?
Po zainstalowaniu i uruchomieniu Jenkinsa przejdź do interfejsu internetowego w przeglądarce. Być może będziesz musiał się zalogować. Następnie znajdziesz się na głównej stronie Panelu. Zaczniesz od tego miejsca i utworzysz potok.
Zacznijmy od prostego potoku, który możesz skonfigurować bezpośrednio z interfejsu użytkownika.
Utwórz potok jako kod bezpośrednio w Jenkins
Gdy znajdziesz się w sekcji potok, możesz utworzyć swój pierwszy potok jako kod.
Z menu rozwijanego Definicja wybierz opcję Skrypt potoku. Poniżej znajdziesz obszar Skrypt, w którym możesz zakodować swój potok. Jenkins utrzymuje utworzony tutaj skrypt.
Jenkins umożliwia wybór pomiędzy dwoma stylami kodowania lub składniami – składnią deklaratywną i składnią skryptową. Chociaż deklaratywna jest łatwa w użyciu i idealna dla prostych potoków, składnia skryptowa jest przeznaczona dla zaawansowanych użytkowników i projektowania złożonych przepływów.
Używając składni deklaratywnej, utwórz 3 proste etapy – zbuduj kod, przetestuj kod i wdróż kod, używając następującego fragmentu kodu:
pipeline { agent any stages { stage('Build Code') { steps { echo 'This is the step for build...' } } stage('Test Code') { steps { echo 'This is the step to test...' } } stage('Deploy Code') { steps { echo 'This step deploys the code...' } } } }
Możesz także użyć składni skryptowej, jak pokazano poniżej:
node { stage('Build Code') { echo 'This is the step for build...' } stage('Test Code') { echo 'This is the step to test...' } stage('Deploy Code') { echo 'This step deploys the code...' } }
Kliknij Zapisz. Teraz kliknij przycisk Buduj teraz znajdujący się w lewym panelu. Spowoduje to uruchomienie właśnie utworzonego potoku.
Po zakończeniu potoku możesz to sprawdzić w Historii kompilacji. Jeśli jest to Twoje pierwsze uruchomienie, kliknij obecny numer kompilacji nr 1. Następnie kliknij Wyjście konsoli obecne w lewym panelu. Na każdym etapie znajdziesz 3 instrukcje echo, które masz w kodzie potoku.
Utwórz potok jako kod, używając pliku zewnętrznego
Utrzymanie rurociągu bezpośrednio w Jenkins staje się wyzwaniem, gdy zaczyna się to komplikować. W takim przypadku chciałbyś utworzyć plik zewnętrzny i użyć go.
Zanim utworzysz potok Jenkins, potrzebujesz zewnętrznego repozytorium i systemu kontroli wersji. Stwórzmy repozytorium Git i hostujmy je zdalnie w GitHubie. Utworzysz plik Jenkinsfile i zapiszesz go tutaj.
pipeline { agent any stages { stage('Build Code') { steps { echo 'This is the step for build defined in custom file...' } } stage('Test Code') { steps { echo 'This is the step to test defined in custom file...' } } stage('Deploy Code') { steps { echo 'This step defined in custom file deploys the code...' } } } }
Utworzyłeś teraz zdalne repozytorium w GitHub, które zawiera niestandardowy plik Jenkinsfile. Skonfigurujmy Jenkinsa, aby z tego korzystał.
Skonfiguruj Jenkinsa do korzystania z Jenkinsfile z GitHub
Następnie uruchom potok. Jenkins najpierw pobierze Twój kod ze zdalnego repozytorium. Następnie utworzy potok przy użyciu niestandardowego pliku Jenkinsfile i uruchomi wszystkie etapy.
Udało Ci się teraz pomyślnie utworzyć własny potok tworzenia oprogramowania, używając Pipeline jako kodu. Ponadto w skrypcie potoku włączono kontrolę wersji. Wszelkie zmiany wprowadzone w kodzie potoku można teraz śledzić przy każdym zatwierdzeniu Git. Następnie przyszedł czas na przyjrzenie się najlepszym praktykom.
Najlepsze praktyki dotyczące pisania skutecznego potoku w postaci kodu
Przyjrzyjmy się najlepszym praktykom, których należy przestrzegać podczas pisania potoku jako kodu.
- Utrzymuj rurociąg w czystości i unikaj pisania zbyt wielu skomplikowanych warunków.
- Jeśli wykonujesz zbyt wiele poleceń w potoku, podziel je na różne kroki.
- Używaj plików zewnętrznych z kontrolą wersji dla swojego potoku jako skryptów kodu.
- Wykorzystaj funkcje języka kodowania, takie jak Groovy, aby zintegrować różne kroki.
- Unikaj wywołań Jenkins.getInstance lub jego metod dostępu, aby złagodzić problemy z bezpieczeństwem i wydajnością.
- Nie nadpisuj wbudowanych poleceń potoku, takich jak sh i timeout.
- Twórz zewnętrzne narzędzia lub skrypty do złożonych zadań intensywnie obciążających procesor i podłączaj je do swojego potoku.
- Wykorzystaj szeroką gamę istniejących wtyczek dostępnych dla Jenkins, aby rozwiązać swój przypadek użycia.
- Upewnij się, że uwzględniłeś obsługę wyjątków i błędów, ponieważ coś może pójść nie tak.
- Nie twórz potoku jako kodu ściśle powiązanego z dużą ilością logiki biznesowej w nim zawartej.
- Jeśli to możliwe, używaj sparametryzowanych argumentów, aby umożliwić ponowne użycie potoku.
Rurociąg jako kod: proste podejście do złożonych procesów
Podsumowując, Pipeline as Code upraszcza automatyzację potoku CI/CD, przedstawiając cały proces jako kod. Podczas gdy potoki CI/CD automatyzują budowanie, testowanie i wdrażanie zmian w kodzie, wykorzystanie Pipeline as Code idzie o krok dalej. Pozwala zdefiniować przepływ pracy w tekście, zamiast polegać na interfejsach graficznych.
Dzięki Pipeline as Code masz pewność, że każdy etap przepływu pracy przebiega we właściwej kolejności. Zmniejszasz ryzyko napotkania niepożądanych problemów. Dodatkowo zyskujesz kilka korzyści, w tym spójność, powtarzalność i promowanie współpracy.
Korzystając z tego przewodnika, wiesz już, jak tworzyć własne potoki przy użyciu Jenkins, powszechnie używanego narzędzia CI/CD. Jenkins oferuje potężną i elastyczną platformę do wdrażania Pipeline jako kodu za pośrednictwem Jenkinsfile. Postępuj zgodnie z najlepszymi praktykami i twórz przepływy pracy uwzględniające wszystkie przypadki użycia potoku.
Jeśli chcesz dowiedzieć się więcej o Jenkinsie, możesz sprawdzić, jak stworzyć własny potok Jenkinsa.