Pratik livrezon kontinyèl ak Docker (revizyon ak videyo)

Nou pral kòmanse blog nou an ak piblikasyon ki baze sou dènye diskou direktè teknik nou an defonse (Dmitri Stolyarov). Tout nan yo te pran plas nan 2016 nan divès evènman pwofesyonèl epi yo te dedye a sijè a nan DevOps ak Docker. Yon videyo ki soti nan reyinyon Docker Moskou nan biwo Badoo a, nou deja genyen pibliye Sou entènèt. Nouvo yo pral akonpaye pa atik transmèt sans nan rapò yo. Se konsa…

31 me nan konferans lan RootConf 2016, ki te fèt nan kad festival "Teknoloji Entènèt Ris" (RIT++ 2016), seksyon "Deplwaman kontinyèl ak deplwaman" te louvri ak rapò "Pi bon pratik nan livrezon kontinyèl ak Docker". Li te rezime ak sistematize pi bon pratik yo pou bati yon pwosesis Livrezon Kontinyèl (CD) lè l sèvi avèk Docker ak lòt pwodwi Open Source. Nou travay ak solisyon sa yo nan pwodiksyon, ki pèmèt nou konte sou eksperyans pratik.

Pratik livrezon kontinyèl ak Docker (revizyon ak videyo)

Si ou gen opòtinite pou pase yon èdtan videyo rapò a, nou rekòmande gade li an plen. Sinon, anba a se rezime prensipal la nan fòm tèks.

Livrezon kontinyèl ak Docker

Anba Kontini Kontini nou konprann chèn evènman yo kòm yon rezilta ki kòd aplikasyon ki soti nan repozitwa Git premye vini nan pwodiksyon, ak Lè sa a, fini nan achiv la. Li sanble sa a: Git → Bati → Tès → Lage → Opere.

Pratik livrezon kontinyèl ak Docker (revizyon ak videyo)
Pifò nan rapò a se konsakre nan etap nan bati (asanble aplikasyon), ak sijè yo lage ak opere yo manyen sou yon ti tan. Nou pral pale sou pwoblèm ak modèl ki pèmèt ou rezoud yo, ak aplikasyon espesifik modèl sa yo ka diferan.

Poukisa Docker bezwen isit la ditou? Se pa pou anyen nou deside pale sou pratik Livrezon Kontinyèl nan kontèks zouti Open Source sa a. Malgre ke rapò a tout antye konsakre nan itilizasyon li yo, anpil rezon yo revele lè w ap konsidere modèl prensipal la nan aplikasyon kòd lanse.

Modèl dewoulman prensipal la

Se konsa, lè nou woule soti nouvo vèsyon aplikasyon an, nou sètènman fè fas ak pwoblèm D', ki te pwodwi pandan chanjman nan sèvè pwodiksyon an. Trafik soti nan vèsyon an ansyen nan aplikasyon an nan nouvo a pa ka chanje imedyatman: premye nou dwe asire w ke nouvo vèsyon an pa sèlman telechaje avèk siksè, men tou, "chofe" (sa vle di, konplètman pare pou sèvi demann).

Pratik livrezon kontinyèl ak Docker (revizyon ak videyo)
Kidonk, pou kèk tan tou de vèsyon aplikasyon an (ansyen ak nouvo) ap travay ansanm. Ki otomatikman mennen a konfli resous pataje: rezo, sistèm fichye, IPC, elatriye. Avèk Docker, pwoblèm sa a fasil pou rezoud lè yo kouri diferan vèsyon aplikasyon an nan resipyan separe, pou ki izolasyon resous yo garanti nan menm lame a (sèvè / machin vityèl). Natirèlman, ou ka jwenn ak kèk ke trik nouvèl san izolasyon ditou, men si gen yon zouti pare-fè ak pratik, Lè sa a, gen rezon opoze a - pa neglije li.

Containerization bay anpil lòt benefis lè deplwaye. Nenpòt aplikasyon depann sou vèsyon espesifik (oswa seri vèsyon) entèprèt, disponiblite modil / ekstansyon, elatriye, osi byen ke vèsyon yo. Ak sa a aplike pa sèlman nan anviwònman an ègzèkutabl imedya, men tou, nan anviwònman an antye, ki gen ladan lojisyèl sistèm ak vèsyon li yo (jiska distribisyon Linux yo itilize). Akòz lefèt ke resipyan yo pa sèlman gen kòd aplikasyon, men tou, sistèm pre-enstale ak lojisyèl aplikasyon nan vèsyon ki nesesè yo, ou ka bliye sou pwoblèm ak depandans.

Ann jeneralize modèl deplwaye prensipal la Nouvo vèsyon an konsidere faktè sa yo:

  1. Okòmansman, ansyen vèsyon aplikasyon an kouri nan premye veso a.
  2. Lè sa a, nouvo vèsyon an woule soti ak "chofe" nan yon dezyèm veso. Li enpòtan pou remake ke nouvo vèsyon sa a li menm ka pote non sèlman mete ajou kòd aplikasyon an, men tou nenpòt nan depandans li yo, osi byen ke eleman sistèm (pa egzanp, yon nouvo vèsyon OpenSSL oswa distribisyon an antye).
  3. Lè nouvo vèsyon an konplètman pare pou sèvi demann, trafik chanje soti nan premye veso a nan dezyèm lan.
  4. Ansyen vèsyon an kapab kounye a sispann.

Apwòch sa a pou deplwaye diferan vèsyon aplikasyon an nan resipyan separe bay yon lòt konvenyans - rapid rollback nan vèsyon an fin vye granmoun (apre tout, li ase yo chanje trafik nan veso a vle).

Pratik livrezon kontinyèl ak Docker (revizyon ak videyo)
Premye rekòmandasyon final la son tankou yon bagay ke menm Kapitèn nan pa t 'kapab jwenn fòt ak: "[lè w ap òganize livrezon kontinyèl ak Docker] Sèvi ak Docker [epi konprann sa li bay]" Sonje byen, sa a se pa yon bal an ajan ki pral rezoud tout pwoblèm, men yon zouti ki bay yon fondasyon bèl bagay.

Repwodiksyon

Pa "repwodiksyon" nou vle di yon seri jeneral pwoblèm yo rankontre lè w ap opere aplikasyon yo. Nou ap pale de ka sa yo:

  • Scripts tcheke pa depatman an bon jan kalite pou sèn dwe byen repwodui nan pwodiksyon an.
  • Aplikasyon yo pibliye sou sèvè ki ka resevwa pakè ki soti nan diferan miwa depo (apre yon tan yo mete ajou, epi avèk yo vèsyon yo nan aplikasyon enstale).
  • "Tout bagay ap travay pou mwen lokalman!" (... ak devlopè yo pa gen dwa antre nan pwodiksyon.)
  • Ou bezwen tcheke yon bagay nan ansyen vèsyon an (achiv).
  • ...

Sans jeneral yo klou desann nan lefèt ke konfòmite konplè nan anviwònman yo itilize (kòm byen ke absans la nan faktè imen an) nesesè. Ki jan nou ka garanti repwodibilite? Fè imaj Docker baze sou kòd ki soti nan Git, ak Lè sa a, sèvi ak yo pou nenpòt ki travay: sou sit tès, nan pwodiksyon, sou machin lokal nan pwogramè ... An menm tan an, li enpòtan pou misyon pou minimize aksyon yo ki fèt. apre rasanble imaj la: pi senp li se, mwens chans gen erè.

Enfrastrikti se kòd

Si kondisyon enfrastrikti yo (disponiblite lojisyèl sèvè, vèsyon li yo, elatriye) yo pa ofisyèlman ak "pwograme", Lè sa a, lansman nenpòt aktyalizasyon aplikasyon an ka lakòz konsekans dezas. Pou egzanp, nan etap ou te deja chanje nan PHP 7.0 ak reekri kòd la kòmsadwa - Lè sa a, aparans li nan pwodiksyon ak kèk PHP fin vye granmoun (5.5) pral sètènman sipriz yon moun. Ou ka pa bliye sou yon gwo chanjman nan vèsyon an entèprèt, men "dyab la se nan detay yo": sipriz la ka nan yon aktyalizasyon minè nan nenpòt depandans.

Yon apwòch pou rezoud pwoblèm sa a ke yo rekonèt kòm IaC (Enfrastrikti kòm Kòd, "enfrastrikti kòm Kòd") epi li enplike nan estoke kondisyon enfrastrikti ansanm ak kòd aplikasyon an. Lè l sèvi avèk li, devlopè ak espesyalis DevOps yo ka travay avèk menm depo aplikasyon Git la, men sou diferan pati ladan l. Soti nan kòd sa a, yo kreye yon imaj Docker nan Git, nan ki aplikasyon an deplwaye pran an kont tout spesifik yo nan enfrastrikti a. Senpleman mete, scripts yo (règleman) pou rasanble imaj yo ta dwe nan menm depo a ak kòd sous la ak fizyone ansanm.

Pratik livrezon kontinyèl ak Docker (revizyon ak videyo)

Nan ka yon achitekti aplikasyon milti-kouch - pou egzanp, gen nginx, ki kanpe devan yon aplikasyon ki deja kouri andedan yon veso Docker - imaj Docker yo dwe kreye nan kòd nan Git pou chak kouch. Lè sa a, premye imaj la pral gen yon aplikasyon ki gen yon entèprèt ak lòt depandans "fèmen", epi dezyèm imaj la pral gen nginx a en.

Docker imaj, kominikasyon ak Git

Nou divize tout imaj Docker yo kolekte nan Git an de kategori: tanporè ak lage. Imaj tanporè make pa non branch lan nan Git, yo ka ranplase pa pwochen komite a epi yo woule soti sèlman pou preview (pa pou pwodiksyon). Sa a se diferans kle yo ak sa yo lage: ou pa janm konnen ki komèt espesifik ki nan yo.

Li fè sans pou kolekte nan imaj tanporè: branch mèt la (ou ka otomatikman woule li soti nan yon sit separe toujou ap wè vèsyon aktyèl la nan mèt), branch ak degaje, branch nan inovasyon espesifik.

Pratik livrezon kontinyèl ak Docker (revizyon ak videyo)
Apre preview nan imaj tanporè vini nan bezwen an pou tradiksyon nan pwodiksyon, devlopè yo mete yon tag sèten. Otomatikman kolekte pa tag lage imaj (Tag li yo koresponn ak tag ki soti nan Git) epi li woule soti nan Stage. Si depatman an bon jan kalite verifye avèk siksè, li ale nan pwodiksyon an.

dapp

Tout sa ki dekri (woulman, asanble imaj, antretyen ki vin apre) ka aplike poukont yo lè l sèvi avèk scripts Bash ak lòt zouti "enpwovize". Men, si ou fè sa, Lè sa a, nan kèk pwen aplikasyon an ap mennen nan gwo konpleksite ak kontwòl pòv. Konprann sa a, nou te vin kreye pwòp sèvis piblik espesyalize Workflow nou an pou bati CI/CD - dapp.

Kòd sous li ekri nan Ruby, sous louvri epi pibliye sou GitHub. Malerezman, dokimantasyon se kounye a pwen ki pi fèb nan zouti a, men nou ap travay sou li. Epi nou pral ekri epi pale sou dapp la plis pase yon fwa, paske... Nou sensèman pa ka tann pataje kapasite li yo ak tout kominote ki enterese a, men nan entre-temps la, voye pwoblèm ou yo ak rale demann ak / oswa swiv devlopman nan pwojè a sou GitHub.

Mizajou 13 out 2019: kounye a yon pwojè dapp chanje non an werf, kòd li a te konplètman reekri nan Go, ak dokiman li yo te amelyore anpil.

Kubernetes

Yon lòt zouti Open Source pare ki te deja resevwa rekonesans enpòtan nan anviwònman pwofesyonèl la se Kubernetes,yon gwoup jesyon Docker. Sijè a nan itilizasyon li yo nan operasyon an nan pwojè bati sou Docker se pi lwen pase sijè ki abòde lan nan rapò a, kidonk prezantasyon an limite a yon apèsi sou kèk karakteristik enteresan.

Pou deplwaye, Kubernetes ofri:

  • Readiness probe — tcheke preparasyon pou yon nouvo vèsyon aplikasyon an (pou chanje trafik sou li);
  • aktyalizasyon woule - aktyalizasyon imaj sekans nan yon gwoup resipyan (fèmen, aktyalizasyon, preparasyon pou lansman, chanje trafik);
  • aktyalizasyon synchrone - mete ajou yon imaj nan yon gwoup ak yon apwòch diferan: premye sou mwatye nan resipyan yo, Lè sa a, sou rès la;
  • Canary releases - lanse yon nouvo imaj sou yon kantite limite (ti) kontenè pou kontwole anomali yo.

Depi akouchman kontinyèl se pa sèlman lage yon nouvo vèsyon, Kubernetes gen yon kantite opòtinite pou antretyen enfrastrikti ki vin apre: bati-an siveyans ak anrejistreman pou tout resipyan, dekale otomatik, elatriye. Tout bagay sa yo deja travay epi li jis ap tann pou bon jan. aplikasyon nan pwosesis ou yo.

Rekòmandasyon final yo

  1. Sèvi ak Docker.
  2. Kreye imaj Docker nan aplikasyon pou tout bezwen ou yo.
  3. Swiv prensip "Enfrastrikti se kòd."
  4. Link Git ak Docker.
  5. Kontwole lòd dewoulman an.
  6. Sèvi ak yon platfòm ki pare (Kubernetes oswa yon lòt).

Videyo ak glisad

Videyo ki soti nan pèfòmans lan (apeprè yon èdtan) pibliye sou YouTube (rapò a li menm kòmanse apati 5yèm minit - swiv lyen pou jwe apati moman sa a).

Prezantasyon rapò a:

PS

Lòt rapò sou sijè a sou blog nou an:

Sous: www.habr.com

Add nouvo kòmantè