Bi Docker re Pratîkên Radestkirina Berdewam (nîşandan û vîdyoyê)

Em ê bloga xwe bi weşanên li ser bingeha axaftinên herî dawî yên rêvebirê teknîkî dest pê bikin distol (Dmitriy Stolyarov). Hemî wan di sala 2016-an de di gelek bûyerên pîşeyî de cîh girtin û ji mijara DevOps û Docker re hatin veqetandin. Vîdyoyek ji civîna Docker Moskowê li ofîsa Badoo, me berê jî daye weşandin Online. Yên nû dê bi gotarên ku esasê raporan radigihînin, werin pê. Wiha…

31ê Gulanê di konferansê de RootConf 2016, di çarçoveya mîhrîcana "Teknolojiyên Înternetê yên Rûsyayê" (RIT++ 2016) de hat lidarxistin, beşa "Pêkanîna Berdewam û Berdewamkirinê" bi rapora "Pêkanînên herî baş ên Radestkirina Berdewam bi Docker" ve hat vekirin. Ew ji bo avakirina pêvajoyek Radestkirina Berdewam (CD) bi karanîna Docker û hilberên din ên Çavkaniya Vekirî, pratîkên çêtirîn kurt û pergal kir. Em bi van çareseriyan di hilberînê de dixebitin, ku destûrê dide me ku xwe bispêrin ezmûna pratîk.

Bi Docker re Pratîkên Radestkirina Berdewam (nîşandan û vîdyoyê)

Ger derfeta we hebe ku hûn saetekê derbas bikin vîdyoya raporê, em pêşniyar dikin ku bi tevahî temaşe bikin. Wekî din, li jêr kurteya bingehîn di forma nivîsê de ye.

Radestkirina Berdewam bi Docker re

Di bin Radestkirina Berdewam em zincîra bûyeran fam dikin ku di encamê de koda serîlêdanê ji depoya Git yekem tê hilberînê, û dûv re jî di arşîvê de diqede. Wusa xuya dike: Git → Avakirin → Test → Serbest → Karkirin.

Bi Docker re Pratîkên Radestkirina Berdewam (nîşandan û vîdyoyê)
Piraniya raporê ji qonaxa avakirinê (civîna serîlêdanê) re tê veqetandin, û mijarên serbestberdan û xebitandinê bi kurtî têne destgirtin. Em ê li ser pirsgirêk û şêwazên ku destûrê didin we ku hûn wan çareser bikin biaxivin, û pêkanînên taybetî yên van nimûneyan dibe ku cûda bin.

Çima Docker li vir hewce ye? Ne ji tiştekî ye ku me biryar da ku em di çarçoveya vê amûra Çavkaniya Vekirî de li ser pratîkên Radestkirina Berdewam biaxivin. Her çend tevahiya rapor ji karanîna wê re tê veqetandin, dema ku şêwaza sereke ya danasîna koda serîlêdanê tê hesibandin gelek sedem têne eşkere kirin.

Nimûneya pêşkeftina sereke

Ji ber vê yekê, gava ku em guhertoyên nû yên serîlêdanê derdixin, bê guman em bi wan re rû bi rû ne pirsgirêka downtime, di dema guheztina servera hilberînê de hatî çêkirin. Trafîka ji guhertoya kevin a serîlêdanê ber bi ya nû ve nikare tavilê biguhere: pêşî divê em pê ewle bin ku guhertoya nû ne tenê bi serfirazî tê dakêşandin, lê di heman demê de "germ dibe" (ango, bi tevahî amade ye ku ji daxwazan re xizmetê bike).

Bi Docker re Pratîkên Radestkirina Berdewam (nîşandan û vîdyoyê)
Ji ber vê yekê, ji bo demekê her du guhertoyên serîlêdanê (kevn û nû) dê bi hev re bixebitin. Ku bixweber dibe sedema nakokiya çavkaniya hevpar: tora, pergala pelan, IPC, hwd. Bi Docker re, ev pirsgirêk bi karanîna guhertoyên cihêreng ên serîlêdanê di konteynerên cihêreng de bi hêsanî tê çareser kirin, ji bo ku veqetandina çavkaniyê di heman mêvandar de (server / makîneya virtual) tê garantî kirin. Bê guman, hûn dikarin bi hin hîleyan re bêyî îzolasyonê tevbigerin, lê heke amûrek amade û hêsan hebe, wê hingê sedemek berevajî heye - ne ku ew paşguh bikin.

Dema ku konteyniran tê danîn gelek feydeyên din peyda dike. Her serîlêdanê girêdayî ye guhertoya taybetî (an jî range versiyonê) werger, hebûna modul / pêvek, hwd, û her weha versiyonên wan. Û ev ne tenê ji bo hawîrdora yekser pêkan e, lê di heman demê de ji bo tevahiya jîngehê, tevî nermalava pergalê û guhertoya wê (heta belavkirina Linux-ê tê bikar anîn). Ji ber vê yekê ku konteynir ne tenê koda serîlêdanê, lê di heman demê de pergala pêş-sazkirî û nermalava serîlêdanê ya guhertoyên pêwîst jî dihewîne, hûn dikarin pirsgirêkên girêdayîbûnê ji bîr bikin.

Werin em bi kurtî modela pêşandana sereke guhertoyên nû ku faktorên jêrîn li ber çavan digirin:

  1. Di destpêkê de, guhertoya kevn a serîlêdanê di konteynera yekem de dimeşe.
  2. Dûv re guhertoya nû di konteynirek duyemîn de tê derxistin û "germ kirin". Hêjayî gotinê ye ku ev guhertoya nû bixwe dibe ku ne tenê koda serîlêdanê ya nûvekirî, lê di heman demê de yek ji girêdanên wê, û her weha hêmanên pergalê (mînakî, guhertoyek nû ya OpenSSL an tevahiya belavkirinê) hilgire.
  3. Gava ku guhertoya nû bi tevahî amade ye ku ji daxwazan re xizmetê bike, seyrûsefer ji konteynera yekem vediguheze ya duyemîn.
  4. Guhertoya kevn êdî dikare were sekinandin.

Ev nêzîkbûna belavkirina guhertoyên cihêreng ên serîlêdanê di konteynerên cihêreng de rehetiyek din peyda dike - vegerandina bilez ji guhertoya kevn re (piştî her tiştî, bes e ku meriv seyrûseferê li konteynera xwestî biguhezîne).

Bi Docker re Pratîkên Radestkirina Berdewam (nîşandan û vîdyoyê)
Pêşniyara yekem a paşîn mîna tiştek xuya dike ku tewra Captain jî nikarîbû jê re xelet bibîne: "[dema ku radestkirina Berdewam bi Docker re organîze dike] Docker bikar bînin [û fêm bikin ka ew çi dide]" Bînin bîra xwe, ev ne guleyek zîv e ku dê her pirsgirêkê çareser bike, lê amûrek e ku bingehek ecêb peyda dike.

Reproducibility

Bi "veberhevbûn" em tê wateya komek giştî ya pirsgirêkên ku di dema xebitandina sepanan de rû didin. Em behsa rewşên weha dikin:

  • Skrîptên ku ji hêla beşa kalîteyê ve têne kontrol kirin divê di hilberînê de rast werin nûve kirin.
  • Serlêdan li ser serverên ku dikarin pakêtan ji neynikên depoyên cihêreng werbigirin têne weşandin (bi demê re ew têne nûve kirin, û digel wan guhertoyên serîlêdanên sazkirî).
  • "Her tişt ji bo min herêmî dixebite!" (...û pêşdebiran destûr nadin hilberînê.)
  • Pêdivî ye ku hûn di guhertoya kevn (arşîv) de tiştek kontrol bikin.
  • ...

Cewhera wan a gelemperî bi vê yekê ve girêdayî ye ku lihevhatina tam a hawîrdorên ku têne bikar anîn (her weha nebûna faktora mirovî) hewce ye. Em çawa dikarin ji nû ve hilberandinê garantî bikin? Wêneyên Docker çêbikin li ser bingeha kodê ji Git, û dûv re wan ji bo her karekî bikar bînin: li ser malperên ceribandinê, di hilberînê de, li ser makîneyên herêmî yên bernameçêkeran... Di heman demê de, girîng e ku kiryarên ku têne kirin kêm bikin. после berhevkirina wêneyê: ew qas hêsan be, kêm dibe ku xeletî hebin.

Binesaziya kod e

Ger hewcedariyên binesaziyê (hebûna nermalava serverê, guhertoya wê, hwd.) fermî nebin û "bername" nebin, wê hingê danasîna her nûvekirina serîlêdanê dikare bibe sedema encamên xirab. Mînakî, di qonaxkirinê de we berê berê xwe da PHP 7.0 û li gorî wê kodê ji nû ve nivîsand - wê hingê xuyabûna wê di hilberînê de bi hin PHP-ya kevn (5.5) re bê guman dê kesek şaş bike. Dibe ku hûn di guhertoya wergêr de guhertinek mezin ji bîr nekin, lê "şeytan di hûrguliyan de ye": surprîz dibe ku di nûvekirinek piçûk a her girêdayîbûnê de be.

Nêzîkatiyek ji bo çareserkirina vê pirsgirêkê tê zanîn IaC (Binesaziya wekî kod, "binesaziya wekî kod") û pêdiviya binesaziyê digel koda serîlêdanê hilanîn. Bi karanîna wê, pêşdebir û pisporên DevOps dikarin li ser heman depoya serîlêdana Git-ê, lê li ser beşên cihêreng bixebitin. Ji vê kodê, wêneyek Docker li Git-ê tê afirandin, ku tê de serîlêdan li gorî hemî taybetmendiyên binesaziyê tête danîn. Bi hêsanî, skrîptên (qanûnên) ji bo berhevkirina wêneyan divê bi koda çavkaniyê re di heman depoyê de bin û bi hev re werin yek kirin.

Bi Docker re Pratîkên Radestkirina Berdewam (nîşandan û vîdyoyê)

Di mijara mîmariya serîlêdana pir-qatî de - mînakî, nginx heye, ku li ber serîlêdanek ku berê di hundurê konteynirek Docker de dixebite radiweste - Divê wêneyên Docker ji koda Git-ê ji bo her qatê bêne afirandin. Dûv re wêneya yekem dê serîlêdanek bi wergêr û girêdanên din ên "nêzîkî" ve bigire, û wêneya duyemîn dê nginx-a jorîn hebe.

Wêneyên Docker, ragihandina bi Git

Em hemî wêneyên Docker ên ku ji Git hatine berhev kirin li du kategoriyan dabeş dikin: demkî û berdan. Wêneyên demkî bi navê şaxê li Git-ê hatî etîket kirin, dikare ji hêla peywira paşîn ve were nivîsandin û tenê ji bo pêşdîtinê (ne ji bo hilberînê) têne derxistin. Ev cûdahiya wan a sereke ji yên berdanê ye: hûn qet nizanin ka kîjan peywira taybetî di wan de ye.

Aqil e ku meriv di nav wêneyên demkî de berhev bike: şaxê master (hûn dikarin bixweber wê li malperek cihêreng bişopînin da ku bi domdarî guhertoya heyî ya masterê bibînin), şaxên bi berdan, şaxên nûbûnên taybetî.

Bi Docker re Pratîkên Radestkirina Berdewam (nîşandan û vîdyoyê)
Piştî ku pêşdîtina wêneyên demkî hewcedariya wergerandinê di hilberînê de tê, pêşdebiran nîşanek diyar dikin. Ji hêla tagê ve bixweber têne berhev kirin wêneyê berdan (etîketa wê bi etîketa ji Git re têkildar e) û ji bo sehneyê tê rijandin. Ger ew bi serfirazî ji hêla beşa kalîteyê ve were verast kirin, ew diçe hilberînê.

dapp

Her tiştê ku hatî destnîşan kirin (hilweşîn, kombûna wêneyê, lênihêrîna paşîn) dikare serbixwe bi karanîna nivîsarên Bash û amûrên din ên "çêkirî" were bicîh kirin. Lê heke hûn vê yekê bikin, wê hingê di hin xalan de pêkanîn dê bibe sedema tevliheviyek mezin û kontrolkirina belengaz. Fêmkirina vê yekê, em hatin ku ji bo avakirina CI/CD-ê amûra xweya Xebatê ya pispor biafirînin - dapp.

Koda wê ya çavkaniyê bi Ruby, çavkaniyek vekirî hatî nivîsandin û li ser tê weşandin GitHub. Mixabin, belgekirin niha xala herî qels a amûrê ye, lê em li ser dixebitin. Û em ê ji carekê zêdetir li ser dapê binivîsin û biaxivin, ji ber ku ... Em ji dil nikarin li bendê bin ku kapasîteyên wê bi tevahiya civata eleqedar re parve bikin, lê di vê navberê de, pirsgirêkên xwe bişînin û daxwazên xwe bikişînin û/an pêşveçûna projeyê li ser GitHub bişopînin.

13 Tebax 2019 hate nûve kirin: niha projeyek dapp bi nav kirin werf, koda wê bi tevahî di Go de ji nû ve hatî nivîsandin, û belgeyên wê bi girîngî çêtir bûne.

Kubernetes

Amûrek din a çavkaniya vekirî ya amade ye ku berê di hawîrdora pîşeyî de nasnameyek girîng wergirtiye Kubernetes, komek rêveberiya Docker. Mijara karanîna wê di xebata projeyên ku li ser Docker-ê hatine çêkirin de ji çarçoweya raporê wêdetir e, ji ber vê yekê pêşkêşî bi nêrînek hin taybetmendiyên balkêş ve sînorkirî ye.

Ji bo danasînê, Kubernetes pêşkêşî dike:

  • lêpirsîna amadebûnê - kontrolkirina amadebûna guhertoyek nû ya serîlêdanê (ji bo veguheztina seyrûsefera wê);
  • nûvekirina gerguhêz - nûvekirina wêneyê ya birêkûpêk di komek konteyneran de (vekêşandin, nûvekirin, amadekirina destpêkirinê, guheztina trafîkê);
  • nûvekirina hevdem - nûvekirina wêneyek di komekê de bi nêzîkatiyek cûda: pêşî li nîvê konteyneran, dûv re li ser yên mayî;
  • berdanên canary - destpêkirina wêneyek nû li ser hejmarek sînorkirî (biçûk) konteyneran da ku çavdêriya anomaliyan bike.

Ji ber ku Radestkirina Berdewam ne tenê serbestberdana guhertoyek nû ye, Kubernetes ji bo domandina binesaziya paşerojê çend fersend hene: çavdêrîkirin û têketin ji bo hemî konteyneran, pîvandina otomatîk, hwd. Ev hemî jixwe dixebitin û tenê li benda rast e. pêkanîna di pêvajoyên we de.

Pêşniyarên dawîn

  1. Docker bikar bînin.
  2. Ji bo hemî hewcedariyên we wêneyên serîlêdanan Docker biafirînin.
  3. Prensîba "Binesaziya kod e" bişopînin.
  4. Git bi Docker ve girêdin.
  5. Rêbaza avêtinê birêkûpêk bikin.
  6. Platformek amadekirî (Kubernetes an din) bikar bînin.

Vîdyo û slaytên

Vîdyo ji performansê (nêzîkî saetekê) li ser YouTube hate weşandin (rapor bixwe ji deqîqeya 5-an dest pê dike - lînkê bişopînin da ku ji vê gavê de bilîzin).

Pêşkêşkirina raporê:

PS

Raporên din ên li ser mijarê li ser bloga me:

Source: www.habr.com

Add a comment