Under det senaste decenniet har betydande framsteg gjorts inom utvecklingen av verktyg för kontinuerlig integration (Continuous Integration, CI) och kontinuerlig distribering (Continuous Delivery, CD). Utvecklingen av teknik för samarbete mellan utveckling och drift av programvara (Development Operations, DevOps) har lett till en snabb ökning av efterfrÄgan pÄ CI/CD-verktyg. Befintliga lösningar förbÀttras stÀndigt i takt med tiden, nya versioner slÀpps och det dyker stÀndigt upp mÄnga nya produkter inom mjukvarukvalitet (Quality Assurance, QA). I en sÄdan rikedom av alternativ kan det vara en utmaning att vÀlja rÀtt verktyg.
Bland alla befintliga CI/CD-verktyg finns det tvÄ projekt som definitivt förtjÀnar uppmÀrksamhet frÄn den som söker nÄgot inom detta omrÄde. Dessa Àr Jenkins och verktyget GitLab CI/CD, som Àr en del av plattformen GitLab. Jenkins har fler stjÀrnor pÄ GitHub. GitLab-repositoryt pÄ gitlab.com har fÄtt lite mer Àn stjÀrnor. JÀmför man populariteten mellan repositories visar det sig att Jenkins har fÄtt Ätta gÄnger fler stjÀrnor Àn plattformen som innehÄller GitLab CI/CD. Men nÀr man vÀljer CI/CD-verktyg Àr detta lÄngt ifrÄn den enda faktorn att ta hÀnsyn till. Det finns mÄnga andra, vilket förklarar varför Jenkins och GitLab CI/CD ofta hamnar mycket nÀra varandra i jÀmförelser.
LĂ„t oss ta en titt pĂ„ data frĂ„n plattformen G2, som samlar recensioner om olika produkter och betyg som anvĂ€ndare ger dem. HĂ€r Ă€r det genomsnittliga betyget för , baserat pĂ„ 288 recensioner, 4,3 stjĂ€rnor. Ă
andra sidan har detta verktyg 270 recensioner, med ett genomsnittligt betyg pÄ 4,4 stjÀrnor. Vi gör inte fel i att sÀga att Jenkins och GitLab CI/CD konkurrerar med varandra pÄ lika villkor. Det Àr vÀrt att notera att Jenkins-projektet startades 2011 och har sedan dess varit ett favoriter bland testare. Men GitLab CI/CD, som lanserades 2014, har ocksÄ nÄtt en mycket framtrÀdande stÀllning, tack vare de avancerade funktioner som denna plattform erbjuder.
NÀr det gÀller populariteten av Jenkins i jÀmförelse med andra liknande plattformar kan vi notera att vi, efter att ha publicerat en artikel dÀr plattformarna Travis CI och Jenkins jÀmfördes, genomförde en undersökning. 85 anvÀndare deltog i den. Respondenterna fick vÀlja den CI/CD-verktyg som de gillade mest. 79% valde Jenkins, 5% valde Travis CI, medan 16% angav att de föredrog andra verktyg.

Resultaten av undersökningen
Bland andra CI/CD-verktyg nÀmndes GitLab CI/CD oftast.
Om du seriöst sysslar med DevOps behöver du noggrant vÀlja lÀmpliga verktyg, med hÀnsyn till projektets sÀrdrag, budget och andra krav. För att hjÀlpa dig att göra rÀtt val planerar vi att genomföra en analys av Jenkins och GitLab CI/CD. Detta hoppas vi ska hjÀlpa dig att göra ett informerat beslut.
Introduktion till Jenkins

â Ă€r ett vĂ€lkĂ€nt, flexibelt CI/CD-verktyg som Ă€r avsett för att automatisera mĂ„nga uppgifter relaterade till programvaruprojekt. Jenkins Ă€r helt skrivet i Java och slĂ€ppt under MIT-licensen. Det har ett kraftfullt set av funktioner som syftar till att automatisera uppgifter relaterade till byggande, testning, distribution, integration och utgivning av programvara. Detta verktyg kan anvĂ€ndas pĂ„ olika operativsystem. Bland dem finns macOS, Windows och mĂ„nga Linux-distributioner, sĂ„som OpenSUSE, Ubuntu och Red Hat. Det finns installationspaket för Jenkins avsedda för olika operativsystem, och verktyget kan installeras i Docker och i alla system dĂ€r JRE (Java Runtime Environment) finns.
Utvecklarna av Jenkins skapade ytterligare ett projekt, Jenkins X, som Àr avsett att arbeta i en Kubernetes-miljö. Jenkins X integrerar Helm, Jenkins CI/CD-servern, Kubernetes och andra verktyg som Àr avsedda att skapa CI/CD-pipelines som följer bÀsta praxis inom DevOps. Till exempel anvÀnds GitOps hÀr.
Bland Jenkins fördelar kan man Àven lÀgga till det faktum att dess skript Àr mycket vÀlstrukturerade, lÀtta att förstÄ och lÀsa. Jenkins-teamet har skapat omkring 1000 plugins som syftar till att organisera interaktionen mellan Jenkins och olika teknologier. I skripten kan man anvÀnda autentiseringssystem, vilket exempelvis gör det möjligt att ansluta till olika slutna system.
Under arbetet av Jenkins-conveyor kan man observera vad som hÀnder vid varje steg, och om de olika arbetsmomenten har genomförts framgÄngsrikt eller inte. Man kan följa allt detta utan att anvÀnda nÄgot grafiskt grÀnssnitt, utan istÀllet utnyttja terminalens möjligheter.
Egenskaper hos Jenkins
Bland de vÀlkÀnda egenskaperna hos Jenkins kan man nÀmna dess enkelhet i konfiguration, hög automatiseringsgrad av olika operationer och utmÀrkta dokumentation. NÀr det kommer till lösningar för DevOps-uppgifter anses Jenkins vara ett mycket pÄlitligt verktyg, dÀr man vanligtvis inte behöver noggrant övervaka hela projektbearbetningsprocessen. För andra CI/CD-verktyg Àr det inte fallet. LÄt oss prata om nÄgra av de viktigaste funktionerna i Jenkins.
â1. Kostnadsfrihet, öppen kĂ€llkod, stöd för mĂ„nga plattformar
Jenkins kan arbeta pÄ plattformar som macOS, Windows och Linux. Det kan ocksÄ fungera i Docker-miljöer, vilket möjliggör en enhetlig och snabb utförande av automatiserade uppgifter. Detta verktyg kan Àven köras som en servlet i containrar som stöder Java, sÄsom Apache Tomcat och GlassFish. Installationen av Jenkins Àr vÀl .
â2. Utvecklad plugin-ekosystem
Jenkins plugin-ekosystem Àr mycket mer utvecklat jÀmfört med ekosystemen av tillÀggsmoduler hos andra CI/CD-verktyg. För nÀrvarande finns det över 1500 plugins för Jenkins. Dessa plugins syftar till att lösa ett brett spektrum av uppgifter och kan anvÀndas för att automatisera olika projekt. Det stora utbudet av kostnadsfria tillÀgg innebÀr att den som anvÀnder Jenkins inte har nÄgot akut behov av att köpa dyra betalda plugins. Det finns en möjlighet Jenkins med mÄnga DevOps-verktyg.
â3. Enkel installation och konfiguration
Det Àr ganska enkelt att installera och konfigurera Jenkins. Dessutom Àr Àven uppdateringsprocessen mycket bekvÀm. HÀr bör man Äterigen nÀmna dokumentationens kvalitet, eftersom den innehÄller svar pÄ de flesta frÄgor som rör installation och konfiguration av Jenkins.
â4. VĂ€nligt community
Som nÀmnt tidigare Àr Jenkins ett open source-projekt vars ekosystem inkluderar ett stort antal plugins. Runt Jenkins har det bildats en stor gemenskap av anvÀndare och utvecklare som hjÀlper till med projektets utveckling. Gemenskapen Àr en av faktorerna som bidrar till Jenkins utveckling.
â5. NĂ€rvaro av REST API
Under arbetet med Jenkins kan man anvÀnda REST API, vilket vidgar systemets möjligheter. API:et för fjÀrrÄtkomst till systemet finns i tre varianter: XML, JSON med stöd för JSONP och Python. dokumentationssidan som ger detaljerad information om hur man arbetar med Jenkins REST API.
â6. Stöd för parallell exekvering av uppgifter
Jenkins stödjer parallellisering av DevOps-uppgifter. Det kan enkelt integreras med lÀmpliga verktyg och ge meddelanden om resultaten av uppgiftsutförandet. Genom att organisera parallell byggen av projektet med hjÀlp av olika virtuella maskiner kan testningen av koden accelereras.
â7. Stöd för arbete i distribuerade miljöer
Jenkins gör det möjligt att organisera distribuerade byggen med hjÀlp av flera datorer. Denna funktion Àr tillÀmplig i stora projekt och anvÀnder ett arbetsupplÀgg dÀr det finns en huvudserver för Jenkins och flera underordnade maskiner. Underordnade maskiner kan Àven anvÀndas i situationer dÀr man behöver organisera testning av projektet i olika miljöer. Dessa möjligheter skiljer Jenkins frÄn andra liknande projekt.
Inledning till GitLab

kan ses som ett av de nyaste och mest Àlskade verktygen bland DevOps-ingenjörer. Detta kostnadsfria open source-verktyg Àr inbyggt i versionskontrollsystemet GitLab. GitLab-plattformen har en community-version, som stödjer hantering av repositories, verktyg för problemspÄrning, organisation av kodgranskningar och mekanismer som Àr inriktade pÄ dokumentationsskapande. Företag kan installera GitLab lokalt, koppla detta system till Active Directory och LDAP-servrar för att organisera sÀker autentisering och auktorisering av anvÀndare.
videoguide som hjÀlper dig att lÀra dig att skapa CI/CD-pipelines med hjÀlp av GitLab CI/CD:s funktioner.
Ursprungligen slÀpptes GitLab CI/CD som ett fristÄende projekt, men 2015 integrerades denna uppsÀttning verktyg i GitLab 8.0. En separat GitLab CI/CD-server kan stödja mer Àn 25000 anvÀndare. Baserat pÄ sÄdana servrar kan man skapa system med hög tillgÀnglighet.
GitLab CI/CD och huvudprojektet GitLab Àr skrivna i Ruby och Go. De slÀpps under MIT-licensen. Förutom vanliga funktioner för CI/CD-verktyg stöder GitLab CI/CD Àven ytterligare funktioner relaterade till exempelvis planering av arbeten.
Att integrera GitLab CI/CD i ett projekt Àr mycket enkelt. Vid anvÀndning av GitLab CI/CD delas kodbehandlingsprocessen in i steg, dÀr varje steg kan bestÄ av flera uppgifter som utförs i en viss ordning. Uppgifterna kan justeras noggrant.
Uppgifterna kan utföras parallellt. Efter att sekvensen av steg och uppgifter har stÀllts in Àr CI/CD-pipelines redo att gÄ. Man kan övervaka dess körning och följa statusen för uppgifterna. Resultatet Àr att anvÀnda GitLab CI/CD Àr mycket bekvÀmt, kanske mer bekvÀmt Àn andra liknande verktyg.
Funktioner hos GitLab CI/CD och GitLab
GitLab CI/CD Àr ett av de mest populÀra DevOps-verktygen. Projektet utmÀrker sig med dokumentation av hög kvalitet, och dess funktioner Àr lÀtta och bekvÀma att anvÀnda. Om du inte Àr bekant med GitLab CI/CD Ànnu, kommer nÀsta lista med funktioner att ge dig en allmÀn uppfattning om vad du kan förvÀnta dig. Det Àr vÀrt att notera att mÄnga av dessa funktioner relaterar till sjÀlva GitLab-plattformen, som GitLab CI/CD Àr integrerat i.
â1. Popularitet
GitLab CI/CD Àr ett relativt nytt verktyg som har funnit stor anvÀndning. GitLab CI/CD har gradvis blivit ett mycket populÀrt CI/CD-verktyg som anvÀnds för automatiserad testning och distribution av programvara. Det Àr enkelt att stÀlla in. Dessutom Àr det ett gratis CI/CD-verktyg som Àr inbyggt i GitLab-plattformen.
â2. Stöd för GitLab Pages och Jekyll
Jekyll Àr en generator för statiska webbplatser som kan anvÀndas inom GitLab Pages-systemet för att skapa webbplatser baserade pÄ GitLab-repositorier. Systemet tar kÀllmaterial och genererar en fÀrdig statisk webbplats. Utseendet och funktionerna pÄ sÄdana webbplatser kan styras genom att redigera filen _config.yml, som anvÀnds av Jekyll.
â3. Möjligheter för projektplanering
Genom möjligheten att planera projektsteg ökar bekvÀmligheten med att spÄra problem och deras grupper. Detta möjliggör hantering av arbetsorganisationen för projekt och planering av deras genomförande pÄ ett specifikt datum.
â4. Automatisk skalning av CI-runnerar
Genom automatisk skalning av runnare, som ansvarar för att utföra specifika uppgifter, kan man spara avsevÀrt pÄ kostnaderna för serverresurser. Detta Àr sÀrskilt viktigt, speciellt om det handlar om miljöer dÀr projekt testas parallellt. Dessutom Àr det viktigt för stora projekt som bestÄr av flera arkiv.
â5. Verktyg för att spĂ„ra problem
De kraftfulla möjligheterna i GitLab för att spÄra problem har lett till att mÄnga öppen kÀllkodsprojekt anvÀnder denna plattform. GitLab CI/CD möjliggör parallell testning av olika kodgrenar. Testresultaten kan enkelt analyseras i systemets grÀnssnitt. Detta sÀrskiljer GitLab CI/CD frÄn Jenkins.
â6. BegrĂ€nsad tillgĂ„ng till arkiv
GitLab-plattformen stödjer begrÀnsad tillgÄng till arkiv. Till exempel kan de som arbetar tillsammans pÄ ett projekt i ett visst arkiv tilldelas rÀttigheter som motsvarar deras roller. Detta Àr sÀrskilt aktuellt för företagsprojekt.
â7. Aktivt stöd frĂ„n gemenskapen
Det har bildats en aktiv gemenskap kring GitLab som bidrar till utvecklingen av denna plattform och dess verktyg, sÀrskilt GitLab CI/CD. Den djupa integrationen mellan GitLab CI/CD och GitLab gör det ocksÄ enklare att hitta svar pÄ frÄgor som uppstÄr vid arbete med GitLab CI/CD.
â8. Stöd för arbete med olika versionshanteringssystem
GitLab CI/CD Àr ett system som kan arbeta inte bara med koden som Àr lagrad i GitLab-arkiv. Till exempel kan koden lagras i ett GitHub-arkiv, medan CI/CD-pipelinen kan organiseras baserat pÄ GitLab med hjÀlp av GitLab CI/CD.
JÀmförelse mellan Jenkins och GitLab CI/CD
Jenkins och GitLab CI/CD Àr mycket bra verktyg, var och en av dem kan sÀkerstÀlla normal drift av CI/CD-pipelinen. Men om man jÀmför dem kommer det att visa sig att de, Àven om de har mycket gemensamt, skiljer sig Ät pÄ vissa punkter.
Egenskap
Jenkins
GitLab CI/CD
Ăppen eller stĂ€ngd kod
Ăppen kod
Ăppen kod
Installation
Det krÀvs.
Det krÀvs inte, eftersom detta Àr en inbyggd funktion i GitLab-plattformen.
Unika egenskaper
Stöd för plugins.
Djup integration i versionshanteringssystemet.
Support
Finns inte.
Finns.
Installation och konfiguration
Orsakar inga svÄrigheter
Orsakar inga svÄrigheter
SjÀlvstÀndig distribution av systemet
Detta Àr det enda sÀttet att anvÀnda systemet.
Stöds.
Skapande av CI/CD-pipelines
Stöds, anvÀnder Jenkins Pipeline.
Stöds.
Ăvervakning av applikationsprestanda
Finns inte.
Finns.
Ekosystem
Det finns mer Àn 1000 plugins.
Systemet utvecklas inom ramen för GitLab.
API
Stöder ett utvecklat API-system.
Erbjuder API för djupare integration i projekt.
Stöd för JavaScript
Finns.
Finns.
Integration med andra verktyg
Stödjer integration med andra verktyg och plattformar (Slack, GitHub).
MÄnga verktyg för integration med tredjepartssystem, sÀrskilt med GitHub och Kubernetes.
Kvalitetskontroll av kod
Stöds - med hjÀlp av SonarQube-plugin och andra plugins.
Stöds.
Skillnader mellan Jenkins och GitLab CI/CD
Efter att ha beskrivit och jÀmfört Jenkins och GitLab CI/CD, lÄt oss fokusera pÄ skillnaderna mellan dessa DevOps-verktyg. Kunskap om dessa skillnader möjliggör förstÄelse för dem som föredrar ett av dessa verktyg framför det andra.
- GitLab CI/CD kan helt kontrollera Git-repositories. Det handlar om att hantera grenarna i repositories och andra möjligheter. à andra sidan, Àven om Jenkins kan arbeta med repositories, erbjuder det inte samma nivÄ av kontroll över dem som GitLab CI/CD.
- Jenkins Àr ett gratis öppen kÀllkodsprojekt. Den som vÀljer det distribuerar det sjÀlv. GitLab CI/CD ingÄr i GitLab-plattformen, det Àr en fÀrdig lösning.
- GitLab CI/CD stödjer utvecklade uppgiftshanteringsverktyg som fungerar pÄ projekt nivÄ. Denna aspekt av Jenkins Àr svagare.
Jenkins och GitLab CI/CD: styrkor och svagheter
Nu har du fÄtt en viss förstÄelse för Jenkins och GitLab CI/CD. Nu, för att du ska lÀra kÀnna dessa verktyg Ànnu bÀttre, lÄt oss gÄ igenom deras styrkor och svagheter. Vi förutsÀtter att du redan har bestÀmt dig för vilket verktyg du behöver. Hoppas detta avsnitt hjÀlper dig att kontrollera dig sjÀlv.
âStyrkor hos Jenkins
- Stort antal plugins.
- Full kontroll över installationen av verktyget.
- Enkel felsökning av runners.
- Enkel konfiguration av noder.
- Enkel distribution av kod.
- En mycket bra system för hantering av anvÀndardata.
- Flexibilitet och mÄngsidighet.
- Stöd för olika programmeringssprÄk.
- Systemet Àr intuitivt lÀtt att förstÄ.
âSvagheter hos Jenkins
- Det kan uppstÄ problem med anvÀndning av plugins.
- Vid anvÀndning av Jenkins i smÄ projekt kan den tid som krÀvs för att stÀlla in det sjÀlv bli orÀttfÀrdigt stor.
- Brist pÄ övergripande analytisk information om CI/CD-flöden.
âStyrkor hos GitLab CI/CD
- Bra integration med Docker.
- Enkel skalning av runners.
- Parallellkörning av uppgifter inom CI/CD-pipeline.
- AnvÀndning av en orienterad acyklisk grafmodell vid instÀllning av relationer mellan uppgifter.
- Hög nivÄ av skalbarhet tack vare möjligheten till parallellkörning av runners.
- Enkelhet att lÀgga till uppgifter.
- Enkel konfliktlösning.
- Ett pÄlitligt sÀkerhetssystem.
âSvagheter hos GitLab CI/CD
- För varje uppgift mÄste artefakter beskrivas och laddas upp/ned.
- Det gÄr inte att testa resultatet av sammanslagning av grenar innan den faktiska sammanslagningen.
- Vid beskrivning av CI/CD-pipeline-steg kan man för nÀrvarande inte sÀrskilja enskilda faser.
Sammanfattning
BÄde Jenkins och GitLab CI/CD har sina styrkor och svagheter. Svaret pÄ frÄgan om vad man ska vÀlja beror pÄ behoven och egenskaperna hos det specifika projektet. Varje verktyg som vi har diskuterat idag har sina egna funktioner, Àven om dessa verktyg skapades för att lösa samma uppgift. Jenkins Àr ett fristÄende verktyg, medan GitLab CI/CD Àr en del av en plattform avsedd för samarbete kring kod.
NÀr man vÀljer CI/CD-system mÄste man, förutom dess funktioner, ta hÀnsyn till de kostnader som kan vara förknippade med det och vad DevOps-ingenjörerna som stödjer projektet Àr vana vid att arbeta med.
Vilka CI/CD-verktyg anvÀnder ni?
KĂ€lla: habr.com
