Introduktion til Jenkins 2 og styrken af ​​rørledninger

1. Oversigt

I denne artikel vil vi fremvise brugen af ​​rørledninger gennem et eksempel på kontinuerlig levering ved hjælp af Jenkins.

Vi skal bygge en enkel, men alligevel meget nyttig pipeline til vores prøveprojekt:

  • Samling
  • Enkel statisk analyse (parallel med kompilering)
  • Enhedstest
  • Integrationstest (parallelt med enhedstest)
  • Implementering

2. Opsætning af Jenkins

Først og fremmest skal vi downloade den nyeste stabile version af Jenkins (2.73.3 ved skrivning af denne artikel).

Lad os navigere til den mappe, hvor vores fil er, og køre den ved hjælp af java -jar jenkins.war kommando. Husk at vi ikke kan bruge Jenkins uden en indledende brugeropsætning.

Efter at have låst op Jenkins ved hjælp af den oprindelige admin-genererede adgangskode, skal vi udfylde profiloplysninger for den første adminbruger og sørge for at installere alle anbefalede plugins.

Nu har vi en ny installation af Jenkins klar til brug.

Alle tilgængelige versioner af Jenkins kan findes her.

3. Rørledninger

Jenkins 2 leveres med en fantastisk funktion kaldet Rørledninger, hvilket er meget udvideligt, når vi skal definere et kontinuerligt integrationsmiljø for et projekt.

En rørledning er en anden måde at definere nogle Jenkins-trin ved hjælp af kodeog automatisere processen med implementering af software.

Det bruger et Domain Specific Language (DSL) med to forskellige syntakser:

  • Deklarativ rørledning
  • Skriptet rørledning

I vores eksempler skal vi bruge det Skriptet rørledning som følger en mere bydende programmeringsmodel bygget med Groovy.

Lad os gennemgå nogle af egenskaberne ved Rørledning plugin:

  • rørledninger skrives ind i en tekstfil og behandles som kode; dette betyder, at de kan føjes til versionskontrol og ændres senere
  • de forbliver efter genstart af Jenkins-serveren
  • vi kan eventuelt sætte rørledninger på pause
  • de understøtter komplekse krav såsom at udføre arbejde parallelt
  • Pipeline-pluginet kan også udvides eller integreres med andre plugins

Med andre ord betyder opsætning af et rørledningsprojekt at skrive et script, der sekventielt anvender nogle trin i den proces, vi vil udføre.

For at begynde at bruge rørledninger skal vi installere Pipeline plugin der gør det muligt at komponere enkel og kompleks automatisering.

Vi kan eventuelt også have Pipeline Stage View en, så når vi kører en build, ser vi alle de faser, vi har konfigureret.

4. Et hurtigt eksempel

I vores eksempel bruger vi en lille Spring Boot-applikation. Vi opretter derefter en pipeline, der kloner projektet, bygger det og kører flere tests og derefter kører applikationen.

Lad os installere Checkstyle,Statisk Analyse Samler og JUnit plugins, som henholdsvis er nyttige at indsamle Checkstyle resultater, opbygge en kombineret analysegraf af testrapporterne og illustrere vellykkede udførte og mislykkede tests.

Lad os først forstå årsagen til Checkstyle her: det er et udviklingsværktøj, der hjælper programmører med at skrive bedre Java-kode efter accepterede og velkendte standarder.

Statisk analysesamler er en tilføjelse, som samler forskellige analyseoutput og udskriver resultaterne i en kombineret trendgraf. Derudover giver plugin'et sundhedsrapportering og opbygger stabilitet baseret på disse grupperede resultater.

Endelig blev JUnit plugin giver en udgiver, der bruger XML-testrapporter genereret under builds og output detaljerede og meningsfulde oplysninger i forhold til et projekts test.

Vi konfigurerer også Checkstyle i vores ansøgning pom.xml:

 org.apache.maven.plugins maven-checkstyle-plugin 2.17 

5. Oprettelse af et pipeline-script

Først skal vi oprette et nyt Jenkins-job. Lad os være sikre på at vælge Rørledning som typen før du trykker på OK-knappen som beskrevet i dette skærmbillede:

Den næste skærm giver os mulighed for at udfylde flere detaljer om de forskellige trin i vores Jenkins-job, f.eks beskrivelse, udløser, nogle avancerede projektmuligheder:

Lad os dykke ned i den vigtigste og vigtigste del af denne form for job ved at klikke på Rørledning fanen.

Vælg derefter for definitionen Rørledningsscript og tjek Brug Groovy Sandbox.

Her er arbejdsscriptet til et Unix-miljø:

node {stage 'Klon projektet' git '//github.com/eugenp/tutorials.git' dir ('spring-jenkins-pipeline') {stage ("Compilation and Analysis") {parallel 'Compilation': {sh " ./mvnw ren installation -DskipTests "}, 'Static Analysis': {stage (" Checkstyle ") {sh" ./mvnw checkstyle: checkstyle "step ([$ class: 'CheckStylePublisher', canRunOnFailed: true, defaultEncoding: '' ' , sundt: '100', mønster: '** / target / checkstyle-result.xml', unHealthy: '90', useStableBuildAsReference: true])}}} stage ("Tests and Deployment") {parallel 'Unit tests' : {stage ("Runing unit tests") {try {sh "./mvnw test -Punit"} catch (err) {step ([$ class: 'JUnitResultArchiver', testResults: '** / target / surefire-reports / TEST- * UnitTest.xml ']) throw err} trin ([$ class:' JUnitResultArchiver ', testResults:' ** / target / surefire-reports / TEST- * UnitTest.xml '])}},' Integration tests ' : {stage ("Runing integration tests") {try {sh "./mvnw test -Pintegration"} catch (err) {step ([$ class: 'JUnitResultArchiver', testResults: '** / tar get / surefire-reports / TEST- '+' * IntegrationTest.xml ']) throw err} step ([$ class:' JUnitResultArchiver ', testResults:' ** / target / surefire-reports / TEST- '+' * IntegrationTest .xml '])}} fase ("Staging") {sh "pid = \ $ (lsof -i: 8989 -t); dræb -TERM \ $ pid "+" || dræb -KILL \ $ pid "medEnv (['JENKINS_NODE_COOKIE = dontkill']) {sh 'nohup ./mvnw spring-boot: run -Dserver.port = 8989 &'}}}}}

Først kloner vi lageret fra GitHub og ændrer derefter biblioteket til vores projekt, som kaldes spring-jenkins-pipeline.

Derefter kompilerede vi projektet og ansøgte Checkstyle analyse på en parallel måde.

Følgende trin repræsenterer en parallel udførelse af enhedstest og integrationstest og derefter implementering af appen.

Parallelisme bruges til at optimere rørledningen og få jobbet til at køre hurtigere. Det er en bedste praksis i Jenkins at samtidig køre nogle uafhængige handlinger, der kan tage meget tid.

For eksempel har vi i et virkeligt verdensprojekt normalt mange enheds- og integrationstest, der kan tage længere tid.

Bemærk, at hvis nogen test mislykkedes, vil BUILD også blive markeret som FAILED, og ​​implementeringen vil ikke forekomme.

Vi bruger også JENKINS_NODE_COOKIE for at forhindre øjeblikkelig lukning af vores ansøgning, når rørledningen når slutningen.

For at se et mere generelt script, der arbejder på andre forskellige systemer, skal du tjekke GitHub-arkivet.

6. Analyserapport

Efter at have oprettet jobbet gemmer vi vores script og rammer Byg nu på projektet hjem for vores Jenkins dashboard.

Her er en oversigt over builds:

Lidt længere nede finder vi trinvisningen af ​​rørledningen med resultatet af hvert trin:

Hver output er tilgængelig, når du svæver over en scenecelle og klikker på Logfiler -knappen for at se logmeddelelserne udskrevet i dette trin.

Vi kan også finde flere detaljer om kodeanalysen. Lad os klikke på den ønskede build fra Byg historie i højre menu og tryk Advarsler om checkstyle.

Her ser vi 60 advarsler med høj prioritet, der kan gennemses ved at klikke på:

Det detaljer fanen viser oplysninger, der fremhæver advarsler og gør det muligt for udvikleren at forstå årsagerne bag dem.

På samme måde er den fulde testrapport tilgængelig ved at klikke på Testresultat link. Lad os se resultaterne af com.baeldung pakke:

Her kan vi se hver testfil med dens varighed og status.

7. Konklusion

I denne artikel opretter vi et simpelt kontinuerligt leveringsmiljø til at køre og vise analyse af statisk kode og testrapport i Jenkins via en Rørledning job.

Som altid kan kildekoden til denne artikel findes på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found