Programiranje

Kaj je Jenkins? Razložen strežnik CI

Jenkins ponuja preprost način za nastavitev okolja za neprekinjeno integracijo ali neprekinjeno dostavo (CI / CD) za skoraj vsako kombinacijo jezikov in repozitorijev izvorne kode z uporabo cevovodov, pa tudi za avtomatizacijo drugih rutinskih razvojnih nalog. Jenkins sicer ne odpravlja potrebe po ustvarjanju skriptov za posamezne korake, vendar vam omogoča hitrejši in trdnejši način za integracijo celotne verige orodij za gradnjo, preizkušanje in uvajanje, kot jih lahko preprosto sestavite sami.

"Ne lomi nočne gradnje!" je glavno pravilo v trgovinah za razvoj programske opreme, ki vsako jutro objavijo novo izdelano različico izdelka za svoje preizkuševalce. Pred Jenkinsom je bilo najbolje, da se razvijalec izogne ​​prekinitvi nočne gradnje, da je skrbno in uspešno preizkusil na lokalnem računalniku, preden je prevzel kodo. Toda to je pomenilo preskušanje lastnih sprememb v izolaciji, brez vsakodnevne obveznosti vseh drugih. Ni bilo nobenega trdnega zagotovila, da bo nočna gradnja preživela svojo obveznost.

Jenkins - prvotno Hudson - je bil neposreden odgovor na to omejitev.

Hudson in Jenkins

Leta 2004 je bil Kohsuke Kawaguchi razvijalec Java za Sun. Kawaguchi se je naveličal razbijati gradnje v svojem razvojnem delu in je želel najti način, kako vedeti, preden koda v odlagališče, ali koda deluje. Tako je Kawaguchi zgradil strežnik za avtomatizacijo v Javi in ​​za Javo, da to omogoči, imenovan Hudson. Hudson je postal priljubljen pri Sunu in se je razširil na druga podjetja kot odprtokodni.

Hitro prehod na leto 2011 in spor med Oracleom (ki je prevzel podjetje Sun) in neodvisno Hudsonovo odprtokodno skupnostjo je privedel do razcepa s spremembo imena Jenkins. Leta 2014 je Kawaguchi postal tehnični direktor CloudBees, ki ponuja izdelke za stalno dostavo na osnovi Jenkinsa.

Obe vilici sta še naprej obstajali, čeprav je bil Jenkins veliko bolj aktiven. Danes je projekt Jenkins še vedno aktiven. Spletno mesto Hudson je bilo zaprto 31. januarja 2020.

Marca 2019 je fundacija Linux skupaj z CloudBees, Googlom in številnimi drugimi podjetji ustanovila novo odprtokodno fundacijo programske opreme, imenovano Continuous Delivery Foundation (CDF). Sodelavci Jenkinsa so se odločili, da se njihov projekt pridruži tej novi fundaciji. Kawaguchi je takrat zapisal, da se za uporabnike ne bo spremenilo nič pomembnega.

Januarja 2020 je Kawaguchi sporočil, da se seli v svoj nov zagon, Launchable. Povedal je tudi, da se bo uradno umaknil od Jenkinsa, čeprav bo ostal v odboru za tehnični nadzor fundacije za neprekinjeno dostavo in svojo vlogo v CloudBees zamenjal za svetovalca.

Sorodni video: Kako hitreje dostaviti kodo s CI / CD

Jenkinsova avtomatizacija

Danes je Jenkins vodilni odprtokodni strežnik za avtomatizacijo s približno 1.600 vtičniki za podporo avtomatizaciji vseh vrst razvojnih nalog. Težava, ki jo je Kawaguchi prvotno poskušal rešiti, nenehna integracija in neprekinjena dostava kode Java (tj. Gradnja projektov, izvajanje testov, izvajanje statične analize kode in uvajanje) je le eden izmed mnogih procesov, ki jih ljudje avtomatizirajo z Jenkinsom. Teh 1.6 vtičnikov obsega pet področij: platforme, uporabniški vmesnik, upravljanje, upravljanje izvorne kode in najpogosteje upravljanje zgradb.

Kako deluje Jenkins

Jenkins se distribuira kot arhiv WAR in kot namestitveni paketi za glavne operacijske sisteme, kot paket Homebrew, kot slika Dockerja in kot izvorna koda. Izvorna koda je večinoma Java, z nekaj datotekami Groovy, Ruby in Antlr.

Jenkins WAR lahko zaženete samostojno ali kot strežniški programček v aplikacijskem strežniku Java, kot je Tomcat. V obeh primerih izdela spletni uporabniški vmesnik in sprejme klice na svoj REST API.

Ko Jenkins zaženete prvič, ustvari skrbniškega uporabnika z dolgim ​​naključnim geslom, ki ga lahko prilepite na začetno spletno stran, da odklenete namestitev.

Jenkinsovi vtičniki

Ko je Jenkins nameščen, lahko bodisi sprejmete privzeti seznam vtičnikov bodisi izberete svoje vtičnike.

Ko izberete začetni nabor vtičnikov, kliknite gumb Namesti in Jenkins jih bo dodal.

Glavni zaslon Jenkins prikazuje trenutno čakalno vrsto in stanje izvršitelja ter ponuja povezave za ustvarjanje novih elementov (delovnih mest), upravljanje uporabnikov, ogled zgodovin zgradb, upravljanje Jenkinsa, ogled pogledov po meri in upravljanje poverilnic.

Nov Jenkinsov element je lahko katera koli od šestih vrst opravil in mapa za organiziranje predmetov.

Na strani Manage Jenkins lahko storite 18 stvari, vključno z možnostjo odpiranja vmesnika ukazne vrstice. Na tej točki pa bi morali pogledati cevovode, ki so izboljšani potek dela, ki ga običajno definirajo skripti.

Jenkinsovi cevovodi

Ko je Jenkins konfiguriran, je čas, da ustvarite nekaj projektov, ki jih lahko Jenkins zgradi za vas. Medtem ko ti lahko uporabite spletni uporabniški vmesnik za ustvarjanje skriptov, trenutno najboljša praksa je ustvariti skript cevovoda z imenom Jenkinsfile, in ga preverite v svojem skladišču. Spodnji posnetek zaslona prikazuje spletni obrazec za konfiguracijo cevovoda z več vejami.

Kot lahko vidite, so veje za to vrsto plinovoda v moji osnovni namestitvi Jenkins lahko skladišča Git ali Subversion, vključno z GitHubom. Če potrebujete druge vrste repozitorijev ali različne spletne storitve repozitorijev, je samo vprašanje dodajanja ustreznih vtičnikov in ponovnega zagona Jenkinsa. Poskušal sem, vendar nisem mogel pomisliti na sistem za upravljanje izvorne kode (SCM), ki še nima navedenega vtičnika Jenkins.

Jenkinovi cevovodi so lahko deklarativni ali skriptirani. A izjavo cevovod, preprostejši od obeh, uporablja skladnjo, združljivo z Groovy - in če želite, lahko datoteko zaženete z #! groovy da usmerjevalnik kode usmerite v pravo smer. Izjavni cevovod se začne z cevovod blok, definira agent, in opredeljuje obdobja ki vključujejo izvršljivo datoteko koraki, kot v spodnjem tristopenjskem primeru.

cevovod {

agent kateri koli

obdobja {

stopnja ('Build') {

koraki {

echo "Building .."

            }

        }

stopnja („Test“) {

koraki {

odmev "Testiranje .."

            }

        }

faza („Razporeditev“) {

koraki {

echo "Razmeščanje ...."

            }

        }

    }

}

cevovod je obvezen zunanji blok za priklic vtičnika za cevovod Jenkins. agent določa, kam želite voditi plinovod. kaj pravi, da za zagon plinovoda ali etape uporabite katero koli razpoložljivo sredstvo. Natančnejši agent lahko razglasi vsebnik za uporabo, na primer:

agent {

docker {

slika "maven: 3-alpine"

oznaka „my-defined-label“

args ‘-v / tmp: / tmp’

    }

}

obdobja vsebujejo zaporedje ene ali več faznih direktiv. V zgornjem primeru so tri stopnje Build, Test in Deploy.

koraki opraviti dejansko delo. V zgornjem primeru zgolj natisnjena sporočila. Uporabnejši korak gradnje bi lahko bil videti takole:

cevovod {

agent kateri koli

obdobja {

stopnja ('Build') {

koraki {

sh 'narediti'

archiveArtifacts artefakti: ‘** / target / *. jar’, prstni odtis: true

            }

        }

    }

}

Tu se sklicujemo naredite iz lupine, nato pa vse proizvedene datoteke JAR arhivirajte v Jenkinsov arhiv.

The objava Oddelek definira ukrepe, ki se bodo izvajali na koncu poteka ali faze cevovoda. V odseku za objave lahko uporabite številne bloke post-pogojev: nenehno, spremenila, neuspeh, uspeh, nestabilna, in prekinil.

Na primer, spodnja datoteka Jenkins po preskusni fazi vedno zažene JUnit, vendar pošlje e-pošto le, če cevovod ne uspe.

cevovod {

agent kateri koli

obdobja {

stopnja („Test“) {

koraki {

sh ‘preveri’

            }

        }

    }

objavi {

nenehno {

junit ‘** / target / *. xml’

        }

neuspeh {

mail na: [email protected], zadeva: ‘Cevovod ni uspel :(‘

        }

    }

}

Izjavni cevovod lahko izrazi večino tega, kar potrebujete za definiranje cevovodov, in je veliko lažji za učenje kot sintaksa skriptnega cevovoda, ki je groovyjev DSL. Skriptirani plinovod je pravzaprav popolno programsko okolje.

Za primerjavo, naslednji dve datoteki Jenkins sta popolnoma enakovredni.

Deklarativni cevovod

cevovod {

agent {docker ‘vozlišče: 6.3’}

obdobja {

faza ("gradnja") {

koraki {

sh ‘npm —verzija’

            }

        }

    }

Skriptirani cevovod

vozlišče ('docker') {

plačilo scm

stopnja ('Build') {

docker.image ('vozlišče: 6.3'). znotraj {

sh ‘npm —verzija’

        }

    }

}

Modri ​​ocean, uporabniški vmesnik Jenkins

Če želite najnovejši in najboljši uporabniški vmesnik Jenkins, lahko uporabite vtičnik Blue Ocean, ki ponuja grafično uporabniško izkušnjo. V obstoječo Jenkinsovo namestitev lahko dodate vtičnik Blue Ocean ali zaženete vsebnik Jenkins / Blue Ocean Docker. Z nameščenim Blue Ocean bo imel vaš glavni meni Jenkins dodatno ikono:

Če želite, lahko Blue Ocean odprete neposredno. Nahaja se v / modri mapi na strežniku Jenkins. Ustvarjanje cevovodov v Modrem oceanu je nekoliko bolj grafično kot v navadnem Jenkinsu:

Jenkins Docker

Kot sem že omenil, se Jenkins distribuira tudi kot Dockerjeva slika. Postopek ni veliko več: Ko izberete vrsto SCM, navedete URL in poverilnice, nato iz enega skladišča ustvarite cevovod ali pregledate vsa skladišča v organizaciji. Vsaka veja z Jenkinsfileom bo dobila cevovod.

Tu izvajam sliko Blue Ocean Docker, ki je priložena z nekaj več vtičniki storitve Git kot privzetim seznamom ponudnikov SCM:

Ko zaženete nekaj cevovodov, bo vtičnik Blue Ocean prikazal njihovo stanje, kot je prikazano zgoraj. Lahko si povečate posamezen cevovod, da si ogledate stopnje in korake:

Povečate lahko tudi podružnice (zgoraj) in dejavnosti (spodaj):

Zakaj uporabljati Jenkinsa?

Vtičnik Jenkins Pipeline, ki smo ga uporabljali, podpira splošni primer uporabe za neprekinjeno integracijo / neprekinjeno dostavo (CICD), ki je verjetno najpogostejša uporaba za Jenkins. Za nekatere druge primere uporabe obstajajo posebni premisleki.

Java-projekti so bili prvotni razlog za nastanek Jenkinsa. Že smo videli, da Jenkins podpira gradnjo z Mavenom; deluje tudi z Ant, Gradle, JUnit, Nexus in Artifactory.

Android poganja nekakšno Javo, vendar uvaja vprašanje, kako testirati na širokem spektru naprav Android. Vtičnik za emulator Android vam omogoča, da zgradite in preizkusite toliko emuliranih naprav, kot jih želite definirati. Vtičnik Google Play Publisher vam omogoča pošiljanje zgradb alfa kanalu v Googlu Play za izdajo ali nadaljnje preskušanje na dejanskih napravah.

Pokazal sem primere, ko smo kot agent za cevovod določili Dockerjev vsebnik in kjer smo v Dockerjevem vsebniku vodili Jenkins in Blue Ocean. Docker posode so zelo uporabne v Jenkinsovem okolju za izboljšanje hitrosti, razširljivosti in doslednosti.

Obstajata dva glavna primera uporabe Jenkins in GitHub. Ena je integracija gradnje, ki lahko vključuje kavelj za storitve, ki sproži Jenkinsa ob vsaki predaji v vaše skladišče GitHub. Drugi je uporaba overjanja GitHub za nadzor dostopa do Jenkinsa prek OAuth.

Jenkins poleg Jave podpira tudi številne druge jezike. Za C / C ++ obstajajo vtičniki za zajemanje napak in opozoril iz konzole, ustvarjanje skriptov gradnje s programom CMake, izvajanje preskusov enot in izvajanje statične analize kode. Jenkins ima številne integracije z orodji PHP.

Medtem ko kode Python ni treba graditi (razen če na primer uporabljate Cython ali če za namestitev ne ustvarjate kolesa Python), je koristno, da se Jenkins integrira z orodji za testiranje in poročanje Pythona, kot sta Nose2 in Pytest, ter kakovostjo kode. orodja, kot je Pylint. Podobno se Jenkins integrira z orodji Ruby, kot so Rake, Cucumber, Brakeman in CI :: Reporter.

Jenkins za CI / CD

Na splošno Jenkins ponuja preprost način za nastavitev okolja CI / CD za skoraj vsako kombinacijo jezikov in repozitorijev izvorne kode z uporabo cevovodov ter avtomatizacijo številnih drugih rutinskih razvojnih nalog. Jenkins sicer ne odpravlja potrebe po ustvarjanju skriptov za posamezne korake, vendar vam omogoča hitrejši in trdnejši način za integracijo celotne verige orodij za gradnjo, preizkušanje in uvajanje, kot bi jih lahko z lahkoto izdelali sami.

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