Programavimas

Kas yra Jenkinsas? KI serveris paaiškino

„Jenkins“ siūlo paprastą būdą sukurti nuolatinio integravimo arba nepertraukiamo pristatymo (CI / CD) aplinką beveik bet kokiam kalbų ir šaltinio kodų saugyklų deriniui naudojant vamzdynus, taip pat automatizuoti kitas įprastas kūrimo užduotis. Nors „Jenkins“ nepanaikina poreikio kurti atskirų žingsnių scenarijus, tai suteikia jums greitesnį ir patikimesnį būdą integruoti visą savo kūrimo, bandymo ir diegimo įrankių grandinę, nei galite lengvai sukurti patys.

"Nenutraukite naktinio statinio!" yra pagrindinė taisyklė programinės įrangos kūrimo parduotuvėse, kurios kiekvieną rytą savo bandytojams skelbia ką tik sukurtą dienos produkto versiją. Prieš „Jenkins“ geriausia, ką kūrėjas galėjo padaryti, kad nenutrūktų naktinis statinys, buvo kruopščiai ir sėkmingai išbandyti vietinėje mašinoje prieš įvedant kodą. Bet tai reiškė atskirai išbandyti savo pokyčius, be visi kiti kasdien įsipareigoja. Nebuvo jokios tvirtos garantijos, kad naktinis statymas išliks gyvas.

Jenkinsas - iš pradžių Hudsonas - buvo tiesioginis atsakas į šį apribojimą.

Hudsonas ir Jenkinsas

2004 m. Kohsuke Kawaguchi buvo „Sun“ kūrėjas. Kawaguchi atsibodo sulaužyti kūrimo kūrimo darbus ir norėjo sužinoti būdą, prieš įvesdamas kodą į saugyklą, ar kodas veiks. Taigi, kad tai būtų įmanoma, „Kawaguchi“ sukūrė „Java“ ir „Java“ automatikos serverį, pavadintą „Hudson“. Hudsonas išpopuliarėjo „Sun“ ir paplito kitose įmonėse kaip atvirasis šaltinis.

Greitai į priekį iki 2011 m., O ginčas tarp „Oracle“ (įsigijusių „Sun“) ir nepriklausomos „Hudson“ atvirojo kodo bendruomenės sukėlė šakę su pavadinimo pakeitimu „Jenkins“. 2014 m. „Kawaguchi“ tapo „CloudBees“, kuri siūlo „Jenkins“ pagrindu pagamintus nuolatinio pristatymo produktus, CTO.

Abi šakės ir toliau egzistavo, nors Jenkinsas buvo daug aktyvesnis. Šiandien „Jenkins“ projektas vis dar aktyvus. „Hudson“ svetainė buvo uždaryta 2020 m. Sausio 31 d.

2019 m. Kovo mėn. „Linux Foundation“ kartu su „CloudBees“, „Google“ ir daugeliu kitų kompanijų įkūrė naują atvirojo kodo programinės įrangos fondą, vadinamą „Continuous Delivery Foundation“ (CDF). „Jenkins“ bendradarbiai nusprendė, kad jų projektas turėtų prisijungti prie šio naujo fondo. Tuo metu Kawaguchi rašė, kad vartotojams niekas reikšmingo nepasikeis.

2020 m. Sausio mėn. Kawaguchi paskelbė, kad pereina į savo naują startuolį „Launchable“. Jis taip pat teigė, kad oficialiai trauksis iš Jenkins, nors ir pasiliks Nuolatinio pristatymo fondo techninės priežiūros komitete, o savo vaidmenį „CloudBees“ pakeis patarėju.

Susijęs vaizdo įrašas: Kaip greičiau pristatyti kodą naudojant CI / CD

„Jenkins“ automatika

Šiandien „Jenkins“ yra pirmaujantis atvirojo kodo automatizavimo serveris su maždaug 1 600 papildinių, palaikančių visų rūšių kūrimo užduočių automatizavimą. Problema, kurią Kawaguchi iš pradžių bandė išspręsti, nuolatinį „Java“ kodo integravimą ir nepertraukiamą pristatymą (t. Y. Kuriant projektus, vykdant bandymus, atliekant statinio kodo analizę ir diegiant), yra tik vienas iš daugelio procesų, kuriuos žmonės automatizuoja kartu su „Jenkins“. Šie 1 600 papildinių apima penkias sritis: platformas, vartotojo sąsają, administravimą, šaltinio kodo valdymą ir, dažniausiai, kūrimo valdymą.

Kaip veikia Jenkinsas

„Jenkins“ platinamas kaip WAR archyvas ir kaip diegimo paketai pagrindinėms operacinėms sistemoms, kaip „Homebrew“ paketas, kaip „Docker“ paveikslėlis ir kaip šaltinio kodas. Šaltinio kodas dažniausiai yra „Java“, su keliais „Groovy“, „Ruby“ ir „Antlr“ failais.

„Jenkins WAR“ galite paleisti atskirai arba kaip servletą „Java“ programų serveryje, pvz., „Tomcat“. Bet kuriuo atveju jis sukuria žiniatinklio vartotojo sąsają ir priima skambučius į savo REST API.

Pirmą kartą paleidus „Jenkins“, jis sukuria administratoriaus vartotoją su ilgu atsitiktiniu slaptažodžiu, kurį galite įklijuoti į pradinį savo tinklalapį, kad atrakintumėte diegimą.

„Jenkins“ papildiniai

Įdiegę „Jenkins“ leidžia jums priimti numatytąjį įskiepių sąrašą arba pasirinkti savo papildinius.

Pasirinkę pradinį papildinių rinkinį, spustelėkite mygtuką Įdiegti ir Jenkins juos pridės.

Pagrindiniame „Jenkins“ ekrane rodoma dabartinė komponavimo eilė ir vykdytojo būsena bei siūlomos nuorodos naujiems elementams (užduotims) kurti, vartotojams valdyti, kaupimo istorijoms peržiūrėti, „Jenkins“ valdyti, jūsų pasirinktiniams rodiniams peržiūrėti ir kredencialams valdyti.

Naujas „Jenkins“ elementas gali būti bet kuris iš šešių tipų darbų ir aplankas, skirtas elementams tvarkyti.

Puslapyje „Tvarkyti„ Jenkins ““ galite atlikti 18 dalykų, įskaitant galimybę atidaryti komandinės eilutės sąsają. Tačiau šiuo metu turėtume pažvelgti į vamzdynus, kurie yra patobulintos darbo eigos, kurias paprastai apibrėžia scenarijai.

„Jenkins“ vamzdynai

Sukonfigūravę „Jenkins“, atėjo laikas sukurti keletą projektų, kuriuos „Jenkins“ gali sukurti jums. Nors tu gali naudoti žiniatinklio vartotojo sąsają scenarijams kurti, dabartinė geriausia praktika yra sukurti vamzdyno scenarijų pavadinimu „Jenkinsfile“, ir patikrinkite jį savo saugykloje. Žemiau pateiktoje ekrano kopijoje pateikiama daugiašakio vamzdyno konfigūracijos žiniatinklio forma.

Kaip matote, tokio tipo dujotiekio šakos šaltiniai mano pagrindiniame „Jenkins“ įrenginyje gali būti „Git“ arba „Subversion“ saugyklos, įskaitant „GitHub“. Jei jums reikia kitokio tipo saugyklų ar skirtingų internetinių talpyklų paslaugų, tereikia pridėti atitinkamų papildinių ir iš naujo paleisti „Jenkins“. Bandžiau, bet negalėjau pagalvoti apie šaltinio kodo valdymo sistemą (SCM), kurioje dar nėra „Jenkins“ papildinio.

„Jenkins“ vamzdynai gali būti deklaratyvūs arba scenarijiniai. A deklaratyvus Paprasčiausias iš dviejų „pipeline“ naudoja su „Groovy“ suderinamą sintaksę - ir, jei norite, galite pradėti failą #! groovy kad nukreiptumėte kodo redaktorių teisinga linkme. Deklaratyvus dujotiekis prasideda a dujotiekis blokas, apibrėžia agentas, ir apibrėžia etapai kurie apima vykdomąjį žingsniai, kaip žemiau pateiktame trijų etapų pavyzdyje.

vamzdynas {

agentas bet koks

etapai {

scena („Pastatyti“) {

žingsniai {

aidas „Pastatas ..“

            }

        }

etapas („Testas“) {

žingsniai {

aidas ‘Testing ..’

            }

        }

etapas („Dislokuoti“) {

žingsniai {

aidas „Diegimas ....“

            }

        }

    }

}

dujotiekis yra privalomas išorinis blokas, norint pasinaudoti „Jenkins“ dujotiekio papildiniu. agentas apibrėžia, kur norite paleisti dujotiekį. bet koks sako, kad dujotiekiui ar etapui paleisti naudokite bet kurį turimą agentą. Konkretesnis agentas gali paskelbti naudojamą sudėtinį rodinį, pavyzdžiui:

agentas {

dokininkas {

vaizdas „maven: 3-alpinis“

etiketė „mano apibrėžta etiketė“

args ‘-v / tmp: / tmp’

    }

}

etapai yra vienos ar kelių sceninių direktyvų seka. Ankstesniame pavyzdyje trys etapai yra „Build“, „Test“ ir „Deploy“.

žingsniai atlikti tikrąjį darbą. Aukščiau pateiktame pavyzdyje žingsniai tiesiog išspausdino pranešimus. Naudingesnis kūrimo žingsnis gali atrodyti taip:

vamzdynas {

agentas bet koks

etapai {

scena („Pastatyti“) {

žingsniai {

sh 'padaryti'

Artefaktų artefaktai: „** / target / *. jar“, pirštų atspaudai: tiesa

            }

        }

    }

}

Čia mes remiamės padaryti iš apvalkalo, o tada visus sukurtus JAR failus archyvuokite į Jenkins archyvą.

paštu skyriuje apibrėžiami veiksmai, kurie bus vykdomi dujotiekio važiavimo ar etapo pabaigoje. Pašto skiltyje galite naudoti keletą blokų, susijusių su būsena: visada, pasikeitė, nesėkmė, sėkmė, nestabilusir nutrauktas.

Pavyzdžiui, žemiau pateiktoje „Jenkinsfile“ sistemoje „JUnit“ visada paleidžiama po bandymo etapo, tačiau el. Laišką jis siunčia tik tuo atveju, jei dujotiekis nepavyksta.

vamzdynas {

agentas bet koks

etapai {

etapas („Testas“) {

žingsniai {

sh 'patikrink'

            }

        }

    }

paskelbti {

visada {

junit ‘** / target / *. xml’

        }

nesėkmė {

paštu: [email protected], tema: „Dujotiekis nepavyko :(“

        }

    }

}

Deklaracinis dujotiekis gali išreikšti daugumą to, ko reikia norint apibrėžti dujotiekius, ir jį išmokti yra daug lengviau nei scenarijaus dujotiekio sintaksę, kuri yra „Groovy“ pagrindu sukurta DSL. Scenarijuojamasis vamzdynas iš tikrųjų yra pilnavertė programavimo aplinka.

Palyginimui, šie du „Jenkinsfiles“ yra visiškai lygiaverčiai.

Deklaracinis vamzdynas

vamzdynas {

agentas {docker ‘mazgas: 6.3’}

etapai {

scena („statyti“) {

žingsniai {

sh ‘npm —versija’

            }

        }

    }

Scenarijus dujotiekis

mazgas („dokininkas“) {

kasos scm

scena („Pastatyti“) {

docker.image (‘mazgas: 6.3’). viduje {

sh ‘npm —versija’

        }

    }

}

Mėlynasis vandenynas, „Jenkins“ GUI

Jei norite naujausios ir geriausios „Jenkins“ vartotojo sąsajos, galite naudoti „Blue Ocean“ papildinį, kuris suteikia grafinę vartotojo patirtį. Galite pridėti „Blue Ocean“ papildinį prie esamo „Jenkins“ diegimo arba paleisti „Jenkins / Blue Ocean Docker“ konteinerį. Įdiegus „Blue Ocean“, jūsų „Jenkins“ pagrindiniame meniu bus papildoma piktograma:

Jei norite, galite atidaryti Mėlynąjį vandenyną tiesiogiai. Jis yra / mėlyname aplanke „Jenkins“ serveryje. Vamzdynų kūrimas Mėlyname vandenyne yra šiek tiek grafiškesnis nei paprastame Jenkinse:

Jenkins Docker

Kaip jau minėjau anksčiau, „Jenkins“ taip pat platinamas kaip „Docker“ vaizdas. Procesas nėra daug daugiau: Pasirinkę SCM tipą, pateikiate URL ir kredencialus, tada sukurkite vamzdyną iš vienos saugyklos arba nuskaitykite visas organizacijos saugyklas. Kiekvienas filialas, turintis „Jenkinsfile“, gaus dujotiekį.

Čia paleidžiu „Blue Ocean Docker“ vaizdą, kuriame buvo įdiegta dar keletas „Git“ paslaugos papildinių nei numatytasis SCM teikėjų sąrašas:

Paleidus kelis vamzdynus, „Blue Ocean“ papildinyje bus rodoma jų būsena, kaip parodyta aukščiau. Norėdami pamatyti etapus ir veiksmus, galite priartinti atskirą vamzdyną:

Taip pat galite priartinti šakas (viršuje) ir veiklas (apačioje):

Kodėl naudoti Jenkins?

„Jenkins Pipeline“ papildinys, kurį naudojome, palaiko bendrą nuolatinio integravimo / nepertraukiamo pristatymo (CICD) naudojimo atvejį, kuris, ko gero, yra dažniausiai naudojamas „Jenkins“. Kai kuriems kitiems naudojimo atvejams yra specialūs svarstymai.

„Java“ projektai buvo originalus „Jenkins“ tikslas. Mes jau matėme, kad Jenkins palaiko statybą su Mavenu; jis taip pat veikia su „Ant“, „Gradle“, „JUnit“, „Nexus“ ir „Artifactory“.

„Android“ veikia tam tikra „Java“, tačiau pristatoma problema, kaip išbandyti įvairiausiuose „Android“ įrenginiuose. „Android“ emuliatoriaus papildinys leidžia kurti ir išbandyti tiek emuliuojamų įrenginių, kiek jums reikia apibrėžti. Naudodami „Google Play“ leidėjo papildinį galite siųsti versijas į alfa kanalą sistemoje „Google Play“, kad juos išleistumėte arba galėtumėte toliau tikrinti realiuose įrenginiuose.

Parodžiau pavyzdžių, kai mes nurodėme „Docker“ konteinerį kaip dujotiekio agentą ir kur „Docker“ konteineryje paleidome „Jenkins“ ir „Blue Ocean“. „Docker“ konteineriai yra labai naudingi „Jenkins“ aplinkoje, siekiant pagerinti greitį, mastelio keitimą ir nuoseklumą.

Yra du pagrindiniai „Jenkins“ ir „GitHub“ naudojimo atvejai. Vienas iš jų yra kūrimo integracija, kuri gali apimti paslaugų pakabą, kad „Jenkins“ suaktyvintų kiekvieną jūsų „GitHub“ saugyklos įsipareigojimą. Antrasis yra „GitHub“ autentifikavimo naudojimas kontroliuojant prieigą prie „Jenkins“ per „OAuth“.

Jenkins palaiko daugybę kitų kalbų, išskyrus „Java“. „C / C ++“ yra papildiniai, skirti fiksuoti klaidas ir įspėjimus iš konsolės, kurti „CMake“ sukūrimo scenarijus, vykdyti vieneto testus ir atlikti statinio kodo analizę. Jenkinsas turi daugybę integracijų su PHP įrankiais.

Nors nereikia kurti „Python“ kodo (nebent, pavyzdžiui, naudojate „Cython“, arba kuriate „Python“ ratą), naudinga, kad „Jenkins“ integruojasi su „Python“ testavimo ir ataskaitų teikimo įrankiais, tokiais kaip „Nose2“ ir „Pytest“, ir kodo kokybe. tokius įrankius kaip „Pylint“. Panašiai Jenkinsas integruojasi su „Ruby“ įrankiais, tokiais kaip „Rake“, „Agurkas“, „Brakeman“ ir „CI :: Reporter“.

Jenkinsas CI / CD

Apskritai, „Jenkins“ siūlo paprastą būdą sukurti CI / CD aplinką beveik bet kokiam kalbų ir šaltinio kodų saugyklų deriniui naudojant vamzdynus, taip pat automatizuoti daugybę kitų įprastų kūrimo užduočių. Nors „Jenkins“ nepanaikina poreikio kurti atskirų žingsnių scenarijus, tai suteikia jums greitesnį ir patikimesnį būdą integruoti visą savo kūrimo, bandymo ir diegimo įrankių grandinę, nei galėtumėte lengvai sukurti patys.