Ohjelmointi

Jatkuva integraatio Jenkinsin kanssa

Kun katsotaan taaksepäin, kuinka ohjelmistot rakennettiin ja otettiin käyttöön jopa 15 vuotta sitten, näyttää yllättävältä, että sovelluksemme todella toimivat. Tuohon aikaan ohjelmistokehityksen elinkaari koostui paikallisen koneen rakenteiden ajamisesta, artefaktien kopioimisesta manuaalisesti vaiheistuspalvelimelle ja kunkin sovelluksen testaamisesta manuaalisesti useiden iteraatioiden avulla. Kun kehitystiimi oli tyytyväinen koontiversioon, otamme sovelluksen manuaalisesti käyttöön tuotannossa. Johdonmukaisin asia tässä kehitystyylissä oli epäjohdonmukaisuus - prosessissa ja tuloksissa.

Yli vuosikymmen sitten ketterät kehittäjät alkoivat omaksua ja edistää testiohjattua kehitystä ja jatkuvaa integraatiota (CI). Näillä tekniikoilla voimme luoda lähdekoodin automaattisesti aina, kun kehittäjä tarkistaa sen lähdetietovarastoon suorittamalla tyhjentävän yksikötestipaketin varmistaakseen, että sovellus toimii oikein. Monet testiohjatut kehittäjät alkoivat tehdä integraatiotestausta ja suorituskyvyn testausta toissijaisessa CI-prosessissa.

Jatkuvan integraation avulla voimme havaita virheet nopeammin ja vapauttaa koodin paljon nopeammin kuin olimme tehneet edellisinä vuosina. Ei ole liioiteltua sanoa, että CI kesytti rakennus- ja käyttöönottosyklin "rakennus" -puolen. Nykyään monet kehitystiimit ovat siirtyneet CI: n ulkopuolelta CD: lle, joka tarkoittaa joko jatkuvaa toimitusta tai jatkuvaa käyttöönottoa. Nimityksestä riippumatta CD on prosessi, joka siirtää ohjelmiston koodin sisäänkirjautumisesta vaiheistamiseen tai jopa tuotannon käyttöönottoon.

Tämä erä Avoimen lähdekoodin Java-projektit esittelee jatkuvan integraation Jenkinsin, johtavan CI / CD-automaatiopalvelimen, kanssa. Aloitamme yleiskatsauksella CI- ja CD-prosesseista ja määritämme sitten Java-verkkoprojektin Mavenin ja Jenkinsin avulla. Opit rakentamaan ja testaamaan projektia Jenkinsissä JUnitin avulla sekä rakentamisen virheiden vianmääritykseen. Asennat ja suoritat myös kourallisen suosittuja Jenkins-laajennuksia staattisen koodin analysointia ja raportointia varten.

Johdatus CI / CD: hen

Jatkuvassa integraatioprosessissa lähdekoodivarastoon tarkistettu koodi voidaan tarkistaa automaattisesti, rakentaa, testata monin tavoin ja julkaista arkistoon. Jatkuvan integraation toimimiseen tarvitaan CI-palvelin, kuten Jenkins, joka pystyy seuraamaan lähdekoodivarastosi uusien muutosten varalta ja vastaamaan määritettävissä olevilla tavoilla.

Otetaan esimerkiksi Java-sovellus, joka on rakennettu käyttämällä Mavenia. Tunnistaessaan koodimuutokset CI-palvelimesi voi vastata suorittamalla a mvn puhdas asennus. Tyypillisessä Maven-koontikokoonpanossa se suorittaa uuden joukon yksikkötestejä osana koontikomentoa. Lähdekoodia rakennettaessa palvelin pystyi suorittamaan minkä tahansa määrän muita toimintoja:

  • Yhdistä ominaisuushaara takaisin pää- tai päähaaraan, kun annettu koodi on läpäissyt yksikötestin.
  • Suorita staattinen koodianalyysi, kuten koodin peitto, koodin monimutkaisuus, yleisten virheiden tarkistukset jne.
  • Julkaise rakennuksen artefaktit arkistoon, kuten Artifactory tai Sonatype Nexus
  • Ota sovellus käyttöön integraatiotestiympäristössä
  • Suorita integrointitestit
  • Ota sovellus käyttöön suorituskykytestiympäristössä
  • Suorita sovelluksesi kuormitustesti
  • Ota sovellus käyttöön käyttäjän hyväksynnän testausympäristössä (UAT)
  • Ota sovellus käyttöön tuotannossa

Nämä vaiheet ovat kaiken tyyppisiä toimintoja, joita voit suorittaa osana CI / CD-prosessia. CI sisältää tyypillisesti kehityksen elinkaaren rakennus- ja testausvaiheet, kun taas CD laajentaa prosessia rakentamisartefaktin käyttöönottoon palvelimelle testausta varten. Joissakin ympäristöissä CD menee aina tuotantoon.

Jatkuva integraatio tehdään tyypillisesti työkalulla, kuten Jenkins, Bamboo tai TeamCity, joka organisoi rakennusvaiheet integraatioputkeen. Jenkins on luultavasti suosituin CI / CD-tuote, ja se sopii hyvin Dockerin kanssa.

Lataa ja asenna Jenkins

Jenkins on jatkuva integraatiopalvelin ja paljon muuta. Se koostuu automaatiomoottorista ja laajennusekosysteemistä, joka tukee jatkuvaa integrointia, automaattista testausta ja jatkuvaa toimitusta. Mukautat toimitusputken tarpeidesi mukaan.

Jenkinsin ajamiseksi on monia tapoja:

  1. Lataa WAR-tiedosto ja asenna se paikallisen tietokoneen servlet-säilöön.
  2. Asenna virtuaalikone julkiseen pilveen, kuten AWS, ja isännöi siellä Jenkins.
  3. Hyödynnä Jenkinsin pilvipalvelua, kuten CloudBees.
  4. Asenna Jenkins testiasennukseen Dockerin avulla.

Näytän, kuinka sekä paikallinen asennus että Docker-testiasennus asennetaan.

Lataa ja asenna Jenkins paikallisesti

Aloita lataamalla Jenkins ja valitsemalla pitkäaikaisen tuen (LTS) julkaisu Jenkinsin kotisivulta. Koska olen Macissa, asennus latasi automaattisesti a pkg tiedosto, joka sijoitti jenkins.war minun Sovellus / Jenkins kansio. WAR-tiedosto voidaan ottaa käyttöön mihin tahansa servlet-säilöön.

Haluat myös ladata ja asentaa Apache Tomcat. Tämän kirjoituksen jälkeen Tomcatin uusin versio on 8.5.4, mutta sinun pitäisi pystyä suorittamaan mikä tahansa uusin versio. Lataa postinumero tai tar.gz tiedosto ja pura se kiintolevylle. Kopioi jenkins.war-tiedosto Tomcatin tiedostoon verkkosovellukset ja suorita sitten bin / startup.sh tai bin / startup.bat tiedosto. Voit testata, että se on käynnissä avaamalla selaimesi: // paikallinen isäntä: 8080.

Käynnistä Jenkins avaamalla selain osoitteeseen URL: // localhost: 8080 / jenkins.

Sinun pitäisi saada näyttö, joka näyttää kuvalta 1.

Steven Haines

Seuraavaksi Jenkins luo järjestelmänvalvojan salasanan ja kirjoittaa molemmat Tomcatin salasanalle lokit / catalina.out lokitiedosto ja seuraavaan kotihakemistoon: .jenkins / secrets / initialAdminPassword. Nouda salasana, kirjoita se Hallintasalasana-lomake-elementtiin (näkyy kuvassa 1) ja paina Jatkaa. Sinua pyydetään joko asentamaan ehdotetut laajennukset tai valitsemalla asennettavat laajennukset. Suosittelen toistaiseksi ehdotettujen laajennusten asentamista.

Nyt sinua pyydetään luomaan järjestelmänvalvojan käyttäjä. Kirjoita järjestelmänvalvojan käyttäjätiedot ja paina Tallenna ja lopeta. Napsauta lopuksi Aloita Jenkinsin käyttö. Näet nyt Jenkinsin kotisivun, kuten kuvassa 2 on esitetty.

Steven Haines

Määritä esimerkkisovellus Mavenilla

Ennen kuin voimme käyttää Jenkinsiä Java-verkkoprojektin rakentamiseen Mavenin kanssa, meidän on määritettävä nämä molemmat tekniikat. Hupun alla Jenkins tarkistaa lähdekoodin lähdekoodivarastosta paikalliseen hakemistoon ja suorittaa määrittämäsi Maven-kohteet. Jotta se toimisi, sinun on asennettava yksi tai useampi Maven-versio, kerrot Jenkinsille, missä ne on asennettu, ja määritettävä Maven-versio, jonka haluat Jenkinsin käyttävän sovellustasi rakennettaessa.

Napsauta Jenkins-kojelaudassa Hallitse Jenkinsia ja valitse Yleinen työkalun määritys. Ensimmäinen asia, jonka teemme, on määrittää JDK. Napsauta JDK-osiossa Lisää JDK, anna sille nimi (minun on "JDK8") ja jätä oletusarvo Asenna osoitteesta java.sun.com tarkastettu. Hyväksy Oracle-lisenssisopimus ja napsauta "Kirjoita käyttäjänimesi / salasanasi" -linkkiä. Kirjoita Oracle-käyttäjänimesi ja salasanasi ja paina kiinni. Sinulle esitetään samanlainen näyttö kuin kuvassa 3.

Steven Haines

Klikkaus Käytä tallenna työsi, vieritä alas Maven-osioon ja napsauta Lisää Maven. Kirjoita Mavenille nimi (minun on "Maven 3.3.9"), jätä "Asenna automaattisesti" ja "Asenna Apache-valinnasta". Klikkaus Tallentaa kun olet valmis. Sinun tulisi näyttää kuvion 4 kaltainen näyttö.

Steven Haines

Git on valmiiksi määritetty Jenkinsin kanssa, joten sinun pitäisi nyt olla kaikki asennetut työkalut, jotka sinun on maksettava ja rakennettava Java-projekti Gitiltä Mavenin kanssa.

Asenna Jenkins Docker-astiaan

Jos et halua asentaa Jenkinsia paikalliselle koneellesi, sinulla on mahdollisuus suorittaa se Docker-säilössä. Virallisen Jenkins Docker -kuvan avulla voit suorittaa ja testata Jenkinsin asennusta määrittämättä sitä tosiasiallisesti paikalliselle koneelle.

Dockerin asentaminen

Katso Docker-esittelyni aloitusopas Dockerille, mukaan lukien asennus- ja asennusohjeet.

Olettaen, että kehitysympäristössäsi on jo Docker-asetukset, voit käynnistää Jenkinsin Docker-komentoriviltä:

 telakointiajo -p 8080: 8080 -p 50000: 50000 -v / sinun / koti / jenkins: / var / jenkins_home -d jenkins 

Tämä komento kehottaa Dockeria suorittamaan viimeisimmän version jenkins seuraavilla vaihtoehdoilla:

  • -p 8080: 8080: Kartat Docker-säilön portti 8080 Docker-isännän porttiin 8080, jotta voit muodostaa yhteyden portin 8080 Jenkins-verkkosovellukseen.
  • -p 50000: 50000: Kartat portti 50000 Docker-säilössä porttiin 50000 Docker-isännässä. Jenkins käyttää tätä porttia sisäisesti, jotta rakennus-orja-suorittajat voivat muodostaa yhteyden Jenkins-isäntäpalvelimeen.
  • -v / sinun / koti / jenkins: / var / jenkins_home: Kartoittaa Jenkins-tietovaraston paikalliseen hakemistoon, jotta voit käynnistää Docker-säilön uudelleen menettämättä tietojasi.
  • -d: Voit suorittaa Docker-säilön erillisessä tilassa tai daemon-prosessina.

Seuraava näyttää näiden komentojen suorittamisen:

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

Koska käytämme Docker-säilöä erillisessä tilassa, meidän on noudatettava Jenkinsin tuottamia lokeja. Voit tehdä sen telakointilokit -f komento. Syötä vain muutamat ensimmäiset heksadesimaaliluvut säilötunnuksesta, tässä tapauksessa cc16573ce71ae424d4122e9e4afd3a294fda6606e0333838fe332fc4e11d0d53:

 $ docker logs -f cc1 Suoritetaan osoitteesta: /usr/share/jenkins/jenkins.war webroot: EnvVars.masterEnvVars.get ("JENKINS_HOME") ... **************** ********************************************** ***** *************************************************** ****** ********************************************* ***************** Jenkinsin alkuasetukset vaaditaan. Järjestelmänvalvojan käyttäjä on luotu ja salasana luotu. Käytä seuraavaa salasanaa jatkaaksesi asennusta: 205be6fe69c447dd933a3c9ce7420496 Tämä löytyy myös osoitteesta: / var / jenkins_home / secrets / initialAdminPassword ************************* ************************************** ************* ************************************************* *************************************************** ********* 

Määritä Jenkins CI Java-verkkosovellukselle

Seuraavaksi asennamme yksinkertaisen Java-verkkosovellustyön Jenkinsissä. Koska sovellus ei ole tärkeä tässä opetusohjelmassa, käytämme yksinkertaista Hello, World Servlet -esimerkkisovellustani, jota olen isännöinyt GitHubissa.

Jenkinsin testaamiseksi sinun on pystyttävä tekemään muutokset lähdekoodivarastoon, joten sinun on luotava kyseinen arkisto nyt. Napsauta Jenkinsin kotisivulla Luo uusia työpaikkoja -painiketta ja kirjoita projektisi nimi. Sinua pyydetään valitsemaan projektityyppi kuvan 5 mukaisesti.

Steven Haines

Valitsemme Freestyle-projektityypin tälle projektille, mutta sinun tulee olla tietoinen vaihtoehdoistasi:

  • Freestyle-projekti: Tämän yleisimmän tyyppisen projektin avulla voit seurata lähdekoodivarastoa ja käyttää mitä tahansa rakennusjärjestelmää, kuten Maven ja Ant.
  • Putkilinja: Valitse tämä projektityyppi monimutkaisille projekteille, joissa on liikkuvia osia, jotka sinun on koordinoitava useiden rakennus-orjien välillä.
  • Ulkoinen työ: Käytä tätä määrittääksesi automaattisen ulkoisen työn, jota haluat seurata Jenkinsissä osana rakennustasi.
  • Usean kokoonpanon projekti: Tämä on työtyyppi projekteille, jotka vaativat erilaisia ​​kokoonpanoja eri ympäristöille, kuten tuotannolle, vaiheistukselle ja testille.
  • Kansio: Kun koontisi on monimutkainen, kannattaa ehkä järjestää asiat kansioihin, joista jokaisella on oma erillinen nimitilansa.
  • Usean haaran putki: luo automaattisesti sarja putkiprojekteja lähdekoodivarastossa määriteltyjen koodihaarojen perusteella

Kirjoita projektin nimi, tässä tapauksessa "hello-world-servlet", ja valitse "OK". Valitse seuraavaksi GitHub-projektija kirjoita sitten projektisi GitHub-URL: //github.com/ligado/hello-world-servlet.

Valitse Lähdekoodin hallinta -kohdassa Git ja kirjoita sama projektin URL-osoite.

Valitse Build Triggers -osiossa Rakenna, kun muutos siirretään GitHubiin jotta Jenkins rakentaa koodisi milloin tahansa, kun siirrät muutoksen GitHubiin.

Lisää Rakennus-osioon uusi koontivaihe ja valitse Kutsu ylimmän tason Maven-kohteet, valitse aiemmin määrittämäsi Maven-ilmentymä (kuten "Maven 3.3.9") ja kirjoita puhdas asennus maalialueella. Jätä rakennuksen jälkeiset toimet tyhjiksi toistaiseksi. Kun olet valmis, paina Tallentaa.

Kun palaat kojelautaan, sinun pitäisi nähdä kuvan 6 kaltainen näyttö.

Steven Haines

Testaa kokoonpanosi painamalla Rakenna nyt painike hello-world-servlet-projektin vieressä. Sinun pitäisi nähdä onnistuneesti toteutettu koontiversio projektisivun vasemmalla puolella olevassa koontihistoriasta, joka näkyy kuvassa 7.

Steven Haines

Jos haluat nähdä tarkalleen, mitä tapahtui, napsauta koontiversiota ja napsauta sitten Konsolin ulostulo, joka näyttää kaikki Jenkinsin suorittamat vaiheet ja niiden tulokset. Konsolin lähtö on alapuolella.

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