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.