Uvod u Jenkins 2 i snagu cjevovoda

1. Pregled

U ovom ćemo članku predstaviti upotrebu cjevovoda kroz primjer kontinuirane isporuke pomoću Jenkinsa.

Izgradit ćemo jednostavan, ali vrlo koristan cjevovod, za naš ogledni projekt:

  • Kompilacija
  • Jednostavna statička analiza (paralelno sa kompilacijom)
  • Jedinstveni testovi
  • Integracijski testovi (paralelno s jediničnim testovima)
  • Raspoređivanje

2. Postavljanje Jenkinsa

Prije svega, moramo preuzeti najnoviju stabilnu verziju Jenkinsa (2.73.3 na mjestu pisanja ovog članka).

Idemo do mape u kojoj je naša datoteka i pokrenimo je pomoću java -jar jenkins.rat naredba. Imajte na umu da Jenkins ne možemo koristiti bez početnog postavljanja korisnika.

Nakon otključavanja Jenkinsa pomoću početne lozinke koju je generirao administrator, moramo popuniti podatke o profilu prvog administratora i biti sigurni da smo instalirali sve preporučene dodatke.

Sada imamo svježu instalaciju Jenkinsa spremnu za upotrebu.

Sve dostupne verzije Jenkinsa možete pronaći ovdje.

3. Cjevovodi

Jenkins 2 dolazi sa sjajnom značajkom tzv Cjevovodi, što je vrlo proširivo kada za projekt moramo definirati kontinuirano okruženje integracije.

Cjevovod je još jedan način definiranja nekih Jenkinsovih koraka pomoću kodai automatizirati proces implementacije softvera.

Koristi jezik specifičan za domenu (DSL) s dvije različite sintakse:

  • Deklarativni cjevovod
  • Skriptirani cjevovod

U našim ćemo primjerima koristiti the Skriptirani cjevovod koji slijedi imperativniji model programiranja izgrađen s Groovyjem.

Prođimo kroz neke karakteristike Cjevovod uključiti:

  • cjevovodi se zapisuju u tekstualnu datoteku i tretiraju kao kod; to znači da ih se može dodati kontroli verzija i kasnije mijenjati
  • oni će ostati nakon ponovnog pokretanja Jenkins poslužitelja
  • po želji možemo pauzirati cjevovode
  • podržavaju složene zahtjeve kao što je paralelno obavljanje posla
  • dodatak Pipeline također se može proširiti ili integrirati s drugim dodacima

Drugim riječima, postavljanje projekta cjevovoda znači pisanje skripte koja će sekvencijalno primijeniti neke korake procesa koji želimo postići.

Da bismo počeli koristiti cjevovode, moramo instalirati dodatak Pipeline koji omogućuje sastavljanje jednostavne i složene automatizacije.

Po želji možemo imati i Pipeline Stage View, tako da ćemo, kada pokrenemo izgradnju, vidjeti sve faze koje smo konfigurirali.

4. Brzi primjer

Za naš primjer koristit ćemo malu aplikaciju Spring Boot. Zatim ćemo stvoriti cjevovod koji klonira projekt, gradi ga i pokreće nekoliko testova, a zatim pokreće aplikaciju.

Instalirajmo Ček stil,Statički Analiza Kolektor i JUNIT dodataka koji su korisni za prikupljanje Ček stil rezultata, izradite kombinirani grafikon analize izvještaja o ispitivanju i ilustrirajte uspješno izvedena i neuspjela ispitivanja.

Prvo, shvatimo razlog Checkstylea ovdje: to je razvojni alat koji pomaže programerima da napišu bolji Java kôd slijedeći prihvaćene i dobro poznate standarde.

Kolektor statičke analize je dodatak koji prikuplja različite izlaze analize i ispisuje rezultate u kombiniranom grafikonu trenda. Uz to, dodatak omogućuje izvještavanje o zdravlju i izgradnju stabilnosti na temelju ovih grupiranih rezultata.

Napokon, JUNIT dodatak pruža izdavaču koji troši XML izvješća o testiranju generirana tijekom izrade i daje detaljne i značajne informacije u odnosu na testove projekta.

Također ćemo konfigurirati Ček stil u našoj aplikaciji pom.xml:

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

5. Izrada skripte cjevovoda

Prvo, moramo stvoriti novi posao Jenkinsa. Svakako odaberite Cjevovod kao tip prije nego što pritisnete gumb U redu kako je opisano na ovom snimku zaslona:

Sljedeći zaslon omogućuje nam da ispunimo više detalja o različitim koracima našeg Jenkinsovog posla, kao što je opis, okidači, neki napredne opcije projekta:

Krenimo u glavni i najvažniji dio ove vrste posla klikom na Cjevovod tab.

Zatim, za definiciju odaberite Skripta cjevovoda i provjeriti Upotrijebite Groovy Sandbox.

Evo radne skripte za Unix okruženje:

čvor {stage 'Clone the project' git '//github.com/eugenp/tutorials.git' dir ('spring-jenkins-pipeline') {stage ("Compilation and Analysis") {paralelno 'Compilation': {sh " ./mvnw clean install -DskipTests "}, 'Statička analiza': {faza (" Checkstyle ") {sh" ./mvnw checkstyle: checkstyle "korak ([$ class: 'CheckStylePublisher', canRunOnFailed: true, defaultEncoding: '' , zdravo: '100', uzorak: '** / target / checkstyle-result.xml', nezdravo: '90', useStableBuildAsReference: true])}}} faza ("Ispitivanja i primjena") {paralelno "Jedinstveni testovi" : {stage ("Pokretanje jediničnih testova") {try {sh "./mvnw test -Punit"} catch (err) {step ([$ class: 'JUnitResultArchiver', testResults: '** / target / surefire-reports / TEST- * UnitTest.xml ']) baciti pogrešku} korak ([$ class:' JUnitResultArchiver ', testResults:' ** / target / surefire-reports / TEST- * UnitTest.xml '])}},' Integration tests ' : {stage ("Pokretanje integracijskih testova") {try {sh "./mvnw test -Pintegration"} catch (err) {step ([$ class: 'JUnitResultArchiver', testResults: '** / tar get / surefire-reports / TEST- '+' * IntegrationTest.xml ']) baciti pogrešku} korak ([$ class:' JUnitResultArchiver ', testResults:' ** / target / surefire-reports / TEST- '+' * IntegrationTest .xml '])}} pozornica ("Staging") {sh "pid = \ $ (lsof -i: 8989 -t); kill -TERM \ $ pid "+" || kill -KILL \ $ pid "withEnv (['JENKINS_NODE_COOKIE = dontkill']) {sh 'nohup ./mvnw spring-boot: run -Dserver.port = 8989 &'}}}}}}

Prvo kloniramo spremište iz GitHub-a, a zatim mijenjamo direktorij u naš projekt, koji se zove opruga-jenkins-cjevovod.

Zatim smo sastavili projekt i prijavili se Ček stil analiza paralelno.

Sljedeći korak predstavlja paralelno izvršavanje jediničnih testova i integracijskih testova, a zatim postavljanje aplikacije.

Paralelizam se koristi za optimizaciju cjevovoda i brži posao. Najbolja je praksa u Jenkinsu istodobno voditi neke neovisne akcije koje mogu potrajati puno vremena.

Na primjer, u projektu iz stvarnog svijeta obično imamo puno jediničnih i integracijskih testova koji mogu potrajati duže.

Imajte na umu da će, ako bilo koji test nije uspio, BUILD također biti označen kao FAILED i implementacija se neće dogoditi.

Također, koristimo JENKINS_NODE_COOKIE kako bi se spriječilo trenutno zaustavljanje naše aplikacije kada cjevovod dođe do kraja.

Da biste vidjeli općenitiju skriptu koja radi na drugim različitim sustavima, pogledajte spremište GitHub.

6. Izvještaj o analizi

Nakon izrade posla, spremit ćemo našu skriptu i pogoditi Izgradi odmah na projektnoj kući naše Jenkins nadzorne ploče.

Evo pregleda gradnji:

Nešto niže pronaći ćemo pogled na fazu cjevovoda, s rezultatima svake faze:

Svakom je izlazu moguće pristupiti kada zadržite pokazivač iznad ćelije pozornice i kliknete na Trupci gumb za prikaz poruka dnevnika ispisanih u tom koraku.

Također možemo pronaći više detalja o analizi koda. Kliknimo na željenu građu iz Izgradi povijest na desnom izborniku i pritisnite Upozorenja u stilu provjere.

Ovdje vidimo 60 upozorenja visokog prioriteta koje se mogu pregledati klikom:

The Pojedinosti kartica prikazuje dijelove podataka koji ističu upozorenja i omogućavaju programeru da razumije uzroke koji stoje iza njih.

Na isti način, cjelovitom izvješću o ispitivanju možete pristupiti klikom na Rezultat testa veza. Pogledajmo rezultate com.baeldung paket:

Ovdje možemo vidjeti svaku testnu datoteku s njezinim trajanjem i statusom.

7. Zaključak

U ovom smo članku postavili jednostavno okruženje kontinuirane isporuke za pokretanje i prikazivanje statičke analize koda i izvješća o ispitivanju u Jenkinsu putem a Cjevovod posao.

Kao i uvijek, izvorni kod za ovaj članak možete pronaći na GitHubu.