GitLab CI vs. Jenkins: Hvilken CI/CD-plattform er best for deg?

Programvareutviklingsreisen

Utvikling av programvare er en prosess som omfatter flere faser. Den begynner med planlegging, fortsetter med analyse, design, utvikling, testing, distribusjon og til slutt vedlikehold. For å navigere denne reisen, trenger programvareutviklere en rekke spesialiserte verktøy.

I feltet for kontinuerlig integrasjon og levering (CI/CD), skiller GitLab CI og Jenkins seg ut som ledende aktører. CI/CD refererer til en samling prosesser som automatiserer mange elementer i programvareutvikling.

Denne artikkelen vil utforske GitLab CI og Jenkins nærmere. Vi vil definere hvert verktøy, forklare hvordan de fungerer, og sammenligne deres viktigste funksjoner.

Hva er GitLab CI?

GitLab Continuous Integration and Delivery er et DevOps-verktøy designet for å automatisere stegene som kreves for å bygge, teste og distribuere kode til et produksjonsmiljø.

GitLab CI er bygget opp av to hovedkomponenter: Kontinuerlig integrasjon (CI) og kontinuerlig levering/distribusjon (CD).

Kontinuerlig integrasjon (CI) automatiserer byggprosessen og gir tilbakemelding via kodegjennomgang. CI automatiserer også sikkerhets- og kvalitetstester av koden. Til slutt oppretter CI en distribusjonsklar pakke for produksjonsmiljøet.

Kontinuerlig levering (CD) i GitLab CI automatiserer infrastruktur, håndterer billettering, endringer i infrastruktur og versjonskontroll. CD tilbyr et miljø for gradvis kodeutrulling og gir mulighet for verifisering og overvåking av endringer. I tillegg kan brukere rulle tilbake endringer ved behov.

Når disse to funksjonene kombineres, kan hele programvareutviklingslivssyklusen (SDLC) automatiseres med minimalt behov for manuelle inngrep.

I hovedsak brukes GitLab CI til:

  • Lagring og administrasjon av kode
  • Automatisering av CI/CD-rørledninger
  • Problemsporing
  • Sikkerhet av kode
  • Samarbeid

Fordeler med å bruke GitLab CI

  • Økt hastighet: GitLab CI eliminerer behovet for manuelle prosesser som bygging, testing og distribusjon av kode.
  • Forbedret kodekvalitet: Med GitLab CI kan feil oppdages og rettes før koden går i produksjon.
  • Sikkerhet: GitLab CI tilbyr sikkerhetsfunksjoner som sårbarhetsskanning, administrasjon av hemmeligheter og kodeskanning for å redusere risikoen for sikkerhetsbrudd.
  • Fleksibilitet: GitLab CI kan tilpasses utviklingslagets behov og er kompatibelt med mange språk og rammeverk.
  • Automatisert testing: Tester kan skrives og kjøres automatisk, uten manuell innblanding.

Hva er Jenkins?

Jenkins er en utvidbar automatiseringsserver med åpen kildekode. Den hjelper brukere med å administrere og bygge rørledninger for kontinuerlig integrasjon og levering (CI/CD). Jenkins er et populært verktøy blant DevOps- og programvareingeniører, kjent for å forbedre programvarekvaliteten, påliteligheten og leveringshastigheten.

Jenkins utfører en rekke «jobber» eller steg i en rørledning. En jobb består av flere trinn som utføres i rekkefølge. Et trinn i Jenkins kan omfatte bygging, testing, distribusjon eller andre automatiserbare oppgaver i programvareutviklingslivssyklusen.

Jenkins kan brukes til:

  • Kontinuerlig integrasjon
  • Kontinuerlig levering
  • Automatisert testing
  • Overvåking og rapportering
  • Kodeskanning
  • Jobbplanlegging

Fordeler med å bruke Jenkins

  • Skalerbarhet: Jenkins kan brukes med både små og store applikasjoner.
  • Enkel konfigurasjon: Jenkins har en enkel konfigurasjonsprosess med tilgjengelig dokumentasjon.
  • Stort fellesskap: Jenkins har eksistert i nesten to tiår og har et stort og aktivt fellesskap.
  • Et bredt spekter av plugins: Funksjonaliteten til Jenkins kan utvides med et stort utvalg av plugins.
  • Parallell jobbutførelse: Jenkins støtter parallell utførelse av ulike oppgaver, noe som sparer tid.

Likheter mellom GitLab CI og Jenkins

  • Begge støtter kontinuerlig integrasjon og kontinuerlig leveranse.
  • Begge er åpen kildekode-verktøy.
  • Begge har et stort fellesskap og mange brukere.
  • Begge støtter en rekke språk og rammeverk.
  • Begge automatiserer ulike oppgaver i programvareutviklingens livssyklus.
  • Begge har et stort økosystem av plugins og utvidelser.

GitLab CI vs. Jenkins: En sammenligning av funksjoner

Funksjon GitLab CI Jenkins
Åpen kildekode Ja Ja
Språkstøtte Mange språk Mange språk
Priser De fleste funksjoner er tilgjengelige i gratisplanen. Betalte planer med flere funksjoner. Gratis, men utvidelser kan koste
Modenhet En nyere plattform; opprettet i 2014. Jenkins ble lansert som Hudson, men endret navn til Jenkins i 2011.
Brukervennlighet Enkel å bruke Kan være komplisert for nybegynnere.
Hosting Intern og ekstern Intern og ekstern
Forutsetninger Node.JS, Git, Ruby, Go Java Runtime Environment

GitLab CI vs. Jenkins: Detaljert sammenligning

Selv om GitLab og Jenkins har likheter, finnes det viktige forskjeller som påvirker hvordan de håndterer CI/CD-prosessen. Her er noen av hovedområdene:

Arkitektur

Jenkins bruker en master-worker-arkitektur for å håndtere bygg.

  • Jenkins master planlegger jobbbygginger og distribuerer dem til arbeidere for utførelse. Den overvåker arbeidernes status og samler byggeresultater i et webdashbord.
  • Jenkins worker er en Java-applikasjon som kjører på en ekstern maskin. Arbeideren lytter etter forespørsler fra master og utfører dem. Det er mulig å ha mer enn 100 noder og legge til eller fjerne arbeidere etter behov.

GitLab CI er en del av GitLab, en webbasert plattform for administrasjon av repositories, sammenslåingsforespørsler og mer. GitLab CI består av ulike komponenter:

  • GitLab CI/CD-verktøyet for å håndtere bygg.
  • GitLab Runners utfører CI-jobber. Denne prosessen kan kjøres i skyen eller lokalt.
  • CI/CD-rørledningskonfigurasjoner defineres i filen .gitlab-ci.yml.

Plugins

Jenkins har over 1800 fellesskapsbidrag med plugins som dekker ulike områder, inkludert bygging, distribusjon og automatisering. Brukere kan tilpasse CI/CD-rørledninger og utvide funksjonaliteten til Jenkins.

Utviklere kan også lage tilpassede plugins ved hjelp av Jenkins» omfattende dokumentasjon. Jenkins har et stort fellesskap som bidrar til å utvikle plugins.

GitLab CI lar deg koble til og integrere med eksterne tjenester for økt funksjonalitet. Plugin-biblioteket er mindre sammenlignet med Jenkins, men det er i vekst. GitLab CI kommer med mange innebygde funksjoner.

Brukere kan tilpasse arbeidsflytene sine ved å bruke filen .gitlab-ci.yml. I denne filen spesifiseres alle jobber, stadier og trinn.

Rørledninger

Jenkins gir mulighet for både deklarativ og skriptet pipeline-syntaks. Dette kan gjøres via web-UI eller en Jenkinsfile. Den sistnevnte metoden foretrekkes. Rørledningene lagres som Jenkins-filer i repositoriet som inneholder kildekoden. Plattformen har et innebygd web-GUI for overvåking og visualisering av utførelser.

GitLab CI bruker .gitlab-ci.yml for å definere alle rørledninger. Denne YML-baserte konfigurasjonsfilen lagres i prosjektets rotkatalog. Filen er kjent for sin enkle syntaks med en rekke kommandoer og forhåndsdefinerte nøkkelord som dekker de vanligste CI/CD-oppgavene. GitLab CI integreres med andre GitLab-funksjoner som kildekodeadministrasjon, problemsporing og kodegjennomganger.

Hvordan installere Jenkins

Før du installerer Jenkins, trenger du en Java Runtime Environment (JRE). Last ned Java fra det offisielle nettstedet. For å demonstrere installasjonsprosessen, brukes Ubuntu som eksempel.

Hvis du bruker et annet operativsystem, se vår artikkel om installasjon av Jenkins og følg de oppgitte trinnene.

For Ubuntu, følg disse stegene:

Steg 1: Sjekk om JRE er installert. Kjør kommandoen:

java -version

Hvis JRE er installert, vil du se noe lignende dette:

Steg 2: Importer GPG-nøkkelen ved å bruke kommandoen:

curl -fsSL https://pkg.jenkins.io/debian-stable/jenkins.io-2023.key | sudo tee
      /usr/share/keyrings/jenkins-keyring.asc > /dev/null

Steg 3: Legg til Jenkins» programvarelager:

echo deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc]
      https://pkg.jenkins.io/debian-stable binary/ | sudo tee
      /etc/apt/sources.list.d/jenkins.list > /dev/null

Steg 4: Oppdater systemet:

sudo apt update

Steg 5: Installer Jenkins:

sudo apt install jenkins -y

Steg 6: Sjekk om Jenkins er installert:

sudo systemctl status jenkins

Hvis Jenkins er installert, vil du se noe slikt:

Trykk ctrl+z for å fortsette.

Steg 7: Endre brannmuren:

sudo ufw allow 8080

Steg 8: Sjekk status:

sudo ufw status

Steg 9: Hvis statusen er «Inaktiv» i forrige steg, aktiver den:

sudo ufw enable

Steg 10: Åpne Jenkins i nettleseren:

http://localhost:8080

Steg 11: Finn «Administratorpassord»:

sudo cat /var/lib/jenkins/secrets/initialAdminPassword

Steg 12: Lås opp Jenkins

Kopier passordet og lim det inn i «Administratorpassord»-feltet.

Velg standard plugins og fortsett.

Steg 13: Opprett konto, og «lagre og fortsett».

Steg 14: Sett opp og begynn å bruke Jenkins.

Hvordan installere GitLab CI

GitLab CI er en integrert del av GitLab. For å benytte GitLab CI må du først installere GitLab Runner, agenten som utfører alle jobbene før de sendes til GitLab.

Vi vil bruke Ubuntu for å demonstrere prosessen. Følg den offisielle dokumentasjonen dersom du bruker et annet operativsystem. For Ubuntu følger du disse trinnene:

Steg 1: Oppdater og konfigurer systemet:

sudo apt-get update
sudo apt-get install -y curl openssh-server ca-certificates tzdata perl

Du kan konfigurere e-postløsning for oppdateringer eller hoppe over dette trinnet.

Steg 2: Legg til GitLab-pakkelager:

curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.deb.sh | sudo bash

Steg 3: Konfigurer GitLab-kontoen din.

Det er flere alternativer for hosting av GitLab. Følg instruksjonene basert på valget ditt.

Steg 4: Logg inn på ditt hostnavn og finn passordet med denne kommandoen:

/etc/gitlab/initial_root_password

Valgfritt: Angi kommunikasjonspreferanser for å motta oppdateringer og nyheter fra GitLab.

Begrensninger med Jenkins

  • Jenkins kan være komplisert å sette opp for store prosjekter.
  • Dersom det ikke er konfigurert korrekt, kan Jenkins være sårbar for sikkerhetsangrep.
  • Skalering av Jenkins for store prosjekter kan være utfordrende.
  • Jenkins kan kreve mange ressurser når mange bygg kjøres samtidig.

Begrensninger med Gitlab CI

  • GitLab CI kan være komplekst for store prosjekter.
  • Avhengighet av GitLab-plattformen.
  • Skalerbarhet kan være et problem for store prosjekter.
  • Plugin-økosystemet er mindre sammenlignet med Jenkins.

Forfatterens mening

Både GitLab CI og Jenkins er gode verktøy for programvareutvikling. Hvis jeg ønsket en moden plattform med full kontroll over tilpasning, ville jeg valgt Jenkins. Hvis jeg ønsket et godt brukergrensesnitt og muligheten til å utnytte GitLab-integrasjonen, ville jeg valgt GitLab CI.

Forhåpentligvis har denne gjennomgangen kastet lys over forskjellene mellom GitLab CI og Jenkins. Selv om de er designet for å utføre lignende funksjoner, er det forskjeller i funksjoner og hvordan de utfører disse funksjonene. Valget av verktøy avhenger av prosjektets natur, dine ferdigheter og preferanser.

Det kan også være interessant å sjekke ut disse Jenkins-vertsplattformene.