Programavimas

Nuolatinė integracija su Jenkins

Pažvelgus į tai, kaip programinė įranga buvo sukurta ir įdiegta net prieš 15 metų, atrodo keista, kad mūsų programos iš tikrųjų veikė. Tais laikais programinės įrangos kūrimo gyvavimo ciklą sudarė statinių paleidimas vietinėje mašinoje, artefaktų rankinis kopijavimas į sustojimo serverį ir rankinis kiekvienos programos testavimas atliekant kelias kartojimus. Kai kūrėjų komanda buvo patenkinta sukūrimu, rankiniu būdu įdiegėme programą gamyboje. Nuosekliausias šio vystymosi stiliaus dalykas buvo nenuoseklumas - procese ir rezultatuose.

Daugiau nei prieš dešimtmetį judrūs kūrėjai pradėjo taikyti ir skatinti testais pagrįstą plėtrą ir nuolatinę integraciją. Naudodamiesi šiais metodais, mes galime automatiškai sukurti šaltinio kodą, kai kūrėjas jį patikrina į šaltinio saugyklą, vykdydamas išsamų vienetų bandymų rinkinį, kad užtikrintų, jog programa veikia tinkamai. Daug bandomųjų kūrėjų taip pat pradėjo atlikti integravimo ir našumo testus antriniame KI procese.

Vykdydami nuolatinę integraciją, mes galime greičiau aptikti klaidas ir išleisti kodą daug greičiau nei tai darėme ankstesniais metais. Nenuostabu sakyti, kad CI prisijaukino kūrimo ir diegimo ciklo „sukūrimo“ pusę. Šiomis dienomis daugelis specialistų komandų perėjo už CI į CD, kuris reiškia nuolatinį pristatymą arba nuolatinį diegimą. Nepriklausomai nuo pavadinimo, kompaktinis diskas yra procesas, perkeliantis programinę įrangą nuo kodo registracijos prie pakopos ar net gamybos diegimo.

Ši dalis Atvirojo kodo „Java“ projektai pristato nuolatinę integraciją su „Jenkins“, pirmaujančiu CI / CD automatizavimo serveriu. Pradėsime nuo CI ir CD proceso apžvalgos, tada sukursime „Java“ interneto projektą naudodami „Maven“ ir „Jenkins“. Sužinosite, kaip sukurti ir išbandyti projektą „Jenkins“ sistemoje naudojant „JUnit“, taip pat kaip pašalinti kūrimo gedimus. Taip pat įdiegsite ir paleisite keletą populiarių „Jenkins“ papildinių, skirtų statinio kodo analizės testavimui ir ataskaitų teikimui.

Įvadas į CI / CD

Nuolatinio integravimo proceso metu kodas, patikrintas šaltinio kodų saugykloje, gali būti automatiškai patikrintas, sukurtas, išbandytas įvairiais būdais ir paskelbtas saugykloje. Norint, kad nenutrūkstama integracija veiktų, jums reikia CI serverio, pvz., „Jenkins“, kuris galėtų stebėti, ar jūsų šaltinio kodo saugykloje nėra naujų pakeitimų, ir reaguoti konfigūruojamais būdais.

Kaip pavyzdį paimkite „Java“ programą, sukurtą naudojant „Maven“. Aptikęs kodo pakeitimus, jūsų CI serveris gali atsakyti vykdydamas mvn clean install. Įprastoje „Maven“ komponavimo konfigūracijoje jis vykdys naują vienetų bandymų rinkinį kaip „build“ komandos dalį. Kol buvo kuriamas šaltinio kodas, serveris galėjo atlikti bet kokį papildomų veiksmų skaičių:

  • Kai priskirtas kodas išlaikys vieneto testą, sujunkite funkcijų atšaką atgal į pagrindinę arba pagrindinę šaką.
  • Atlikite statinio kodo analizę, pvz., Kodo aprėptį, kodo sudėtingumą, įprastų klaidų patikrinimą ir kt.
  • Paskelbkite savo komponavimo artefaktus saugykloje, pvz., „Artifactory“ ar „Sonatype Nexus“
  • Pritaikykite savo programą integracijos bandymo aplinkoje
  • Atlikite integracijos testus
  • Pritaikykite savo programą našumo bandymo aplinkoje
  • Atlikite apkrovos testą pagal savo programą
  • Pritaikykite programą vartotojo priėmimo testavimo aplinkoje (UAT)
  • Pritaikykite savo programą gamybai

Šie veiksmai yra visų rūšių veikla, kurią galite atlikti kaip CI / CD proceso dalį. KI paprastai apima kūrimo gyvavimo ciklo kūrimo ir bandymo etapus, o CD šį procesą praplečia, kad sukūrimo artefaktą būtų galima pritaikyti serveryje, kad būtų galima išbandyti. Kai kuriose aplinkose CD eina iki pat gamybos.

Nuolatinė integracija paprastai atliekama naudojant tokį įrankį kaip „Jenkins“, „Bamboo“ ar „TeamCity“, kuris sujungia jūsų kūrimo žingsnius į integracijos procesą. „Jenkins“ yra bene populiariausias CI / CD produktas ir puikiai dera su „Docker“.

Atsisiųskite ir įdiekite „Jenkins“

„Jenkins“ yra nuolatinis integravimo serveris ir dar daugiau. Jį sudaro automatikos variklis ir papildinių ekosistema, palaikanti nuolatinę integraciją, automatizuotą testavimą ir nuolatinį pristatymą. Pritaikote pristatymo vamzdyną atsižvelgdami į savo poreikius.

Yra daugybė būdų valdyti „Jenkins“:

  1. Atsisiųskite WAR failą ir įdiekite jį į servleto talpyklą savo vietiniame kompiuteryje.
  2. Sukurkite virtualią mašiną viešame debesyje, pvz., AWS, ir ten priglobkite „Jenkins“.
  3. Pasitelkite „Jenkins“ debesų teikėją, pvz., „CloudBees“.
  4. „Jenkins“ nustatykite bandomajame diegime naudodami „Docker“.

Aš jums parodysiu, kaip nustatyti tiek vietinį, tiek „Docker“ bandomąjį diegimą.

Atsisiųskite ir įdiekite „Jenkins“ vietoje

Pradėkite atsisiųsdami „Jenkins“ ir pasirinkdami ilgalaikio palaikymo (LTS) leidimą iš „Jenkins“ pagrindinio puslapio. Kadangi naudojuosi „Mac“, diegimas automatiškai atsisiuntė a pkg byla, kurioje įdėta a jenkins.karas Mano Taikymas / Jenkins aplanką. WAR failą galima dislokuoti bet kuriame servleto sudėtiniame rodinyje.

Taip pat norėsite atsisiųsti ir įdiegti „Apache Tomcat“. Šiuo metu naujausia „Tomcat“ versija yra 8.5.4, tačiau turėtumėte galėti paleisti bet kurią naujausią versiją. Atsisiųskite užtrauktukas arba tar.gz failą ir išspauskite jį į standųjį diską. Nukopijuokite jenkins.war failą į „Tomcat“ žiniatinklio programos aplanką ir paleiskite bin / startup.sh arba bin / startup.bat failą. Galite patikrinti, ar jis veikia, atidarydami naršyklę: // vietinis šeimininkas: 8080.

Norėdami paleisti „Jenkins“, atidarykite naršyklę adresu URL: // localhost: 8080 / jenkins.

Turėtumėte gauti ekraną, panašų į 1 paveikslą.

Stevenas Hainesas

Tada Jenkinsas sukuria administravimo slaptažodį ir parašo tai Tomcat'ui rąstai / catalina.out žurnalo failą ir į šį namų katalogą: .jenkins / secrets / initialAdminPassword. Išimkite slaptažodį, įveskite jį į „Administravimo slaptažodžio“ formos elementą (parodyta 1 paveiksle) ir paspauskite Tęsti. Būsite paraginti įdiegti siūlomus įskiepius arba pasirinkti juos įdiegti. Kol kas rekomenduoju įdiegti siūlomus papildinius.

Dabar būsite paraginti sukurti administratoriaus vartotoją. Įveskite savo administratoriaus vartotojo informaciją ir paspauskite Išsaugoti ir baigti. Galiausiai spustelėkite Pradėkite naudoti „Jenkins“. Dabar pamatysite „Jenkins“ pagrindinį puslapį, kaip parodyta 2 paveiksle.

Stevenas Hainesas

Konfigūruokite programos pavyzdį naudodami „Maven“

Kad galėtume naudoti „Jenkins“ kurti „Java“ interneto projektą su „Maven“, turime sukonfigūruoti abi šias technologijas. Po gaubtu Jenkinsas patikrins šaltinio kodą iš šaltinio kodų saugyklos į vietinį katalogą ir vykdys jūsų nurodytus „Maven“ taikinius. Kad tai veiktų, turite įdiegti vieną ar daugiau „Maven“ versijų, pasakyti „Jenkins“, kur jie įdiegti, ir sukonfigūruoti „Maven“ versiją, kurią norite naudoti „Jenkins“ kurdami savo programą.

„Jenkins“ informacijos suvestinėje spustelėkite Tvarkykite Jenkinsą ir pasirinkti Visuotinė įrankio konfigūracija. Pirmas dalykas, kurį atliksime, yra JDK sukonfigūravimas. JDK skyriuje spustelėkite Pridėti JDK, suteikite jam pavadinimą (mano yra „JDK8“) ir palikite numatytąjį Įdiekite iš java.sun.com patikrinta. Sutikite su „Oracle“ licencijos sutartimi, tada spustelėkite nuorodą „Prašome įvesti savo vartotojo vardą / slaptažodį“. Įveskite „Oracle“ vartotojo vardą ir slaptažodį ir paspauskite Uždaryti. Jums bus pateiktas ekranas, panašus į 3 paveikslą.

Stevenas Hainesas

Spustelėkite Taikyti norėdami išsaugoti savo darbą, tada slinkite žemyn iki skilties „Maven“ ir spustelėkite Pridėti Maveną. Įveskite „Maven“ pavadinimą (mano kodas yra „Maven 3.3.9“), palikite pažymėtus „Install Automatically“ ir „Install from Apache“. Spustelėkite Sutaupyti kai būsi pasiruošęs. Jums turėtų būti pateiktas ekranas, panašus į 4 paveikslą.

Stevenas Hainesas

„Git“ yra iš anksto sukonfigūruotas kartu su „Jenkins“, todėl dabar turėtumėte įdiegti visus įrankius, kurių reikia norint išsiregistruoti ir sukurti „Java“ projektą iš „Git“ su „Maven“.

Įdiekite „Jenkins“ į „Docker“ konteinerį

Jei nenorite įdiegti „Jenkins“ į savo vietinę mašiną, turite galimybę ją paleisti „Docker“ talpykloje. Oficialus „Jenkins Docker“ vaizdas leidžia paleisti ir išbandyti „Jenkins“ diegimą iš tikrųjų nekonfigūruojant jo vietinėje mašinoje.

Diegimas „Docker“

Žr. Mano „Docker“ įvadą, kuriame rasite „Docker“ pradedančiųjų vadovą, įskaitant diegimo ir sąrankos instrukcijas.

Darant prielaidą, kad jau turite „Docker“ sąranką savo kūrimo aplinkoje, galite paleisti „Jenkins“ iš „Docker“ komandinės eilutės:

 „docker run“ -p 8080: 8080 -p 50000: 50000 -v / jūsų / namai / jenkins: / var / jenkins_home -d jenkins 

Ši komanda nurodo Dockeriui paleisti naujausią versiją jenkins su šiomis parinktimis:

  • -p 8080: 8080: Žemėlapiai 8080 „Docker“ talpykloje ir 8080 „Docker“ pagrindinio kompiuterio prievadai, kad galėtumėte prisijungti prie „Jenkins“ žiniatinklio programos 8080 prievade.
  • -p 50000: 50000: Žemėlapiai pristato 50000 prievadą „Docker“ talpykloje į 50000 prievadą „Docker“ pagrindiniame kompiuteryje. „Jenkins“ naudoja šį prievadą viduje, kad leidimo vergų vykdytojai galėtų prisijungti prie pagrindinio „Jenkins“ serverio.
  • -v / tavo / namai / jenkins: / var / jenkins_home: Susiekite „Jenkins“ duomenų saugyklą į savo vietinį katalogą, kad galėtumėte iš naujo paleisti „Docker“ konteinerį, neprarasdami duomenų.
  • -d: Leidžia paleisti „Docker“ konteinerį atsijungus arba kaip „daemon“ procesą.

Toliau parodyta šių komandų vykdymo išvestis:

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

Kadangi „Docker“ konteinerį vykdome atsijungus, turime sekti žurnalus, kuriuos pateikia Jenkinsas. Tai galite padaryti naudodami dokininkų žurnalai -f komandą. Tiesiog įveskite kelis pirmuosius konteinerio ID šešioliktainius skaičius, šiuo atveju cc16573ce71ae424d4122e9e4afd3a294fda6606e0333838fe332fc4e11d0d53:

 $ docker žurnalai -f cc1 Veikia iš: /usr/share/jenkins/jenkins.war žiniatinklio šaknies: EnvVars.masterEnvVars.get ("JENKINS_HOME") ... **************** ************************************** ***** ************************************ ******** ****** ********************************** ******* ***************** Jenkins pradinė sąranka yra būtina. Sukurtas administratoriaus vartotojas ir sugeneruotas slaptažodis. Norėdami pereiti prie diegimo, naudokite šį slaptažodį: 205be6fe69c447dd933a3c9ce7420496. Tai taip pat galite rasti: / var / jenkins_home / secrets / initialAdminPassword ************************* ************************************** ************* ************************************* ******* ************************************ ******** ********* 

Nustatykite „Java“ žiniatinklio programos „Jenkins CI“

Tada mes sukursime paprastą „Java“ žiniatinklio programos darbą „Jenkins“. Kadangi programa nėra svarbi šiai pamokai, naudosime mano paprastą „Hello, World Servlet“ pavyzdinę programą, kurią priglobiau „GitHub“.

Norėdami išbandyti „Jenkins“, turėsite sugebėti atlikti pakeitimus šaltinio kodo saugykloje, todėl turėtumėte sukurti tą saugyklą dabar. „Jenkins“ pagrindiniame puslapyje spustelėkite Sukurkite naujų darbo vietų mygtuką ir įveskite savo projekto pavadinimą. Jūsų bus paprašyta pasirinkti projekto tipą, kaip parodyta 5 paveiksle.

Stevenas Hainesas

Šiam projektui pasirinksime „Freestyle“ projekto tipą, tačiau turėtumėte žinoti savo galimybes:

  • „Freestyle“ projektas: Šis labiausiai paplitęs projekto tipas leidžia stebėti šaltinio kodų saugyklą ir naudoti bet kokią sukūrimo sistemą, pvz., „Maven“ ir „Ant“.
  • Vamzdynas: Pasirinkite šį projekto tipą sudėtingiems projektams su judančiomis dalimis, kurias turite derinti keliuose vergų verguose.
  • Išorinis darbas: naudokite tai norėdami sukonfigūruoti automatinį išorinį darbą, kurį norite stebėti „Jenkins“ kaip savo kūrimo dalį.
  • Daugiakonfigūrinis projektas: tai yra darbo tipas projektams, kuriems reikia skirtingų konfigūracijų skirtingoms aplinkoms, pvz., Gamybai, etapams ir bandymams.
  • Aplankas: Kai turite sudėtingą komponavimą, galite suskirstyti dalykus į aplankus, kurių kiekvienas turi savo atskirą vardų sritį.
  • Daugiašakis dujotiekis: automatiškai sukurkite dujotiekio projektų rinkinį pagal kodo šakas, kurios yra apibrėžtos jūsų šaltinio kodo saugykloje

Įveskite projekto pavadinimą, šiuo atveju „labas-pasaulis-servletas“, ir pasirinkite „Gerai“. Tada pasirinkite „GitHub“ projektas, tada įveskite savo projekto „GitHub“ URL: //github.com/ligado/hello-world-servlet.

Dalyje Šaltinio kodo valdymas pasirinkite Git ir įveskite tą patį projekto URL.

Skiltyje „Sukurti paleidiklius“ pasirinkite Kurkite, kai pakeitimai bus nukreipti į „GitHub“ kad Jenkins sukurs jūsų kodą bet kada, kai pakeisite „GitHub“.

Skiltyje „Sukurti“ pridėkite naują kūrimo veiksmą, pasirinkite Iškvieskite aukščiausio lygio „Maven“ taikinius, pasirinkite anksčiau sukonfigūruotą „Maven“ egzempliorių (pvz., „Maven 3.3.9“) ir įveskite švarus diegimas įvarčių srityje. Kol kas palikite tuščius veiksmus po kūrimo. Baigę paspauskite Sutaupyti.

Grįžę į prietaisų skydelį turėtumėte pamatyti ekraną, panašų į 6 paveikslą.

Stevenas Hainesas

Norėdami patikrinti savo konfigūraciją, paspauskite Kurkite dabar mygtuką šalia „labas-pasaulis-servletas“ projekto. Turėtumėte pamatyti sėkmingai įvykdytą versiją „Build History“ kairėje projekto puslapio pusėje, kaip parodyta 7 paveiksle.

Stevenas Hainesas

Norėdami pamatyti, kas tiksliai įvyko, spustelėkite komponavimą ir spustelėkite Pulto išvestis, kuris parodys visus Jenkins atliktus veiksmus ir jų rezultatus. Konsolės išvestis yra žemiau.