Jak skonfigurować Jenkinsa?
W dzisiejszym wpisie chce wam pokazać jak projekt, który stworzyliśmy, możemy dodać do Jenkinsa – popularnego narzędzia do CI.
Wpis kieruje do osób średnio zaawansowanych/początkujących.
Popularność dostawców CI/CD jest różna, jednak Jenkins cieszy się jedną z największych. Tak jak prezentuje to Google Trend.
Czym CI jest?
Ta grafika moim zdaniem dobrze prezentuje sens i to, co CI /CD robi.
Jest serwerem, który pozwala na szybsze dostarczanie produktu, bo po wysłaniu naszego kodu może on budować się automatycznie, następnie uruchamiać testy i tworzyć wydanie produktu (ang. Release). Oczywiście sami możemy decydować, kiedy chcemy nasz kod uruchamiać np. manualnie wtedy, kiedy potrzebujemy.
Ta grafika prezentuje dość trywialny scenariusz użycia. Wszystko zależy od skali i od tego, czego potrzebujemy. Możemy dodawać np. notyfikacje do Slacka / maila lub raport z testów, a także sprawdzać po budowanie jakimś narzędziem do statycznej analizy kodu, czy wszystko się zgadza. Scenariuszy jest wiele.
Czego potrzebujemy:
Serwer z Windowsem
lub
Komputer z Windowsem.
W dzisiejszym wpisie skupiamy się na tym systemie.
W przyszłości planuje napisać wpis również o tym – Jak skonfigurować Jenkinsa dla Linuxa?.
Ja dzięki uprzejmości OVH korzystam z ich serwera do testów. Polecam je, bo są to moim zdaniem bardzo dobre serwery z jedną z najbardziej konkurencyjnych cen.
Co będziemy instalować podczas dzisiejszego wpisu?
- NUnit Console Runner
- MSBuilda
- NuGet’a
- Jenkinsa
Jeżeli masz już zainstalowaną którąś z tych aplikacji, to nie musisz tego robić drugi raz. Upewnij się, że do zmiennej path masz dodanego NuGet, MsBuilda, oraz NUnit Console Runnera.
Jenkins
Jest to narzędzie open source do CI/CD, które pozwala nam budować aplikacje. Jest to jedno z najbardziej popularnych narzędzi do CI/CD. Również przez to, że jest open source i wytworzyła się przy nim aktywna społeczność, posiada ono wiele przydatnych pluginów i wspiera większość popularnych języków programowania. Sam napisany jest w Javie.
Zalety Jenkinsa
- Darmowy + bardzo aktywne community.
- Wspiera większość technologii.
- Duża ilość pluginów, które pozwalają nam rozszerzać funkcje Jenkinsa.
- Jakiś czas temu dodany został nowy layout blue ocean, który pozwala tworzyć jeszcze przyjemniej aplikacje.
Minusy?
- Open source – czasami jakaś funkcja może być niedopracowana. Obecna wersja moim zdaniem jest dość dobra. Niedoróbki zdarzają się częściej w pluginach niż w samym Jenkinsie (również sami możemy dopisywać nasze pluginy lub rozszerzać istniejące).
Inni popularni dostawcy CI
Również dwoma bardzo popularnymi narzędziami do CI jest:
Bamboo oraz TeamCity z, którymi miałem okazje również pracować. TeamCity posiada wariant darmowy, Bamboo nie.
Mogą się sprawdzić jednak osobiście wole Jenkinsa przez jego popularność, ilość pluginów i szybkie działanie community.
Dla .NETu polecam również AppVeyor, który sprawdza się bardzo dobrze, jeżeli szybko chcemy postawić środowisko. Będzie szybciej niż w Jenkinsie – jednak jest to rozwiązanie płatne dla projektów komercyjnych, chyba że mamy jakieś rozwiązanie open source, to wówczas możemy korzystać z AppVeyor za darmo.
Od czego zaczniemy?
Najpierw zainstalujemy Jenkinsa, który jest nam potrzebny wraz z NuGetem, MSBuildem, oraz NUnit Console Runner. Są to programy potrzebne do budowania projektu, który jest w .NET.
Następnym krokiem będzie dodanie MSBuilda, NUnit Console Runnera, i NuGeta do zmiennej path, która pozwoli nam mieć dostęp z konsoli do tych programów.
Po tym kroku przejdziemy do zobaczenia czym jest Blue Ocean i jak nasze testy obecnie działają. Pokażę działający przykład wraz z ustawieniami Jenkinsfile.
Na końcu omówie go i pokaże jak od zera dodaje się projekt w Jenkins Pipeline.
Instalacja Jenkinsa
Zaczynamy od instalacji Jenkinsa na naszej maszynie. Mamy przynajmniej dwie drogi, które pozwalają nam to zrobić:
- Przez stronę webową ściągając archiwum .zip i instalowanie z instalatora.
- Docker – uruchomienie Jenkinsa w dockerze.
W dzisiejszym wpisie zrobimy to poprzez pobranie Jenkinsa ze strony. Przechodzimy na stronę.
Pobieramy Jenkinsa klikając w przycisk “download“, dla wersji Windowsa, którego mamy. Rozpakowujemy archiwum z Jenkinsem.
Gdy ściągniemy Jenkinsa, ukaże nam się kreator:
Przechodzimy dalej. Widzimy dwie możliwości doboru instalowanych pluginów. Wybieramy pierwszą, którą polecam na początek. Ta opcja zainstaluje nam podstawowe wtyczki dla Jenkinsa.
Po zainstalowaniu przechodzimy do utworzenia konta administratora. Polecam utworzyć silne hasło.
Po założeniu konta i zalogowaniu. Naszym oczom ukażę się taki ekran. Przechodzimy do Zarządzaj Jenkinsem lub Manage Jenkins.
Następnie wchodzimy w “Manage Plugins“
Instalujemy MSBuilda oraz BlueOcean, przy okazji inne pluginy będą zaktualizowane podczas dodania MSBuilda oraz BlueOcean.
Blue Ocean – dość nowy, odświeżony interfejs Jenkinsa.
MSBuild – plugin, który musimy zainstalować i wskazać do niego ścieżkę naszego zainstalowanego MSBuilda.
Po instalacji dwóch pluginów przechodzimy do instalacji NUnit Console Runnera na naszym serwerze.
Po zainstalowaniu jenkinsa przechodzimy do zainstalowania potrzebnych do niego pluginów.
Instalacja NUnit Console Runnera
Przechodzimy na stronę https://github.com/nunit/nunit-console/releases/tag/3.8 gdzie możemy znaleźć aktualną wersje NUnita.
Możemy pobrać NUnit Console Runnera jako archiwum .zip lub instalator .msi. Jeżeli decydujemy się na .zip, umieszczamy go w folderze np. NUnit i rozpakowujemy tam to archiwum. Jeżeli .msi uruchamiamy kreator i instalujemy go w trybie „complete”.
Po instalacji NUnit Console Runnera przechodzimy do instalacji NuGeta.
Instalacja NuGet
NuGet to manager pakietów dla .NETu, który pozwala instalować przydatne paczki z kodem, który został opublikowany przez społeczność. Potrzebujemy NuGet, który pozwala nam zrobić odzyskanie paczek (restore) w tej wersji, którą chcemy pobrać z serwerów NuGeta na podstawie pliku packages.config.
Pobieramy go ze strony https://www.nuget.org/downloads
Również umieszczamy go w jakimś folderze np. NuGet na dysku C.
Instalacja MsBuilda
Ostatnią rzeczą, którą zainstalujemy na naszym serwerze będzie MSBuild. Przechodzimy do strony
www.visualstudio.com/downloads gdzie możemy pobrać Visual Studio, jak również samego MSBuilda.
Jak to zrobić?
Przechodzimy do https://visualstudio.microsoft.com/downloads/ – i pobieramy instalator.
W nim wybieramy, które wersje .NETu nas interesują.
U mnie jest to kilka wersji .NET Frameworku. Jeżeli macie zanstalowane VS to MSBuild będzie zainstalowany – instalator powinnien wam być znajomy.
Po instalacji MSBuilda. Przechodzimy do:
Konfiguracja MSBuilda dla Jenkinsa
Przechodzimy do
Następnie klikamy w
Klikamy w
W tym miejscu podajemy ścieżkę do naszego zainstalowanego MSBuilda.
Dodawanie do zmiennej path?
Dlaczego dodajemy do zmiennej path? Dlatego, że pozwala nam to mieć dostęp do danego oprogramowania w całym systemie z cmd lub powershella. Niektóre aplikacje podczas instalacji same dodają się do zmiennej path.
My w naszym przykładzie dodamy NUnita, MSBuida oraz NuGeta do zmiennej path.
W systemie szukamy opcji „edit the system environment variables” w polskim interfejsie będzie to „systemowe zmienne środowiskowe”.
Przechodzimy dalej do Environment Variables
Przechodzimy do System Variables
Na zmiennej Path klikamy Edit
Dodajemy zmienne do NuGeta, MSBuilda, NUnit Console Runnera tak jak mam dodane.
Blue Ocean – Nowy interfejs Jenkinsa?
Po instalacji pluginu Blue Ocean będzie on dostępny w lewym menu. Po kliknięciu prezentuje nam się nowe menu z listą jobów.
Po wejściu mamy ekran, który zawiera kroki, które w danym jobie są przedstawione w formie graficznej.
W naszym przykładzie używamy Jenkinsfile do konfiguracji poszczególnych kroków.
Najpierw pobieramy nasz kod z git z repozytorium, które stworzyliśmy. W moim przypadku wziąłem kod z https://github.com/testingplusme/PageObjectPatternSpecFlow
Każdy z kroków, które są dodane podczas naszego budowania możemy rozwinąć i zobaczyć jak wyglądał przebieg ich egezukcji.
Czym jest Jenkinsfile?
Jest w plikiem w, którym definiujemy jak nasz Pipeline będzie miał się budować. Jenkinsfile dodaje się do repozytorium, więc nawet jeżeli zmienimy usługodawcę GIT będziemy mieli dostęp do Jenkinsfile.
Plusem Jenkinsfile jest:
- Możliwość zatrzymywania poszczególnych kroków w Pipeline.
- Dodawanie do repozytorium – szybka edycja nawet poza Jenkinsem.
- Proces budowy jak z klocków – duże możliwości edycji.
Słowniczek
Czym jest job?
Jest to zadanie w Jenkinsie. Zadaniem może być np. budowanie projektu.
NuGet
NuGet jest to manager pakietów dla .NET. NuGet Restore. Pozwala on dane pakiety odzyskać przed budowaniem. Robi to na podstawie pliku packages.config.
MsBuild
Buduje projekty, które są w .NET
Nunit Console Runner
Aplikacja konsolowa, która pozwala uruchamiać testy, które są zbudowane w postaci .dll i używają NUnita. NUnit Console Runner używany jest często na serwera gdzie mamy dostępną bibliotekę .dll po zbudowaniu. Po uruchomionych testach otrzymujemy w .XMLu raport z tego jak poszło uruchomienie naszych testów.
Jak wygląda nasz Jenkinsfile?
W moim przypadku dodaję Jenkins file, który najpierw robi NuGet restore, następnie budujemy projekt za pomocą MsBuilda, a na końcu korzystamy z NUnit Console Runnera do uruchomienia testów.
Następnie wybieramy, które repozytorium i tyle nasz kod został pobrany. JPodsumowanie
W dzisiejszym wpisie dowiedzieliśmy się czym jest Jenkinsoraz jak skonfigurować go dla platformy .NET. Polecam spróbować – Jenkins jest jednym z najczęściej wykorzysytywanych narzędzi do CI.