Programmēšana

Kas ir Dženkinss? KI serveris paskaidroja

Jenkins piedāvā vienkāršu veidu, kā izveidot nepārtrauktas integrācijas vai nepārtrauktas piegādes (CI / CD) vidi gandrīz jebkurai valodu kombinācijai un pirmkodu krātuvēm, izmantojot cauruļvadus, kā arī citu rutīnas izstrādes uzdevumu automatizēšanu. Kaut arī Jenkins nenovērš nepieciešamību izveidot skriptus atsevišķiem soļiem, tas dod jums ātrāku un drošāku veidu, kā integrēt visu veidošanas, testēšanas un izvietošanas rīku ķēdi, nekā jūs pats varat viegli izveidot.

"Nepārkāpiet nakts konstrukciju!" ir kardināls noteikums programmatūras izstrādes veikalos, kas testētājiem katru rītu izliek svaigi uzbūvētu ikdienas produkta versiju. Pirms Dženkinsa labākais, ko izstrādātājs varēja darīt, lai izvairītos no nakts konstrukcijas pārrāvuma, bija rūpīgi un veiksmīgi testēt uz vietējās mašīnas pirms koda ieviešanas. Bet tas nozīmēja pārmaiņu pārbaudi atsevišķi bez visu pārējo apņemas katru dienu. Nebija stingras garantijas, ka nakts būvniecība izdzīvos no apņemšanās.

Dženkinss - sākotnēji Hadsons - bija tieša atbilde uz šo ierobežojumu.

Hadsons un Dženkinss

2004. gadā Kohsuke Kawaguchi bija Java izstrādātājs Sun. Kavaguči savā apritē apnika būvju laušana un vēlējās atrast veidu, kā pirms koda nodošanas krātuvei uzzināt, vai kods darbosies. Tāpēc Kavaguči Java un Java vajadzībām izveidoja automatizācijas serveri, lai to izdarītu, ko sauca par Hadsonu. Hadsons kļuva populārs vietnē Sun un izplatījās uz citiem uzņēmumiem kā atvērtā koda.

Ātri virzoties uz 2011. gadu, un strīds starp Oracle (kas bija ieguvis Sun) un neatkarīgo Hudsona atvērtā koda kopienu noveda pie dakšas ar nosaukuma maiņu Jenkins. 2014. gadā Kawaguchi kļuva par CloudBees CTO, kas piedāvā Jenkins balstītus nepārtrauktas piegādes produktus.

Abas dakšiņas turpināja pastāvēt, lai gan Dženkinss bija daudz aktīvāks. Šodien Jenkins projekts joprojām ir aktīvs. Hadsona vietne tika slēgta 2020. gada 31. janvārī.

2019. gada martā Linux Foundation kopā ar CloudBees, Google un vairākiem citiem uzņēmumiem uzsāka jaunu atvērtā koda programmatūras fondu ar nosaukumu Continuous Delivery Foundation (CDF). Jenkins līdzstrādnieki nolēma, ka viņu projektam vajadzētu pievienoties šim jaunajam fondam. Toreiz Kavaguči rakstīja, ka lietotājiem nekas nozīmīgs nemainīsies.

2020. gada janvārī Kavaguči paziņoja, ka pāriet uz jauno starta uzņēmumu Launchable. Viņš arī teica, ka oficiāli atkāpsies no Dženkinsa, kaut arī paliks Nepārtrauktās piegādes fonda tehniskās uzraudzības komitejā un nomainīs savu lomu CloudBees padomdevēja amatā.

Saistītais video: kā ātrāk piegādāt kodu, izmantojot CI / CD

Jenkins automatizācija

Šodien Jenkins ir vadošais atvērtā koda automatizācijas serveris ar aptuveni 1600 spraudņiem, kas atbalsta visu veidu attīstības uzdevumu automatizāciju. Problēma, ko Kavaguči sākotnēji mēģināja atrisināt, Java koda nepārtraukta integrēšana un nepārtraukta piegāde (t.i., būvniecības projekti, testu veikšana, statisko kodu analīze un izvietošana), ir tikai viens no daudziem procesiem, kurus cilvēki automatizē kopā ar Jenkins. Šie 1600 spraudņi aptver piecas jomas: platformas, lietotāja saskarni, administrēšanu, pirmkodu pārvaldību un visbiežāk būvju pārvaldību.

Kā darbojas Dženkinss

Jenkins tiek izplatīts kā WAR arhīvs un kā instalēšanas paketes galvenajām operētājsistēmām, kā Homebrew pakete, kā Docker attēls un kā avota kods. Pirmkods lielākoties ir Java, ar dažiem Groovy, Ruby un Antlr failiem.

Jenkins WAR var palaist atsevišķi vai kā servletīklu Java lietojumprogrammu serverī, piemēram, Tomcat. Jebkurā gadījumā tā izveido tīmekļa lietotāja saskarni un pieņem zvanus uz tās REST API.

Pirmo reizi palaižot Jenkins, tas izveido administratīvu lietotāju ar garu nejaušu paroli, kuru varat ielīmēt sākotnējā vietnē, lai atbloķētu instalāciju.

Jenkins spraudņi

Pēc instalēšanas Jenkins ļauj vai nu pieņemt noklusējuma spraudņu sarakstu, vai arī izvēlēties savus spraudņus.

Kad esat izvēlējies savu sākotnējo spraudņu komplektu, noklikšķiniet uz pogas Instalēt, un Jenkins tos pievienos.

Jenkins galvenajā ekrānā tiek parādīta pašreizējā būvēšanas rinda un izpildītāja statuss, kā arī piedāvātas saites, lai izveidotu jaunus vienumus (darbus), pārvaldītu lietotājus, skatītu būvēšanas vēstures, pārvaldītu Jenkins, apskatītu jūsu pielāgotos skatus un pārvaldītu jūsu akreditācijas datus.

Jauns Jenkins vienums var būt jebkurš no sešiem darba veidiem, kā arī mape priekšmetu organizēšanai.

Lapā Pārvaldīt Jenkins varat veikt 18 lietas, ieskaitot iespēju atvērt komandrindas saskarni. Tomēr šajā brīdī mums vajadzētu apskatīt cauruļvadus, kas ir uzlabotas darbplūsmas, kuras parasti nosaka skripti.

Jenkins cauruļvadi

Kad esat konfigurējis Jenkins, ir pienācis laiks izveidot dažus projektus, kurus Jenkins var jums izveidot. Kamēr tu var izmantojiet tīmekļa lietotāja saskarni skriptu izveidošanai, pašreizējā labākā prakse ir izveidot cauruļvada skriptu ar nosaukumu Jenkinsfile, un pārbaudiet to savā repozitorijā. Zemāk redzamajā ekrānuzņēmumā parādīta daudznozaru cauruļvada konfigurācijas tīmekļa veidlapa.

Kā redzat, šāda veida cauruļvada filiāles avoti manā pamata Jenkins instalācijā var būt Git vai Subversion krātuves, tostarp GitHub. Ja jums ir nepieciešami cita veida krātuves vai dažādi tiešsaistes krātuves pakalpojumi, vienkārši jāpievieno attiecīgie spraudņi un jāpārstartē Jenkins. Es mēģināju, bet nevarēju iedomāties pirmkodu pārvaldības sistēmu (SCM), kurā vēl nav norādīts Jenkins spraudnis.

Jenkins cauruļvadi var būt deklaratīvi vai rakstīti. A deklaratīvs cauruļvads, vienkāršākais no abiem, izmanto ar Groovy saderīgu sintaksi - un, ja vēlaties, varat sākt failu ar #! groovy lai norādītu koda redaktoru pareizajā virzienā. Deklaratīvs cauruļvads sākas ar a cauruļvads bloks, definē aģents, un nosaka posmos kas ietver izpildāmo soļiem, kā zemāk redzamajā trīspakāpju piemērā.

cauruļvads {

aģents jebkurš

posmi {

posms (‘Veidot’) {

soļi {

atbalss “Ēka ..”

            }

        }

posms (‘Tests’) {

soļi {

atbalss ‘Testing ..’

            }

        }

posms (‘Izvietot’) {

soļi {

atbalss ‘Izvieto ....’

            }

        }

    }

}

cauruļvads ir obligātais ārējais bloks, lai izsauktu Jenkins cauruļvada spraudni. aģents nosaka vietu, kur vēlaties vadīt cauruļvadu. jebkurš saka izmantot jebkuru pieejamo aģentu cauruļvada vai posma darbināšanai. Konkrētāks aģents var deklarēt konteineru lietošanai, piemēram:

aģents {

dokeris {

attēls ‘maven: 3-alpine’

etiķete “mana definētā etiķete”

args ‘-v / tmp: / tmp’

    }

}

posmos satur vienas vai vairāku skatuves direktīvu secību. Iepriekš minētajā piemērā trīs posmi ir Izveidot, Testēt un Izvietot.

soļiem darīt faktisko darbu. Iepriekš sniegtajā piemērā vienkārši izdrukāti ziņojumi. Noderīgāks veidošanas solis varētu izskatīties šādi:

cauruļvads {

aģents jebkurš

posmi {

posms (‘Veidot’) {

soļi {

sh ‘make’

arhīvu artefakti: ‘** / target / *. jar’, pirkstu nospiedums: true

            }

        }

    }

}

Šeit mēs atsaucamies veidot no čaulas un pēc tam visus saražotos JAR failus arhivējot Jenkins arhīvā.

The pastu sadaļā definētas darbības, kas tiks veiktas cauruļvada darbības vai posma beigās. Ziņas sadaļā varat izmantot vairākus pēcnosacījuma blokus: vienmēr, mainīts, neveiksme, panākumi, nestabils, un pārtrauca.

Piemēram, zemāk redzamais Jenkinsfile vienmēr palaiž JUnit pēc testa posma, bet e-pastu nosūta tikai tad, ja cauruļvads neizdodas.

cauruļvads {

aģents jebkurš

posmi {

posms (‘Tests’) {

soļi {

sh ‘pārbaudi’

            }

        }

    }

izlikt {

vienmēr {

junit ‘** / target / *. xml’

        }

neveiksme {

pastu uz: [email protected], subject: ‘Cauruļvads neizdevās :(’

        }

    }

}

Deklaratīvais cauruļvads var izteikt lielāko daļu nepieciešamā, lai definētu cauruļvadus, un to ir daudz vieglāk iemācīties nekā skriptu cauruļvada sintaksi, kas ir Groovy balstīta DSL. Skriptu cauruļvads faktiski ir pilnvērtīga programmēšanas vide.

Salīdzinājumam šie divi Jenkinsfiles ir pilnīgi līdzvērtīgi.

Deklaratīvs cauruļvads

cauruļvads {

aģents {docker ‘mezgls: 6.3’}

posmi {

posms (‘būvēt’) {

soļi {

sh ‘npm —versija’

            }

        }

    }

Skripts cauruļvads

mezgls (‘dokeris’) {

kases scm

posms (‘Veidot’) {

docker.image (‘mezgls: 6.3’). iekšpusē {

sh ‘npm —versija’

        }

    }

}

Zilais okeāns, Jenkins GUI

Ja vēlaties jaunāko un labāko Jenkins lietotāja saskarni, varat izmantot Blue Ocean spraudni, kas nodrošina grafisku lietotāja pieredzi. Jūs varat pievienot Blue Ocean spraudni savai esošajai Jenkins instalācijai vai palaist Jenkins / Blue Ocean Docker konteineru. Ja Zilais okeāns ir instalēts, jūsu Jenkins galvenajā izvēlnē būs papildu ikona:

Ja vēlaties, varat tieši atvērt Zilo okeānu. Tas atrodas Jenkins servera mapē / blue. Cauruļvadu izveide Zilajā okeānā ir nedaudz grafiskāka nekā vienkāršā Jenkins:

Dženkins dokers

Kā jau minēju iepriekš, Jenkins tiek izplatīts arī kā Docker attēls. Procesā nav daudz vairāk: kad esat izvēlējies SCM tipu, norādiet URL un akreditācijas datus, pēc tam izveidojiet cauruļvadu no viena krātuves vai skenējiet visus organizācijas krātuves. Katra filiāle ar Jenkinsfile iegūs cauruļvadu.

Šeit es palaidu Blue Ocean Docker attēlu, kurā bija instalēti vēl daži Git servisa spraudņi nekā SCM nodrošinātāju noklusējuma saraksts:

Kad esat palaidis dažus cauruļvadus, Blue Ocean spraudnis parādīs to statusu, kā parādīts iepriekš. Varat tuvināt atsevišķu cauruļvadu, lai redzētu posmus un darbības:

Varat arī tuvināt filiāles (augšpusē) un darbības (apakšā):

Kāpēc izmantot Jenkins?

Mūsu izmantotais Jenkins cauruļvadu spraudnis atbalsta vispārēju nepārtrauktas integrācijas / nepārtrauktas piegādes (CICD) lietojumu, kas, iespējams, ir visizplatītākais Jenkins lietojums. Dažiem citiem lietošanas gadījumiem ir īpaši apsvērumi.

Java projekti bija sākotnējais Jenkins pamatojums. Mēs jau esam redzējuši, ka Dženkinss atbalsta celtniecību ar Mavenu; tas darbojas arī ar Ant, Gradle, JUnit, Nexus un Artifactory.

Android darbojas sava veida Java, taču ievieš jautājumu par testēšanu plašā Android ierīču klāstā. Android emulatora spraudnis ļauj veidot un testēt tik daudz emulētu ierīču, cik vēlaties definēt. Izmantojot Google Play izdevēja spraudni, varat sūtīt būvējumus uz Google Play alfa kanālu, lai tos varētu atbrīvot vai turpināt pārbaudīt faktiskajās ierīcēs.

Esmu parādījis piemērus, kur mēs norādījām Docker konteineru kā cauruļvada aģentu un kur mēs vadījām Jenkins un Blue Ocean Docker konteinerā. Docker konteineri ir ļoti noderīgi Jenkins vidē, lai uzlabotu ātrumu, mērogojamību un konsekvenci.

Ir divi galvenie Jenkins un GitHub lietošanas gadījumi. Viens no tiem ir būvniecības integrācija, kas var ietvert servisa āķi, lai aktivizētu Jenkins par katru saistību ar jūsu GitHub repozitoriju. Otrais ir GitHub autentifikācijas izmantošana, lai kontrolētu piekļuvi Jenkins, izmantojot OAuth.

Jenkins atbalsta daudzas citas valodas, izņemot Java. C / C ++ ir spraudņi kļūdu un brīdinājumu tveršanai no konsoles, ģenerēšanas skriptu ģenerēšanai ar CMake, vienības testu veikšanai un statisko kodu analīzei. Jenkinsam ir vairākas integrācijas ar PHP rīkiem.

Kaut arī Python kods nav jāveido (ja vien, piemēram, neizmantojat Cython vai instalēšanai izveidojat Python riteni), ir lietderīgi, ka Jenkins integrē Python testēšanas un ziņošanas rīkus, piemēram, Nose2 un Pytest, un koda kvalitāti tādi rīki kā Pylint. Līdzīgi Jenkins integrējas ar tādiem Ruby rīkiem kā Rake, Cucumber, Brakeman un CI :: Reporter.

Jenkins par CI / CD

Kopumā Jenkins piedāvā vienkāršu veidu, kā izveidot CI / CD vidi gandrīz jebkurai valodu un pirmkodu krātuvju kombinācijai, izmantojot cauruļvadus, kā arī automatizēt vairākus citus ikdienas attīstības uzdevumus. Kaut arī Jenkins nenovērš nepieciešamību izveidot skriptus atsevišķiem soļiem, tas dod jums ātrāku un drošāku veidu, kā integrēt visu veidošanas, testēšanas un izvietošanas rīku ķēdi, nekā jūs pats varētu viegli izveidot.