Programiranje

Nenehna integracija z Jenkinsom

Če pogledamo nazaj, kako je bila programska oprema zgrajena in uvedena še pred 15 leti, se zdi presenetljivo, da so naše aplikacije dejansko delovale. V tistih časih je bil življenjski cikel razvoja programske opreme sestavljen iz izvajanja zgradb na lokalnem računalniku, ročnega kopiranja artefaktov na uprizoritveni strežnik in ročnega testiranja vsake aplikacije z več ponovitvami. Ko je bila ekipa razvijalcev zadovoljna z gradnjo, smo aplikacijo ročno uvedli v produkcijo. Najbolj dosledna stvar tega sloga razvoja je bila nedoslednost - v procesu in v rezultatih.

Pred več kot desetletjem so okretni razvijalci začeli sprejemati in spodbujati testni razvoj in nenehno integracijo (CI). S temi tehnikami smo lahko samodejno zgradili izvorno kodo, kadar koli jo je razvijalec preveril v izvornem repozitoriju, in z izvajanjem izčrpne zbirke testnih enot zagotovil, da aplikacija deluje pravilno. Številni razvijalci, ki jih vodijo testi, so prav tako začeli izvajati integracijsko testiranje in preizkušanje zmogljivosti v sekundarnem procesu CI.

Z nenehno integracijo bi lahko hitreje zaznali napake in izdali kodo veliko hitreje kot v prejšnjih letih. Ni pretirano, če rečemo, da je CI ukrotil "gradnjo" strani cikla gradnje in uvajanja. Danes je veliko razvojnih skupin preseglo CI na CD, kar pomeni neprekinjeno dostavo ali neprekinjeno uvajanje. Ne glede na oznako je CD postopek, ki programsko opremo premakne s prijave na kodo na uprizoritev ali celo proizvodno uvajanje.

Ta obrok Odprtokodni projekti Java uvaja nenehno integracijo z Jenkinsom, vodilnim avtomatizacijskim strežnikom za CI / CD. Začeli bomo s pregledom postopka CI in CD, nato pa s pomočjo Mavena in Jenkinsa nastavili spletni projekt Java. Naučili se boste, kako sestaviti in enotno preizkusiti projekt v Jenkinsu z JUnit, pa tudi, kako odpraviti napake pri gradnji. Prav tako boste namestili in zagnali peščico priljubljenih vtičnikov Jenkins za testiranje in poročanje o statični analizi kode.

Uvod v CI / CD

V neprekinjenem procesu integracije lahko kodo, ki je bila preverjena v repozitoriju izvorne kode, samodejno preveri, zgradi, preizkusi na različne načine in objavi v repozitoriju. Za neprekinjeno integracijo potrebujete strežnik CI, kot je Jenkins, ki lahko nadzira vaše shrambe izvorne kode za nove spremembe in se odziva na nastavljive načine.

Za primer vzemimo aplikacijo Java, zgrajeno z uporabo Mavena. Ko zazna spremembe kode, se strežnik CI lahko odzove z izvajanjem a mvn čista namestitev. V tipični konfiguraciji gradnje Maven bi kot del ukaza za izdelavo izvedel nov nabor preskusov enote. Med izdelavo izvorne kode je strežnik lahko izvedel poljubno število dodatnih dejanj:

  • Ko predana koda opravi preizkus enote, združite svojo vejo funkcije nazaj v glavno ali glavno vejo.
  • Izvedite statično analizo kode, na primer pokritost kode, zapletenost kode, preverjanje pogostih napak itd.
  • Objavite svoje artefakte gradnje v repozitoriju, na primer Artifactory ali Sonatype Nexus
  • Razporedite svojo aplikacijo v preskusno okolje integracije
  • Izvedite integracijske teste
  • Razporedite svojo aplikacijo v okolje za preizkušanje zmogljivosti
  • Izvedite preskus obremenitve za svojo aplikacijo
  • Razporedite svojo aplikacijo v okolje za sprejem uporabnika (UAT)
  • Razmestite svojo aplikacijo v produkcijsko različico

Ti koraki so vse vrste dejavnosti, ki jih lahko izvajate kot del postopka CI / CD. CI običajno zajema faze gradnje in preizkušanja življenjskega cikla razvoja, medtem ko CD razširja ta postopek na razmestitev artefakta gradnje na strežnik za testiranje. V nekaterih okoljih gre CD vse do produkcije.

Neprekinjena integracija se običajno izvaja z orodjem, kot so Jenkins, Bamboo ali TeamCity, ki vaše korake gradnje orkestrira v integracijski cevovod. Jenkins je verjetno najbolj priljubljen izdelek CI / CD in se dobro ujema z Dockerjem.

Prenesite in namestite Jenkins

Jenkins je strežnik za nenehno integracijo in še več. Sestavljen je iz mehanizma za avtomatizacijo in ekosistema vtičnikov, ki podpira nenehno integracijo, avtomatizirano testiranje in stalno dostavo. Dostavno črto prilagodite glede na vaše potrebe.

Obstaja veliko načinov za zagon Jenkinsa:

  1. Prenesite datoteko WAR in jo namestite v vsebnik strežniškega programčka v vašem lokalnem računalniku.
  2. Namestite navidezni stroj v javni oblak, kot je AWS, in tam gostite Jenkinsa.
  3. Izkoristite ponudnika oblakov Jenkins, kot je CloudBees.
  4. Nastavite Jenkinsa v testni namestitvi z Dockerjem.

Pokazal vam bom, kako nastaviti lokalno namestitev in preskusno namestitev Dockerja.

Prenesite in namestite Jenkins lokalno

Začnite tako, da prenesete Jenkins in na domači strani Jenkins izberete izdajo Long-Term Support (LTS). Ker uporabljam Mac, namestitev samodejno prenese datoteko pkg datoteko, ki je postavila datoteko jenkins.war v mojem Uporaba / Jenkins mapo. Datoteko WAR lahko namestite v kateri koli vsebnik strežniškega programčka.

Prav tako boste želeli prenesti in namestiti Apache Tomcat. Od tega trenutka je najnovejša različica Tomcata 8.5.4, vendar bi morali imeti možnost, da zaženete katero koli najnovejšo različico. Prenesite datoteko zadrgo ali tar.gz datoteko in jo razpakirajte na trdi disk. Kopirajte datoteko jenkins.war v Tomcat webapps mapo in nato zaženite bin / startup.sh ali bin / startup.bat mapa. Lahko preverite, ali se izvaja, tako da odprete brskalnik za: // localhost: 8080.

Če želite zagnati Jenkins, odprite brskalnik na URL: // localhost: 8080 / jenkins.

Dobili bi zaslon, ki je videti kot slika 1.

Steven Haines

Nato Jenkins ustvari skrbniško geslo in ga zapiše v Tomcat's dnevniki / catalina.out dnevniško datoteko in v naslednji domači imenik: .jenkins / Secrets / InitialAdminPassword. Pridobite geslo, ga vnesite v element obrazca za skrbniško geslo (prikazan na sliki 1) in pritisnite Nadaljujte. Pozvani boste, da namestite predlagane vtičnike ali izberete vtičnike za namestitev. Za zdaj priporočam namestitev predlaganih vtičnikov.

Zdaj boste pozvani, da ustvarite skrbniškega uporabnika. Vnesite podatke o skrbniškem uporabniku in pritisnite Shrani in dokončaj. Na koncu kliknite Začnite uporabljati Jenkinsa. Zdaj boste videli Jenkinsovo domačo stran, kot je prikazano na sliki 2.

Steven Haines

Primer aplikacije konfigurirajte z Mavenom

Preden lahko uporabimo Jenkins za izdelavo spletnega projekta Java z Mavenom, moramo nastaviti obe tehnologiji. Jenkins bo prevzel izvorno kodo iz repozitorija izvorne kode v lokalni imenik in izvršil cilje Maven, ki ste jih določili. Da bi to delovalo, morate namestiti eno ali več različic Mavena, Jenkinsu povedati, kje so nameščene, in konfigurirati različico Mavena, ki jo želite, da Jenkins uporablja pri izdelavi vaše aplikacije.

Na nadzorni plošči Jenkins kliknite Upravljajte Jenkinsa in izberite Globalna konfiguracija orodja. Najprej bomo konfigurirali JDK. V razdelku JDK kliknite Dodajte JDK, mu dajte ime (moje je "JDK8") in pustite privzeto Namestite s spletnega mesta java.sun.com preverjeno. Sprejmite licenčno pogodbo Oracle in kliknite povezavo "Prosimo, vnesite svoje uporabniško ime / geslo". Vnesite svoje uporabniško ime in geslo za Oracle in pritisnite Zapri. Predstavil se vam bo zaslon, podoben sliki 3.

Steven Haines

Kliknite Prijavite se če želite shraniti svoje delo, se pomaknite navzdol do razdelka Maven in kliknite Dodaj Maven. Vnesite ime za Maven (moje je "Maven 3.3.9"), pustite označeno "Samodejno namesti" in "Namesti iz Apača". Kliknite Shrani ko boš pripravljen. Predstavil bi se zaslon, podoben sliki 4.

Steven Haines

Git je vnaprej konfiguriran z Jenkinsom, zato bi morali imeti zdaj nameščena vsa orodja, ki jih potrebujete za nakup in izdelavo Java projekta iz Gita z Mavenom.

Jenkinsa namestite v posodo Docker

Če Jenkinsa ne želite namestiti na vaš lokalni računalnik, ga lahko zaženete v vsebniku Docker. Uradna slika Jenkins Docker vam omogoča, da zaženete in preizkusite namestitev Jenkinsa, ne da bi jo dejansko konfigurirali na lokalnem računalniku.

Namestitev Dockerja

Glejte moj uvod v Docker, kjer najdete vodnik za začetnike Dockerja, vključno z navodili za namestitev in namestitev.

Ob predpostavki, da imate Docker že nastavljen v svojem razvojnem okolju, lahko Jenkinsa iz Dockerja zaženete v ukazni vrstici:

 docker run -p 8080: 8080 -p 50000: 50000 -v / your / home / jenkins: / var / jenkins_home -d jenkins 

Ta ukaz Dockerju pove, naj zažene najnovejšo različico jenkins z naslednjimi možnostmi:

  • -p 8080: 8080: Preslika vrata 8080 na vsebniku Docker na vrata 8080 na gostitelju Docker, tako da se lahko povežete s spletno aplikacijo Jenkins na vratih 8080.
  • -p 50000: 50000: Preslika vrata 50000 na vsebniku Docker na vrata 50000 na gostitelju Docker. Jenkins to pristanišče uporablja interno, da omogoči izvršiteljem suženj zgradbe, da se povežejo z glavnim strežnikom Jenkins.
  • -v / your / home / jenkins: / var / jenkins_home: Zemljevide Jenkins shrani v vaš lokalni imenik, tako da lahko znova zaženete vsebnik Docker, ne da bi izgubili podatke.
  • -d: Omogoča zagon vsebnika Docker v ločenem načinu ali kot demon proces.

V nadaljevanju je prikazan izhod za izvajanje teh ukazov:

 $ docker run -p 8000: 8080 -v / Users / shaines / jenkins /: / var / jenkins_home -d jenkins cc16573ce71ae424d4122e9e4afd3a294fda6606e0333838fe332fc4e11d0d53 

Ker naš Dockerjev vsebnik izvajamo v ločenem načinu, moramo slediti dnevnikom, ki jih izpiše Jenkins. To lahko storite z dnevniki docker -f ukaz. Preprosto vnesite prvih šest šestnajstiških števil ID ID-ja, v tem primeru cc16573ce71ae424d4122e9e4afd3a294fda6606e0333838fe332fc4e11d0d53:

 Dnevniki $ docker -f cc1 Zagon iz: /usr/share/jenkins/jenkins.war webroot: EnvVars.masterEnvVars.get ("JENKINS_HOME") ... **************** *********************************************** ***** ************************************************** ****** ********************************************** ***************** Zahteva se Jenkinsova začetna nastavitev. Uporabnik skrbnika je bil ustvarjen in ustvarjeno geslo. Za nadaljevanje namestitve uporabite naslednje geslo: 205be6fe69c447dd933a3c9ce7420496 To lahko najdete tudi na: / var / jenkins_home / secrets / InitialAdminPassword ************************ ************************************* ************* ************************************************ ** ************************************************** ********* 

Nastavite Jenkins CI za spletno aplikacijo Java

Nato bomo v Jenkinsu nastavili preprosto opravilo za spletno aplikacijo Java. Ker aplikacija za to vadnico ni pomembna, bomo uporabili mojo preprosto aplikacijo Hello, World Servlet, ki sem jo gostil na GitHub.

Če želite preizkusiti Jenkinsa, boste morali imeti možnost, da sprejmete spremembe v repozitoriju izvorne kode, zato ga morate ustvariti zdaj. Na domači strani Jenkins kliknite Ustvari nova delovna mesta in vnesite ime svojega projekta. Pozvani boste, da izberete vrsto projekta, kot je prikazano na sliki 5.

Steven Haines

Za ta projekt bomo izbrali vrsto projekta Freestyle, vendar se morate zavedati svojih možnosti:

  • Projekt Freestyle: Ta najpogostejša vrsta projekta vam omogoča spremljanje repozitorija izvorne kode in uporabo katerega koli sistema za gradnjo, kot sta Maven in Ant.
  • Cevovod: izberite to vrsto projekta za zapletene projekte z gibljivimi deli, ki jih morate uskladiti med več podrejenimi gradniki.
  • Zunanje opravilo: s tem nastavite avtomatizirano zunanje opravilo, ki mu želite slediti v Jenkinsu kot del vaše gradnje.
  • Projekt z več konfiguracijami: to je vrsta opravila za projekte, ki zahtevajo različne konfiguracije za različna okolja, kot so produkcija, uprizoritev in preizkus.
  • Mapa: Ko imate zapleteno gradnjo, boste morda želeli stvari organizirati v mape, vsaka s svojim ločenim imenskim prostorom.
  • Cevovod z več vejami: samodejno ustvari nabor projektov cevovoda na podlagi vej kode, ki so definirane v repozitoriju izvorne kode

Vnesite ime projekta, v tem primeru "hello-world-servlet", in izberite "OK". Nato izberite Projekt GitHub, nato vnesite URL GitHub vašega projekta: //github.com/ligado/hello-world-servlet.

V razdelku Upravljanje izvorne kode izberite Git in vnesite isti URL projekta.

V razdelku Build Triggers izberite Zgradite, ko spremembo potisnete v GitHub tako da bo Jenkins zgradil vašo kodo vsakič, ko pritisnete spremembo na GitHub.

V razdelku Build dodajte nov korak gradnje in izberite Prikličite najvišje cilje Maven, izberite primerek Maven, ki ste ga konfigurirali prej (na primer "Maven 3.3.9"), in vnesite čista namestitev na področju ciljev. Dejanja po izdelavi za zdaj pustite prazna. Ko končate, pritisnite Shrani.

Ko se vrnete na armaturno ploščo, se prikaže zaslon, podoben sliki 6.

Steven Haines

Če želite preizkusiti svojo konfiguracijo, pritisnite Zgradite zdaj poleg projekta hello-world-servlet. Zgradbo bi morali videti uspešno izvedeno v Zgodovini zgradb na levi strani strani projekta, prikazano na sliki 7.

Steven Haines

Če želite natančno videti, kaj se je zgodilo, kliknite sestavo in nato kliknite Izhod konzole, ki vam bo pokazal vse korake, ki jih je izvedel Jenkins, in njihove rezultate. Izhod konzole je spodaj.

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