I det sidste årti er der gjort betydelige fremskridt inden for udviklingen af værktøjer til kontinuerlig integration (Continuous Integration, CI) og kontinuerlig levering (Continuous Delivery, CD). Udviklingen af teknologier til integration af softwareudvikling og drift (Development Operations, DevOps) har ført til en hurtig stigning i efterspørgslen efter CI/CD-værktøjer. Eksisterende løsninger forbedres konstant i bestræbelserne på at følge med tiden, nye versioner bliver lancieret, og der dukker løbende mange nye produkter op i verden af softwarekvalitetssikring (Quality Assurance, QA). Med så mange valg kan det være en udfordrende opgave at finde det rette værktøj.
Blandt alle eksisterende CI/CD-værktøjer er der to projekter, som helt sikkert er værd at se nærmere på for dem, der søger noget inden for dette område. Det drejer sig om Jenkins og GitLab CI/CD-værktøjet, som er en del af GitLab-platformen. Jenkins har mere end stjerner på GitHub. GitLab-repositoriet på gitlab.com har fået lidt over stjerner. Hvis man sammenligner populariteten af repositoryerne, vil man finde ud af, at Jenkins har fået 8 gange flere stjerner end platformen, som GitLab CI/CD er en del af. Men ved valg af CI/CD-værktøj er dette langt fra den eneste indikator, man skal tage hensyn til. Der er mange andre, og det forklarer, hvorfor Jenkins og GitLab CI/CD ofte ligger meget tæt på hinanden i mange sammenligninger.
Lad os tage data fra platformen G2, som indsamler anmeldelser af forskellige produkter og de vurderinger, brugerne giver dem. Her er den gennemsnitlige vurdering , baseret på 288 anmeldelser, 4,3 stjerner. Og her findes der 270 anmeldelser, som giver dette værktøj en gennemsnitsvurdering på 4,4 stjerner. Vi vil ikke tage fejl, hvis vi siger, at Jenkins og GitLab CI/CD konkurrerer på lige vilkår. Det er interessant at bemærke, at Jenkins-projektet blev lanceret i 2011 og siden da har været et yndlingsværktøj for testere. Men samtidig har GitLab CI/CD-projektet, som blev startet i 2014, taget en meget høj position takket være de avancerede funktioner, som denne platform tilbyder. тут имеется 270 отзывов, средний рейтинг этого инструмента составляет 4,4 звезды. Мы не ошибёмся, заявив, что Jenkins и GitLab CI/CD конкурируют друг с другом на равных условиях. Интересно отметить то, что проект Jenkins появился в 2011 году и с тех времён он является излюбленным инструментом тестировщиков. Но при этом проект GitLab CI/CD, запущенный в 2014 году, занял свои позиции, очень высокие, благодаря предлагаемым этой платформой передовым возможностям.
Når man taler om Jenkins' popularitet sammenlignet med andre lignende platforme, må vi nævne, at vi offentliggjorde en artikel, hvor vi sammenlignede platformene Travis CI og Jenkins, og gennemførte en undersøgelse. 85 brugere deltog i den. Respondenterne blev bedt om at vælge det CI/CD-værktøj, de bedst kunne lide. 79% valgte Jenkins, 5% valgte Travis CI, og 16% indikerede, at de foretrak andre værktøjer.

Undersøgelsesresultater
Blandt andre CI/CD-værktøjer blev GitLab CI/CD oftest nævnt.
Hvis du seriøst beskæftiger dig med DevOps, skal du nøje vælge de relevante værktøjer, idet du overvejer projektets karakteristika, budget og andre krav. For at hjælpe dig med at træffe den rigtige beslutning vil vi gennemføre en analyse af Jenkins og GitLab CI/CD. Dette vil forhåbentlig hjælpe dig med at træffe den rette beslutning.
Introduktion til Jenkins

– er et velkendt, fleksibelt CI/CD-værktøj designet til at automatisere mange opgaver relateret til softwareprojekter. Jenkins er helt skrevet i Java og udgivet under MIT-licensen. Det har et kraftfuldt sæt funktioner rettet mod at automatisere opgaver relateret til bygning, test, implementering, integration og frigivelse af software. Dette værktøj kan bruges på forskellige operativsystemer, herunder macOS, Windows og mange Linux-distributioner, såsom OpenSUSE, Ubuntu og Red Hat. Der findes installationspakker for Jenkins til forskellige OS, og værktøjet kan installeres i Docker og på ethvert system, hvor der er JRE (Java Runtime Environment).
Udviklerne af Jenkins har også skabt et andet projekt, Jenkins X, der er designet til at fungere i Kubernetes-miljøet. I Jenkins X er Helm, Jenkins CI/CD-serveren, Kubernetes og andre værktøjer integreret for at skabe CI/CD-pipelines, der er i overensstemmelse med bedste praksis inden for DevOps. For eksempel anvendes GitOps her.
Blandt fordelene ved Jenkins kan man også nævne, at dets scripts er meget godt struktureret, forståeligt og letlæseligt. Jenkins-teamet har skabt omkring 1000 plugins, der har til formål at organisere samspillet mellem Jenkins og en række forskellige teknologier. I scripts kan man anvende autentifikationssystemer, hvilket for eksempel gør det muligt at oprette forbindelse til forskellige lukkede systemer.
Under arbejdet med Jenkins-pipelinen kan man overvåge, hvad der sker i hvert trin, og se om de forskellige faser af arbejdet er afsluttet med succes eller ej. Man kan overvåge alt dette uden at bruge et grafisk interface, ved at udnytte terminalens muligheder.
Jenkins' funktioner
Blandt de velkendte funktioner ved Jenkins er nem opsætning, høj grad af automatisering af forskellige opgaver og fremragende dokumentation. Når det kommer til at løse DevOps-opgaver, betragtes Jenkins som et meget pålideligt værktøj, hvor man som regel ikke behøver at overvåge hele projektbearbejdningsprocessen nøje. Dette er ikke tilfældet med andre CI/CD-værktøjer. Lad os tale om nogle af Jenkins' vigtigste funktioner.
▍1. Gratis, open source, understøttelse af mange platforme
Jenkins kan køre på macOS, Windows og Linux. Det kan også fungere i en Docker-miljø, hvilket giver mulighed for ensartet og hurtig udførelse af automatiserede opgaver. Dette værktøj kan desuden køre som et servlet i containere, der understøtter Java, såsom Apache Tomcat og GlassFish. Installationen af Jenkins er grundigt .
▍2. Udviklet økosystem af plugins
Jenkins' plugin-økosystem virker langt mere udviklet sammenlignet med økosystemerne af tilsluttede moduler i andre CI/CD-værktøjer. I øjeblikket findes der mere end 1500 plugins til Jenkins. Disse plugins er designet til at løse et bredt spektrum af opgaver og kan hjælpe med at automatisere forskellige projekter. Rigdommen af gratis tilsluttede moduler betyder, at Jenkins-brugere ikke har et akut behov for at købe dyre betalte plugins. Der er mulighed for Jenkins sammen med mange DevOps-værktøjer.
▍3. Nem installation og opsætning
Jenkins er ret enkel at installere og konfigurere. Desuden er opdateringsprocessen også meget bekvem. Her bør man igen nævne kvaliteten af dokumentationen, da man kan finde svar på mange forskellige spørgsmål relateret til installation og opsætning af Jenkins.
▍4. Venligt fællesskab
Som allerede nævnt er Jenkins et open source-projekt, hvis økosystem omfatter et stort antal plugins. Der er opbygget et stort fællesskab af brugere og udviklere omkring Jenkins, der hjælper med at udvikle projektet. Fællesskabet er en af de faktorer, der bidrager til Jenkins' udvikling.
▍5. Tilstedeværelse af REST API
Under arbejdet med Jenkins kan man udnytte REST API, hvilket udvider systemets muligheder. API'et til fjernadgang til systemet findes i tre varianter: XML, JSON med støtte til JSONP, Python. dokumentationsside, der afslører detaljer om brugen af REST API Jenkins.
▍6. Understøttelse af parallel udførelse af opgaver
Jenkins understøtter parallelisering af DevOps-opgaver. Det kan nemt integreres med de relevante værktøjer og modtage beskeder om resultaterne af opgavens udførelse. Udførelsen af kode-test kan fremskyndes ved at organisere parallel bygning af projektet ved hjælp af forskellige virtuelle maskiner.
▍7. Understøttelse af funktion i distribuerede miljøer
Jenkins gør det muligt at organisere distribuerede builds ved hjælp af flere computere. Denne mulighed er relevant i store projekter og anvender et arbejds-skema, hvor der findes en hoved Jenkins-server og flere underordnede maskiner. Underordnede maskiner kan også bruges i situationer, hvor det er nødvendigt at organisere testning af projektet i forskellige miljøer. Disse muligheder adskiller Jenkins fordelagtigt fra andre lignende projekter.
Introduktion til GitLab

kan betragtes som et af de nyeste og mest populære DevOps-værktøjer. Dette gratis open source-værktøj er integreret i GitLab versionskontrolsystemet. GitLab-platformen har en community-version, der understøtter repository management, issue tracking, organisering af kodegennemgang, mekanismer fokuseret på at skabe dokumentation. Virksomheder kan installere GitLab lokalt og forbinde dette system med Active Directory og LDAP-servere for at organisere sikker autorisation og autentificering af brugere.
videoguide, der vil hjælpe dig med at lære om, hvordan man opretter CI/CD-pipelines ved hjælp af GitLab CI/CD's funktioner.
Oprindeligt blev GitLab CI/CD udgivet som et selvstændigt projekt, men i 2015 blev dette værktøjssæt integreret i GitLab 8.0. En separat GitLab CI/CD-server kan understøtte mere end 25.000 brugere. Baseret på sådanne servere kan der opbygges systemer med høj tilgængelighed.
GitLab CI/CD og hovedprojektet GitLab er skrevet i Ruby og Go. De er udgivet under MIT-licensen. Udover de sædvanlige funktioner i CI/CD-værktøjer understøtter GitLab CI/CD også yderligere muligheder relateret til for eksempel planlægning af opgaver.
Det er meget nemt at integrere GitLab CI/CD i et projekt. Når man bruger GitLab CI/CD, opdeles behandlingen af projektkoden i faser, hvor hver fase kan bestå af flere opgaver, der udføres i en bestemt rækkefølge. Opgaverne kan finjusteres.
Opgaverne kan udføres parallelt. Efter indstillingen af rækkefølgen af faser og opgaver er CI/CD-pipeline klar til brug. Man kan følge udførelsen ved at overvåge opgavernes status. Derfor er det meget praktisk at bruge GitLab CI/CD, måske endda mere praktisk end med andre lignende værktøjer.
Funktioner ved GitLab CI/CD og GitLab
GitLab CI/CD er et af de mest populære DevOps-værktøjer. Projektet har omfattende dokumentation, og dets funktioner er lette og praktiske at bruge. Hvis du endnu ikke er bekendt med GitLab CI/CD, vil den følgende liste over dets funktioner give dig en generel idé om, hvad du kan forvente. Det skal bemærkes, at mange af disse funktioner relaterer sig til selve GitLab-platformen, hvor GitLab CI/CD er integreret.
▍1. Popularitet
GitLab CI/CD er et forholdsvis nyt værktøj, der har fundet bred anvendelse. GitLab CI/CD er gradvist blevet et ekstremt populært CI/CD-værktøj, der bruges til automatiseret test og implementering af software. Det er nemt at konfigurere, og det er desuden et gratis CI/CD-værktøj, der er indbygget i GitLab-platformen.
▍2. Understøttelse af GitLab Pages og Jekyll
Jekyll er en generator til statiske websites, som kan bruges inden for systemet GitLab Pages til at oprette sites baseret på GitLab-repositorier. Systemet tager de originale materialer og genererer på baggrund af dem et klart statisk site. Man kan styre udseendet og funktionerne på sådanne websites ved at redigere filen _config.yml, der bruges af Jekyll.
▍3. Projektplanlægningsmuligheder
Med muligheden for at planlægge projektfaser øges bekvemmeligheden ved at spore problemer og deres grupper. Det gør det muligt at styre arbejdsorganiseringen for projekter og planlægge deres udførelse til bestemte datoer.
▍4. Automatisk skalerings CI-runner
Ved automatisk skalering af de runnere, der er ansvarlige for at udføre specifikke opgaver, kan man betydeligt spare på omkostningerne til leje af serverkapacitet. Dette er særligt vigtigt, når det drejer sig om miljøer, hvor projekttest udføres parallelt. Desuden er det vigtigt for store projekter, der består af flere repositories.
▍5. Værktøjer til problemtracking
De kraftfulde muligheder for problemtracking i GitLab har ført til, at mange open source-projekter bruger denne platform. GitLab CI/CD muliggør parallelt test af forskellige kodegrene. Testresultaterne kan nemt analyseres i systemets interface. Dette skiller GitLab CI/CD ud fra Jenkins.
▍6. Adgangsbegrænsning til repositories
GitLab-platformen understøtter adgangsbegrænsning til repositories. For eksempel kan dem, der samarbejder om et projekt i et bestemt repository, tildeles rettigheder, der svarer til deres roller. Dette er særligt relevant i forbindelse med virksomheders projekter.
▍7. Aktiv støtte fra fællesskabet
Der er dannet et aktivt fællesskab omkring GitLab, som fremmer udviklingen af denne platform og dens værktøjer, herunder GitLab CI/CD. Den dybe integration mellem GitLab CI/CD og GitLab gør det desuden lettere at finde svar på spørgsmål, der opstår under arbejdet med GitLab CI/CD.
▍8. Understøttelse af forskellige versionskontrolsystemer
GitLab CI/CD er et system, der kan arbejde ikke kun med koden, der er placeret i GitLab-repositories. For eksempel kan koden opbevares i et GitHub-repository, mens CI/CD-pipelines kan organiseres på basis af GitLab ved hjælp af GitLab CI/CD.
Sammenligning af Jenkins og GitLab CI/CD
Jenkins og GitLab CI/CD er begge fremragende værktøjer, der hver især kan sikre en velfungerende CI/CD-pipeline. Men ved at sammenligne dem vil man opdage, at de, selvom de ligner hinanden meget, også adskiller sig på nogle punkter.
Specifikation
Jenkins
GitLab CI/CD
Åben eller lukket kode
Åben kildekode
Åben kildekode
Installation
Nødvendigt.
Det er ikke nødvendigt, da dette er en indbygget funktion i GitLab-platformen.
Unikke funktioner
Understøttelse af plugins.
Dyb integration i versionsstyringssystemet.
Support
Manglende.
Findes.
Installation og konfiguration
Ingen vanskeligheder
Ingen vanskeligheder
Selvstændig deployment af systemet
Dette er den eneste anvendelsesmulighed for systemet.
Understøttes.
Oprettelse af CI/CD-pipelines
Understøttes, anvender Jenkins Pipeline.
Understøttes.
Overvågning af applikationsydelse
Manglende.
Findes.
Økosystem
Der findes over 1000 plugins.
Systemet udvikler sig inden for rammerne af GitLab.
API
Understøtter et udviklet API-system.
Tilbyder API til dybere integration i projekter.
Understøttelse af JavaScript
Findes.
Findes.
Integration med andre værktøjer
Der er støtte til integration med andre værktøjer og platforme (Slack, GitHub).
En række værktøjer til integration med tredjepartssystemer, blandt andet med GitHub og Kubernetes.
Kvalitetskontrol af kode
Understøttes ved hjælp af SonarQube-plugin og andre plugins.
Understøttes.
Forskelle mellem Jenkins og GitLab CI/CD
Efter at have beskrevet og sammenlignet Jenkins og GitLab CI/CD, lad os fokusere på forskellene mellem disse DevOps-værktøjer. At kende disse forskelle vil gøre det lettere at forstå dem, der foretrækker det ene værktøj frem for det andet.
- GitLab CI/CD kan fuldt ud kontrollere Git-repositorier. Dette handler om styring af brancher i repositorierne og nogle andre funktioner. Jenkins kan arbejde med repositorier, men det giver ikke samme grad af kontrol over dem som GitLab CI/CD.
- Jenkins er et gratis open source-projekt. Den, der vælger det, skal selv implementere det. GitLab CI/CD er integreret i GitLab-platformen, det er en klar løsning.
- GitLab CI/CD understøtter udviklede opgavestyringsværktøjer, der arbejder på projektniveau. Denne del af Jenkins er mindre udviklet.
Jenkins og GitLab CI/CD: Styrker og svagheder
Nu har du et indtryk af Jenkins og GitLab CI/CD. For bedre at kende disse værktøjer, lad os se på deres styrker og svagheder. Vi antager, at du allerede har besluttet, hvilket værktøj du har brug for. Vi håber, at dette afsnit hjælper dig med at evaluere dig selv.
▍Styrker ved Jenkins
- Et stort antal plugins.
- Fuld kontrol over installationen af værktøjet.
- Nem fejlfinding af runners.
- Nem opsætning af nodes.
- Nem deployment af kode.
- Meget godt system til håndtering af brugeroplysninger.
- Fleksibilitet og alsidighed.
- Understøttelse af forskellige programmeringssprog.
- Systemet er intuitivt forståeligt.
▍Jenkins' svagheder
- Der kan opstå vanskeligheder ved brug af plugins.
- I små projekter kan tidsomkostningerne til opsætning af Jenkins være uforholdsmæssigt høje.
- Mangel på overordnede analytiske oplysninger om CI/CD-kæder.
▍GitLab CI/CD's styrker
- God integration med Docker.
- Simpel skalering af runnere.
- Parallel udførelse af opgaver i CI/CD-pipelinen.
- Brug af en rettet acyklisk graf til at definere forholdet mellem opgaver.
- Høj skalerbarhed takket være muligheden for parallel udførelse af runnere.
- Nem tilføjelse af opgaver.
- Let løsning af konflikter.
- Pålidelig sikkerhedssystem.
▍GitLab CI/CD's svagheder
- For hver opgave skal artefakter beskrives og uploades/downloades.
- Det er ikke muligt at teste resultaterne af sammensmeltning af grene før deres faktiske sammensmeltning.
- Når man beskriver stadier i CI/CD-pipelinen, kan man endnu ikke adskille individuelle faser.
Resumé
Både Jenkins og GitLab CI/CD har styrker og svagheder. Svaret på, hvad man skal vælge, afhænger af behovene og karakteristikaene ved det specifikke projekt. Hvert af de i dag betragtede CI/CD-værktøjer adskiller sig ved bestemte funktioner, selvom de er skabt til at løse det samme problem. Jenkins er et fritstående værktøj, mens GitLab CI/CD er en del af en platform designet til samarbejde om kode.
Når man vælger et CI/CD-system, skal man ud over dets muligheder også tage højde for de omkostninger, der kan være forbundet med det, samt hvad DevOps-ingeniørerne, der understøtter projektet, er vant til at arbejde med.
Hvilke CI/CD-værktøjer bruger du?
Kilde: habr.com
