W dziedzinie DevOps i ciągłej integracji/dostarczania (CI/CD), Jenkins wyróżnia się jako niezastąpione
narzędzie dla deweloperów Java. Jako wszechstronny system automatyzacji, Jenkins oferuje nie tylko
ułatwienie w konfiguracji, ale również zapewnia wydajne zarządzanie całym cyklem życia aplikacji – od
budowania i testowania po wdrażanie. Oto przegląd tego, jak Jenkins może usprawnić Twoje
podejście do pracy jako programista Java.
Czym jest Jenkins?
Jenkins to open-source'owy serwer automatyzacji, który pełni kluczową rolę w procesach CI/CD. Umożliwia
automatyczne budowanie, testowanie i wdrażanie aplikacji Java, co czyni go nieocenionym narzędziem w szybkim
i efektywnym rozwoju oprogramowania. Dzięki swojej elastyczności i licznych wtyczkach, Jenkins doskonale
nadaje się do zadań związanych z automatyzacją w różnych środowiskach i scenariuszach.
Appa Notka.
Jenkins dla laika —
Jenkins to popularne narzędzie używane w programowaniu do automatyzacji różnych zadań związanych z
tworzeniem oprogramowania. Działa jak robot, który samodzielnie wykonuje powtarzalne zadania, takie jak
sprawdzanie nowych aktualizacji kodu, kompilacja tego kodu w gotowy program, a nawet testowanie go, aby
upewnić się, że wszystko działa poprawnie. Używając Jenkinsa, programiści mogą oszczędzać czas i skupić
się na bardziej skomplikowanych aspektach tworzenia oprogramowania, podczas gdy Jenkins automatycznie
zajmuje się rutynowymi, technicznymi zadaniami. Jest to bardzo pomocne, zwłaszcza w dużych projektach,
gdzie ciągłe sprawdzanie i testowanie kodu może być czasochłonne.
Automatyzacja procesu budowania
Jenkins może automatycznie budować aplikacje Java, korzystając z popularnych narzędzi takich jak Maven czy
Gradle. Automatyzacja ta obejmuje kompilację kodu, wykonanie testów jednostkowych i integracyjnych, oraz
pakowanie aplikacji do formatów takich jak JAR lub WAR.
Integracja z Narzędziami Budowania
-
Maven i Gradle — Jenkins łatwo integruje się z Mavenem i Gradlem, dwoma najpopularniejszymi
narzędziami do automatyzacji budowania w środowisku Java. Możesz skonfigurować Jenkinsa, aby używał
tych narzędzi do automatycznego budowania aplikacji po każdej zmianie w repozytorium kodu.
-
Konfiguracja budowania — Przez pliki konfiguracyjne, takie jak pom.xml dla Mavena lub
build.gradle dla Gradle, możesz określić, jak aplikacja powinna być budowana, które zależności są
potrzebne, a także inne parametry budowania.
Proces budowania (Continuous Integration)
Celem procesu ciągłej integracji jest automatyzacja procesu kompilacji kodu źródłowego w gotowy do
uruchomienia pakiet lub artefakt. Proces ten często obejmuje kompilację kodu, uruchamianie testów
jednostkowych i integracyjnych, oraz weryfikację jakości kodu.
W procesie rozwoju oprogramowania, zautomatyzowane sekwencje kroków wykonujące różne zadania są
powszechnie nazywane w Jenkinsie terminem, którym jest 'pipeline'.
Kluczowym aspektem jest to, że to my sami podejmujemy decyzje dotyczące niezbędnych kroków do wykonania w ramach pipeline. Konfigurujemy
tylko te etapy (stages), które są wymagane dla naszego projektu. W rezultacie, każda akcja budowania
sekwencyjnie przechodzi przez kolejne etapy, którymi są najczęściej:
-
Kompilacja kodu — Jenkins automatycznie kompiluje kod źródłowy aplikacji, przygotowując go do
kolejnych etapów procesu.
-
Testy Jednostkowe i Integracyjne — Automatyzacja testów to jeden z kluczowych aspektów
Jenkinsa. Może on uruchamiać różne testy, od jednostkowych po integracyjne, zapewniając, że każda
zmiana w kodzie nie wprowadza błędów. Wyniki testów są następnie prezentowane w przystępnej formie,
co ułatwia ich analizę.
-
Pakowanie aplikacji — Po pomyślnym przejściu testów, Jenkins może automatycznie pakować
aplikację do formatów takich jak JAR (dla bibliotek i mniejszych aplikacji) lub WAR (dla aplikacji
webowych), co jest standardem w projektach Java.
-
Dodatkowe operacje — Wykonanie dodatkowych operacji, np. migracje danych w bazie czy statyczna analiza kodu.
Proces wdrażania (Continuous Deployment)
Pipeline do deploymentu ma na celu automatyzację procesu dostarczania zbudowanych pakietów lub artefaktów do
różnych środowisk, w tym testowych, stagingowych i produkcyjnych.
Skupia się na automatyzacji procesów deploymentu, w tym na przygotowaniu środowiska, wdrażaniu aplikacji,
a czasami na wykonywaniu testów akceptacyjnych.
Appa Notka.
Analizujemy kolejne kursy na Udemy, wykorzystując nasze doświadczenie zawodowe do oceny ich efektywności i
popularności wśród uczestników. Z dużym zaangażowaniem selekcjonujemy te, które naszym zdaniem są najbardziej
efektywne i jednocześnie cieszą się uznaniem uczestników.
Poniższy kurs "Jenkins, From Zero To Hero" jest efektem tej
głębokiej analizy i prezentuje idealne połączenie wysokiej jakości edukacyjnej z aktualnymi trendami i
wymaganiami rynkowymi. Zresztą niech przemówią liczby...blisko 130 000 kursantów i ponad 16 000 wystawionych ocen!
Integracja z Repozytoriami Kodu
Jenkins łatwo integruje się z systemami kontroli wersji, takimi jak Git, umożliwiając automatyczne
wyzwalanie procesów budowania (CI) przy każdej zmianie kodu.
W rezultacie, każdy merge do głównej gałęzi (master) skutkuje uruchomieniem builda za pomocą Mavena lub
Gradle'a – w zależności od używanej technologii – oraz realizacją kolejnych etapów omówionych w paragrafie
Proces budowania.
Integracja z Systemami Kontroli Wersji
-
Wsparcie dla Popularnych Systemów — Jenkins bez problemu integruje się z wieloma systemami
kontroli wersji, w tym z najpopularniejszym - Git. Możliwa jest również integracja z innymi
systemami, takimi jak SVN czy Mercurial.
-
Konfiguracja Repozytorium — Możesz łatwo skonfigurować Jenkinsa do monitorowania określonych
repozytoriów, określając ścieżkę do repozytorium oraz dane uwierzytelniające, jeśli są wymagane.
Automatyczne wyzwalanie procesów
-
Wyzwalanie przez Commit — Jenkins może być skonfigurowany do automatycznego wyzwalania
procesów budowania i testowania za każdym razem, gdy do repozytorium zostanie dodany nowy commit.
Oznacza to, że każda zmiana kodu może natychmiast inicjować określone procesy w Jenkinsie.
-
Webhooks — Dla bardziej zaawansowanej integracji, szczególnie z Git, można użyć Webhooks. Są
to powiadomienia wysyłane z repozytorium do Jenkinsa, informujące o różnych zdarzeniach, takich jak
push czy pull request, które mogą wyzwalać procesy CI/CD.
Automatyzacja procesu budowania w Jenkinsie nie tylko oszczędza czas, ale również zwiększa spójność i jakość
końcowego produktu. Dzięki automatycznemu wykonywaniu testów i kompilacji, zespoły deweloperskie mogą skupić
się na rozwoju funkcjonalności, mając pewność, że każda zmiana w kodzie zostanie dokładnie przetestowana i
zbudowana w stabilny sposób. Jenkins, z jego bogatym zestawem funkcjonalności i integracjami, jest
nieocenionym narzędziem dla każdego zespołu pracującego nad aplikacjami Java.
Zarządzanie zależnościami
Współpracując z narzędziami do zarządzania zależnościami, Jenkins upraszcza proces aktualizacji i
utrzymania bibliotek, co jest szczególnie ważne w środowisku Java.
Zarządzanie bibliotekami
-
Aktualizacje — Jenkins umożliwia automatyzację procesu aktualizacji bibliotek, co jest
szczególnie przydatne w dużych projektach, gdzie ręczne śledzenie i aktualizowanie zależności byłoby
czasochłonne.
-
Kompatybilność — Automatyzując zarządzanie zależnościami, Jenkins pomaga upewnić się, że
wszystkie używane biblioteki są kompatybilne ze sobą, co minimalizuje ryzyko konfliktów i błędów
związanych z niekompatybilnymi wersjami.
Testowanie i raportowanie
Automatyzuje proces testowania, oferując jednocześnie dogłębne raportowanie wyników, co pomaga szybko
identyfikować i rozwiązywać problemy. Po każdym wdrożeniu, Jenkins może wysyłać powiadomienia (np. przez
email, Slack, itp.) o jego stanie. Może również generować raporty dotyczące procesu wdrażania, co jest
przydatne do analizy i ciągłego doskonalenia procesów CI/CD.
Konfiguracja jako kod
Configuration as Code (CaaS) w Jenkinsie umożliwia definiowanie i zarządzanie konfiguracją Jenkinsa za
pomocą plików tekstowych, co ułatwia wersjonowanie, udostępnianie i automatyzację konfiguracji.
Najbardziej znanym przykładem CaaS w Jenkinsie jest użycie Jenkinsfile, który jest plikiem tekstowym
zapisanym w formacie Groovy, określającym proces budowania i wdrażania (pipeline). Jenkinsfile można
przechowywać w systemie kontroli wersji razem z kodem źródłowym projektu.
Innym narzędziem umożliwiającym
CaaS w Jenkinsie jest wtyczka Job DSL, która pozwala na tworzenie zadań
Jenkinsa za pomocą specjalnego języka opartego na Groovy.
Korzyści Configuration as Code
-
Wersjonowanie — Umożliwia przechowywanie konfiguracji w systemie kontroli wersji, co ułatwia
śledzenie zmian i zarządzanie różnymi wersjami konfiguracji.
-
Reużywalność — Ułatwia automatyzację procesów konfiguracji i wdrażania Jenkinsa, co jest
szczególnie ważne w środowiskach CI/CD.
-
Automatyzacja — Ułatwia automatyzację procesów konfiguracji i wdrażania Jenkinsa, co jest
szczególnie ważne w środowiskach CI/CD.
-
Zmniejszenie ryzyka błędów — Zmniejsza ryzyko błędów ludzkich poprzez eliminację potrzeby
ręcznego konfigurowania Jenkinsa.
Instalacja
Instalacja Jenkinsa jest procesem wieloetapowym, który wymaga dokładnego wykonania kilku kroków.
Najpierw w celu pobrania programu, wejdź na stronę
https://www.jenkins.io/download
i wybierz wersję oprogramowania odpowiednią dla Twojego systemu operacyjnego, taką jak Windows Installer,
pakiet WAR dla uniwersalnego użytku, lub kontener Docker.
Po pobraniu, uruchom instalator i postępuj zgodnie z wyświetlanymi instrukcjami.
W jednym z pierwszych kroków będziesz proszony między innymi o wybór ścieżki, w której Jenkins zostanie zainstalowany na komputerze.
Podczas instalacji na systemie Windows, jednym z kluczowych kroków jest określenie, czy Jenkins ma
być uruchomiony jako usługa systemowa (ang. "Local System") czy jako usługa z uprawnieniami lokalnego lub
domenowego użytkownika (ang. "local or domain user"). Wybór ten ma wpływ na poziom uprawnień, z jakimi
Jenkins będzie działał, oraz na sposób, w jaki interakcje z innymi zasobami systemowymi będą zarządzane.
Wybór między tymi opcjami powinien być dokonany z uwzględnieniem wymagań bezpieczeństwa i zarządzania
dostępem w danym środowisku.
Ustawienie parametrów serwera, takich jak port, na którym Jenkins będzie nasłuchiwał,
to jeden z kolejnych kroków w procesie instalacji. Domyślnie Jenkins używa portu 8080, ale można go zmienić
zgodnie z potrzebami i wymogami sieciowymi środowiska, w którym jest instalowany. Jest to ważne, szczególnie
jeśli na tym samym serwerze działają inne aplikacje korzystające z portów sieciowych, lub gdy istnieją
specyficzne zasady bezpieczeństwa lub konfiguracje sieciowe.
Konfiguracja
Po zakończeniu instalacji Jenkinsa, pierwszy ekran, który się pojawi, będzie wymagał wprowadzenia klucza
administratora. Ten klucz, generowany podczas instalacji, jest zwykle widoczny w konsoli lub zapisany w
pliku dziennika.
Następnie Jenkins zaproponuje instalację standardowych pluginów - masz możliwość wyboru zalecanych lub
własnego zestawu pluginów.
Kolejnym etapem będzie utworzenie konta administratora poprzez ustawienie nazwy użytkownika i hasła.
Potem należy skonfigurować URL serwera Jenkins, co umożliwi dostęp do interfejsu użytkownika. W zależności
od potrzeb, można również dostosować dodatkowe ustawienia, takie jak bezpieczeństwo, metody uwierzytelniania
czy parametry sieciowe.
Po wykonaniu tych początkowych kroków, Jenkins będzie gotowy do dalszej konfiguracji i użytkowania.
Jeśli chcesz zgłębić swoją wiedzę na temat Jenkinsa, polecam poniższy materiał video.
Koncentruje się na praktycznym wykorzystaniu Jenkinsa do
tworzenia i zarządzania procesami ciągłej integracji i dostarczania (CI/CD), oferując szczegółowe instrukcje
i porady, które pomogą Ci efektywnie wykorzystać Jenkinsa w Twoich projektach deweloperskich.
Dlaczego Jenkins?
Jenkins to wiodące narzędzie do ciągłej integracji i dostarczania (CI/CD),
które odnotowuje znaczący wzrost popularności i zastosowań.
Obecnie zajmuje szacunkowy udział na rynku CI/CD wynoszący 44%,
a na całym świecie korzysta z niego około 11 264 000 programistów do wytwarzania oprogramowania CI.
Jest szeroko używany w różnych branżach do dostarczania krytycznego
pod względem bezpieczeństwa i biznesu oprogramowania.
Ze swojej strony moge dodać, że w ramach kilku ostatnich projektów miałem okazję pracować z procesami CI/CD,
które były realizowane przy użyciu Jenkinsa.
Natomiast jeżeli chciałbyś spróbować innego narzędzia, rynek oferuje kilka interesujących alternatyw:
-
GitLab CI/CD — Zintegrowane narzędzie CI/CD w GitLabie, które pozwala na automatyzację
procesów bezpośrednio w ramach repozytoriów GitLab.
-
Travis CI — Proste w użyciu narzędzie CI, często wybierane dla projektów open source,
szczególnie tych hostowanych na GitHubie. Popularny wśród projektów open-source, zwłaszcza tych
hostowanych na GitHubie.
- CircleCI — Szeroko stosowane narzędzie CI/CD, które oferuje łatwą integrację z wieloma
popularnymi
platformami i narzędziami. Często wybierany przez startupy i firmy technologiczne ze względu na
łatwość użycia i elastyczność.
-
Bamboo — Rozwiązanie od Atlassian, znane z integracji z innymi produktami tej firmy, takimi
jak Jira i Bitbucket.
-
TeamCity — Rozbudowane narzędzie od JetBrains, które oferuje szerokie możliwości konfiguracji
i integracji.
-
Azure DevOps — Platforma od Microsoftu, oferująca zarówno narzędzia CI/CD, jak i szeroki
zakres funkcji związanych z zarządzaniem projektem i kodem.
No dobra ale to od Microsoftu... ;)
Autor: Jarek Klimas
Data: 24 listopada 2023
Labele: Backend, Średni, Java
Czy informacje, które otrzymałeś, były pomocne?
Jeśli tak, zapraszam Cię do podarowania mi kawy.
Linki:
Jenkins
GitLab CI/CD
Travis CI
CircleCI
Bamboo
TeamCity
Azure DevOps
https://www.businesswire.com/news/home/20230829119685/en