W ogarniającym nas świecie mikroserwisów skala projektów do utrzymania staje się ogromna. Każdy z tych projektów musimy przecież: zbudować, przetesować, zdeployować itd. Przy dużej liczbie projektów przestaje to być trywialne. W tym artykule zajmiemy się pierwszym zagadnieniem - automatyzacją buildów, jednak opisany tutaj sposób bez problemu można zastosować do innych aspektów.
Do budowania projektów starajmy się używać jednego narzędzia, ogromnie wpłynie to na proces unifikacji. W tym artykule będziemy posługiwać się mavenem.
Do zautomatyzowania procesu posłuży nam Jenkins.
Przejdźmy do sedna, czyli jak budować dużą liczbę projektów z jak najmniejszym nakładem pracy i ilością kodu do utrzymania.
Startujemy
Przy założeniu, że projekty budujemy
mvn clean package
-/+ jakieś super ważne przełączniki typu -DskipTes... ;) jesteśmy w stanie w bardzo prosty i schludny sposób zbudować kod/konfigurację, która zautomatyzuje cały proces.
Zasilenie jenkinsa nowo utworzonym jobem:
jenkins-jobs update jobs
Po wykonaniu polecenia, utworzony zostanie pierwszy z projektów jenkinsowych. Good Job!
Szablony
Uwielbiamy opakowywać wszystko w pewne wzorce, wspólne procesy, reużywać raz dobrze napisany kod. :) Dlatego ten wątek będzię esencją artykułu.
Wiemy już, że projekty budujemy w bardzo podobny sposób. Zbudujmy więc pierwszy szablon.
Utwórzmy szablon o nazwie project-build-template.yaml w katalogu jobs
Całość kończymy aktualizacją jobów: jenkins-jobs update jobs
W ten sposób jednym ruchem wygenerowaliśmy 3 joby:
project-1-build
project-2-build
project-3-build
Każdy z nich zawiera definicję joba opisanego w szablonie o nazwie {name}-{subname}-build' czyli wywołanie mvn clean package
Podsumowanie
Cel został osiągnięty! Raz napisana definicja builda została użyta wiele razy (w naszym przykładzie tylko 3 ;) ). Zmniejszyliśmy liczbę zdublowanych konfiguracji, dzięki czemu jesteśmy w stanie lepiej nimi zarządzać.
Był to prosty przykład ukazujący istnienie takiego narzędzia. Jeśli chcesz dowiedzieć się czegoś więcej - zostawiam kilka linków.