Ohjelmointi

Mikä on Jenkins? CI-palvelin selitti

Jenkins tarjoaa yksinkertaisen tavan luoda jatkuva integrointi- tai jatkuva toimitus (CI / CD) -ympäristö melkein mille tahansa kielten ja lähdekoodivarastojen yhdistelmälle putkilinjojen avulla, sekä automatisoida muut rutiinikehitystehtävät. Vaikka Jenkins ei poista tarvetta luoda komentosarjoja yksittäisille vaiheille, se antaa sinulle nopeamman ja vankemman tavan integroida koko rakennus-, testaus- ja käyttöönottotyökalujen ketju kuin pystyt helposti rakentamaan itse.

"Älä riko iltaisin rakennusta!" on kardinaalinen sääntö ohjelmistokehitysliikkeissä, jotka lähettävät testaajille päivittäin tuoreen päivittäisen tuoteversion. Ennen Jenkinsia paras kehittäjä voisi tehdä estääkseen yökerhon rikkomisen rakentamalla ja testaamalla huolellisesti ja onnistuneesti paikallisella koneella ennen koodin antamista. Mutta se tarkoitti muutosten testaamista erillään, ilman kaikkien muiden päivittäinen sitoutuminen. Ei ollut mitään vakaata takeita siitä, että yöllinen rakennus selviäisi sitoutumisestaan.

Jenkins - alun perin Hudson - oli suora vastaus tähän rajoitukseen.

Hudson ja Jenkins

Vuonna 2004 Kohsuke Kawaguchi oli Java-kehittäjä Sunissa. Kawaguchi kyllästyi rakenteiden rikkomiseen kehitystyössään ja halusi löytää tavan tietää ennen koodin lähettämistä arkistoon, toimiiko koodi. Joten Kawaguchi rakensi Java: lle automaatiopalvelimen, jotta tämä olisi mahdollista, nimeltään Hudson. Hudsonista tuli suosittu Sunissa ja levisi muille yrityksille avoimen lähdekoodin muodossa.

Nopeasti eteenpäin vuoteen 2011, ja kiista Oraclen (joka oli hankkinut Sunin) ja riippumattoman Hudsonin avoimen lähdekoodin yhteisön välillä johti haarukkaan, jolla oli nimenmuutos Jenkins. Vuonna 2014 Kawaguchista tuli CloudBeesin johtaja, joka tarjoaa Jenkins-pohjaisia ​​jatkuvia toimitustuotteita.

Molemmat haarukat olivat edelleen olemassa, vaikka Jenkins oli paljon aktiivisempi. Nykyään Jenkins-projekti on edelleen aktiivinen. Hudson-verkkosivusto suljettiin 31. tammikuuta 2020.

Maaliskuussa 2019 Linux Foundation, yhdessä CloudBeesin, Googlen ja useiden muiden yritysten kanssa, käynnisti uuden avoimen lähdekoodin ohjelmistosäätiön nimeltä Continuous Delivery Foundation (CDF). Jenkinsin avustajat päättivät, että heidän projektinsa tulisi liittyä tähän uuteen säätiöön. Kawaguchi kirjoitti tuolloin, että mikään merkittävä ei muutu käyttäjille.

Tammikuussa 2020 Kawaguchi ilmoitti siirtyvänsä uuteen käynnistyskoneeseensa, Launchable. Hän sanoi myös, että hän eroaisi virallisesti Jenkinsistä, vaikka hän pysyisikin Jatkuvan toimituksen säätiön teknisessä valvontakomiteassa ja vaihtaisi roolinsa CloudBeesissä neuvonantajaksi.

Liittyvä video: Kuinka toimittaa koodi nopeammin CI / CD: llä

Jenkinsin automaatio

Nykyään Jenkins on johtava avoimen lähdekoodin automaatiopalvelin, jossa on noin 1600 laajennusta, jotka tukevat kaikenlaisten kehitystehtävien automatisointia. Ongelma, jonka Kawaguchi yritti alun perin ratkaista, Java-koodin jatkuva integrointi ja jatkuva toimittaminen (ts. Rakennusprojektit, testien suorittaminen, staattisten koodien analysointi ja käyttöönotto), on vain yksi monista prosesseista, jotka ihmiset automatisoivat Jenkinsin kanssa. Nämä 1600 laajennusta kattavat viisi aluetta: käyttöympäristöt, käyttöliittymä, hallinto, lähdekoodien hallinta ja useimmiten rakennusten hallinta.

Kuinka Jenkins toimii

Jenkins jaetaan WAR-arkistona ja asennuspaketteina tärkeimmille käyttöjärjestelmille, Homebrew-pakettina, Docker-kuvana ja lähdekoodina. Lähdekoodi on enimmäkseen Java, jossa on muutama Groovy-, Ruby- ja Antlr-tiedosto.

Voit ajaa Jenkins WARin itsenäisenä tai servletinä Java-sovelluspalvelimessa, kuten Tomcat. Kummassakin tapauksessa se tuottaa web-käyttöliittymän ja hyväksyy puhelut REST-sovellusliittymään.

Kun suoritat Jenkinsin ensimmäistä kertaa, se luo järjestelmänvalvojan käyttäjän, jolla on pitkä satunnainen salasana, jonka voit liittää alkuperäiseen verkkosivuunsa asennuksen avaamiseksi.

Jenkins-laajennukset

Asennuksen jälkeen Jenkins antaa sinun joko hyväksyä oletuslaajennuslista tai valita omat laajennuksesi.

Kun olet valinnut alkuperäisen laajennussarjan, napsauta Asenna-painiketta ja Jenkins lisää ne.

Jenkinsin päänäyttö näyttää nykyisen koontijonon ja suorittajan tilan, ja tarjoaa linkkejä uusien kohteiden (töiden) luomiseen, käyttäjien hallintaan, rakennushistorioiden tarkastelemiseen, Jenkinsin hallintaan, omien näkymien tarkastelemiseen ja kirjautumistietojen hallintaan.

Uusi Jenkins-kohde voi olla mikä tahansa kuudesta työn tyypistä ja kansio kohteiden järjestämistä varten.

Voit hallita Jenkins -sivua 18 tavalla, mukaan lukien mahdollisuus avata komentoriviliitäntä. Tässä vaiheessa meidän pitäisi kuitenkin tarkastella putkilinjoja, jotka ovat parannettuja työnkulkuja, jotka tyypillisesti määritetään komentosarjoilla.

Jenkins-putkistot

Kun olet määrittänyt Jenkinsin, on aika luoda joitain projekteja, jotka Jenkins voi rakentaa sinulle. Kun sinä voi käytä web-käyttöliittymää komentosarjojen luomiseen, nykyinen paras käytäntö on luoda putkikomentosarja nimeltä Jenkinsfile, ja tarkista se arkistoon. Alla oleva kuvakaappaus näyttää kokoonpanon verkkolomakkeen usean haaran putkistolle.

Kuten näette, tällaisen putkilinjan haaralähteet Jenkinsin perusasennuksessani voivat olla Git- tai Subversion-arkistot, mukaan lukien GitHub. Jos tarvitset muunlaisia ​​arkistoja tai erilaisia ​​online-arkistopalveluja, sinun tarvitsee vain lisätä sopivat laajennukset ja käynnistää Jenkins uudelleen. Yritin, mutta en voinut ajatella lähdekoodinhallintajärjestelmää (SCM), jolla ei vielä olisi Jenkins-laajennusta.

Jenkins-putkistot voivat olla selittäviä tai komentosarjoja. A vakuuttava pipeline, yksinkertaisempi näistä kahdesta, käyttää Groovy-yhteensopivaa syntaksia - ja jos haluat, voit aloittaa tiedoston #! groovy osoittamaan koodieditori oikeaan suuntaan. Vakuuttava putki alkaa a: lla putki lohko, määrittää agenttija määrittelee Tasot jotka sisältävät suoritettavan askeleet, kuten alla olevassa kolmivaiheisessa esimerkissä.

putki {

agentti mitään

Tasot {

vaihe (‘Rakennus’) {

askeleet {

kaiku ’rakennus ..’

            }

        }

vaihe (”testi”) {

askeleet {

kaiku ’Testaus ..’

            }

        }

vaihe (”käyttöönotto”) {

askeleet {

kaiku ’Käyttöönotto ....’

            }

        }

    }

}

putki on pakollinen ulompi lohko Jenkins-putkilaajennuksen kutsumiseksi. agentti määrittää, mihin haluat ajaa putkea. minkä tahansa käskee käyttää mitä tahansa käytettävissä olevaa agenttia putkilinjan tai vaiheen suorittamiseen. Tarkempi agentti voi ilmoittaa säilön käytettäväksi, esimerkiksi:

agentti {

telakka {

kuva 'maven: 3-alppinen'

tunniste ”minun määrittämäni etiketti”

args ‘-v / tmp: / tmp’

    }

}

Tasot sisältää yhden tai useamman lavadirektiivin sarjan. Yllä olevassa esimerkissä kolme vaihetta ovat Build, Test ja Deploy.

askeleet tehdä varsinainen työ. Yllä olevassa esimerkissä vain tulostetut viestit. Hyödyllisempi rakennusvaihe saattaa näyttää seuraavalta:

putki {

agentti mitään

Tasot {

vaihe (‘Rakennus’) {

askeleet {

sh 'merkki'

Artefaktien artefaktit: ’** / target / *. jar’, sormenjälki: true

            }

        }

    }

}

Tässä vetoamme tehdä ja sitten arkistoida kaikki tuotetut JAR-tiedostot Jenkins-arkistoon.

lähettää jakso määrittelee toiminnot, jotka suoritetaan putkilinjan ajon tai vaiheen lopussa. Voit käyttää useita post-condition-lohkoja postitusosassa: aina, muuttunut, epäonnistuminen, menestys, epävakaaja keskeytettiin.

Esimerkiksi alla oleva Jenkins-tiedosto käyttää aina JUnit-testiä testivaiheen jälkeen, mutta lähettää sähköpostia vain, jos putki epäonnistuu.

putki {

agentti mitään

Tasot {

vaihe (”testi”) {

askeleet {

sh 'tarkista'

            }

        }

    }

viesti {

aina {

junit ’** / target / *. xml’

        }

epäonnistuminen {

sähköposti osoitteeseen [email protected], aihe: "Putki epäonnistui :("

        }

    }

}

Deklaratiivinen putki voi ilmaista suurimman osan putkilinjojen määrittelystä, ja se on paljon helpompi oppia kuin komentosarjattu putkistosyntaksi, joka on Groovy-pohjainen DSL. Komentosarjattu putki on itse asiassa täysimittainen ohjelmointiympäristö.

Vertailun vuoksi seuraavat kaksi Jenkins-tiedostoa ovat täysin samanlaisia.

Vakuutusputki

putki {

agentti {docker ’solmu: 6.3’}

Tasot {

vaihe (‘rakentaa’) {

askeleet {

sh 'npm - versio'

            }

        }

    }

Komentosarjattu putki

solmu (’telakka’) {

kassalle scm

vaihe (‘Rakennus’) {

docker.image (’solmu: 6.3’). sisällä {

sh 'npm - versio'

        }

    }

}

Sininen valtameri, Jenkinsin graafinen käyttöliittymä

Jos haluat uusimman ja suurimman Jenkins-käyttöliittymän, voit käyttää Blue Ocean -laajennusta, joka tarjoaa graafisen käyttökokemuksen. Voit lisätä Blue Ocean -laajennuksen nykyiseen Jenkins-asennukseesi tai suorittaa Jenkins / Blue Ocean Docker -säiliön. Kun Blue Ocean on asennettu, Jenkinsin päävalikossa on ylimääräinen kuvake:

Voit avata Sinisen valtameren suoraan, jos haluat. Se on Jenkins-palvelimen / sinisessä kansiossa. Putkilinjan luominen Sinisellä valtamerellä on hieman graafisempaa kuin tavallisessa Jenkinsissä:

Jenkins Docker

Kuten aiemmin mainitsin, Jenkins jaetaan myös Docker-kuvana. Prosessissa ei ole paljon muuta: Kun olet valinnut SCM-tyypin, annat URL-osoitteen ja tunnistetiedot, luo sitten putki yhdestä arkistosta tai skannaa kaikki organisaation arkistot. Jokainen haara, jolla on Jenkinsfile, saa putkilinjan.

Tässä minulla on Blue Ocean Docker -kuva, johon oli asennettu muutama enemmän Git-palvelulaajennuksia kuin SCM-palveluntarjoajien oletusluettelo:

Kun olet suorittanut joitain putkistoja, Blue Ocean -laajennus näyttää niiden tilan, kuten yllä on esitetty. Voit lähentää yksittäistä putkistoa nähdäksesi vaiheet ja vaiheet:

Voit myös lähentää sivuliikkeitä (ylhäältä) ja aktiviteetteja (alhaalta):

Miksi käyttää Jenkinsia?

Olemme käyttäneet Jenkins Pipeline -laajennusta, joka tukee yleistä jatkuvan integroinnin / jatkuvan toimituksen (CICD) käyttötapausta, joka on todennäköisesti Jenkinsin yleisin käyttö. Joihinkin muihin käyttötapauksiin liittyy erityisiä näkökohtia.

Java-projektit olivat Jenkinsin alkuperäinen raison d’être. Olemme jo nähneet, että Jenkins tukee rakentamista Mavenin kanssa; se toimii myös Ant, Gradle, JUnit, Nexus ja Artifactory kanssa.

Android käyttää eräänlaista Java-ohjelmaa, mutta esittelee ongelman testaamiseen monilla Android-laitteilla. Android-emulaattorilaajennuksen avulla voit rakentaa ja testata niin monella emuloidulla laitteella kuin haluat määritellä. Google Play Publisher -laajennuksen avulla voit lähettää rakenteita Google Playn alfakanavalle julkaisua tai lisätestejä varten todellisilla laitteilla.

Olen esittänyt esimerkkejä siitä, missä määritimme Docker-kontin putkilinjan edustajaksi ja missä juoksimme Jenkinsin ja Blue Oceanin Docker-kontissa. Docker-kontit ovat erittäin hyödyllisiä Jenkins-ympäristössä nopeuden, skaalautuvuuden ja yhtenäisyyden parantamiseksi.

Jenkinsille ja GitHubille on kaksi suurta käyttötapaa. Yksi on rakentaa integraatio, joka voi sisältää palvelukoukun käynnistää Jenkins jokaisessa sitoutumisessa GitHub-arkistoon. Toinen on GitHub-todennuksen käyttö Jenkinsin käytön hallintaan OAuthin kautta.

Jenkins tukee monia muita kieliä paitsi Java. C / C ++: lle on laajennuksia virheiden ja varoitusten sieppaamiseksi konsolista, komentosarjojen luomiseksi CMake-ohjelmalla, yksikötestien suorittamiseksi ja staattisen koodianalyysin suorittamiseksi. Jenkinsillä on useita integraatioita PHP-työkaluihin.

Vaikka Python-koodia ei tarvitse rakentaa (ellet käytä esimerkiksi Cythonia tai luo Python-pyörää asennusta varten), on hyödyllistä, että Jenkins integroituu Python-testaus- ja raportointityökaluihin, kuten Nose2 ja Pytest, sekä koodin laatuun työkaluja, kuten Pylint. Samoin Jenkins integroituu Ruby-työkaluihin, kuten Rake, Cucumber, Brakeman ja CI :: Reporter.

Jenkins CI / CD: lle

Kaiken kaikkiaan Jenkins tarjoaa yksinkertaisen tavan luoda CI / CD-ympäristö melkein mihin tahansa kielten ja lähdekoodivarastojen yhdistelmään putkilinjojen avulla sekä automatisoida useita muita rutiinikehitystehtäviä. Vaikka Jenkins ei poista tarvetta luoda komentosarjoja yksittäisille vaiheille, se antaa sinulle nopeamman ja vankemman tavan integroida koko rakennus-, testaus- ja käyttöönottotyökalujen ketju kuin pystyt helposti rakentamaan itse.

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