Pirsgirêka paqijkirina "aqilmend" a wêneyên konteynerê û çareseriya wê di werfê de

Pirsgirêka paqijkirina "aqilmend" a wêneyên konteynerê û çareseriya wê di werfê de

Gotar pirsgirêkên paqijkirina wêneyên ku di qeydên konteyneran de kom dibin (Docker Registry û analogên wê) di rastiyên lûleyên nûjen ên CI/CD-ê de ji bo serîlêdanên xwemalî yên ewr ên ku ji Kubernetes re têne şandin de nîqaş dike. Pîvanên sereke yên têkildariya wêneyan û zehmetiyên encam ên di paqijkirina otomatîkî de, rizgarkirina cîh û bicîhanîna hewcedariyên tîmê têne dayîn. Di dawiyê de, bi mînakek projeyek Çavkaniya Vekirî ya taybetî bikar bînin, em ê ji we re vebêjin ka meriv çawa van dijwariyan dikare derbas bike.

Pîrozbahiyê

Hejmara wêneyan di qeydek konteynerê de dikare bi lez mezin bibe, cîhê hilanînê bêtir digire û bi vî rengî lêçûna wê bi girîngî zêde dike. Ji bo kontrolkirin, sînorkirin an domandina mezinbûna pejirandî ya cîhê ku di qeydê de hatî dagir kirin, tê pejirandin:

  1. ji bo wêneyan hejmarek diyarkirî ya nîşanan bikar bînin;
  2. wêneyan bi awayekî paqij bikin.


Sînorkirina yekem carinan ji bo tîmên piçûk têne pejirandin. Ger pêşdebiran têra xwe etîketên daîmî hebin (latest, main, test, boris hwd.), Qeyd dê bi mezinahiyê venebe û ji bo demek dirêj hûn neçar in ku li ser paqijkirina wê qet bifikirin. Beriya her tiştî, hemî wêneyên negirêdayî têne jêbirin, û ji bo paqijkirinê tenê karek namîne (her tişt ji hêla berhevkarek çopê ya birêkûpêk ve tê kirin).

Lêbelê, ev nêzîkatî pir pêşkeftinê sînordar dike û kêm caran ji bo projeyên nûjen ên CI/CD-ê tê sepandin. Parçeyek bingehîn a pêşveçûnê bû otomatîkî, ku destûrê dide te ku hûn fonksiyonên nû pir zûtir ceribandin, bicîh bikin û radest bikin. Mînakî, di hemî projeyên me de, boriyek CI-ê bixweber bi her peywirê re tê afirandin. Di wê de, wêne tê civandin, ceribandin, ji bo verastkirin û kontrolên mayî li çerxên Kubernetes-ê yên cihêreng tê rijandin, û heke her tişt baş be, guhertin digihîje bikarhênerê dawî. Û ev êdî ne zanistiya rokêtê ye, lê ji bo pir kesan bûyerek rojane ye - bi îhtîmalek mezin ji bo we, ji ber ku hûn vê gotarê dixwînin.

Ji ber ku rastkirina xeletiyan û pêşdebirina fonksiyonên nû bi paralelî têne kirin, û serbestberdan dikare rojê çend caran were kirin, diyar e ku pêvajoya pêşkeftinê bi hejmareke girîng a pêkanînan re têkildar e, ku tê vê wateyê hejmareke mezin a wêneyan di qeydê de. Di encamê de, mijara organîzekirina paqijkirina bi bandor a qeydê derdikeve holê, ango. rakirina wêneyên negirêdayî.

Lê hûn çawa diyar dikin ka wêneyek têkildar e?

Pîvanên ji bo têkildariya wêneyê

Di piraniya rewşan de, pîvanên sereke dê bibin:

1. Ya yekem (ji hemûyan ya herî eşkere û herî rexnegir) wêneyên ku niha li Kubernetes tê bikaranîn. Rakirina van wêneyan dikare bibe sedema lêçûnên girîng ên dema hilberînê (mînakî, dibe ku wêne ji bo dubarekirinê hewce bibin) an jî hewildanên tîmê ku li ser her yek ji lûpkan xelet dike red bike. (Ji bo vê yekê jî me taybetmendiyek çêkir îxrackarê Prometheus, ku nebûna wêneyên weha di her komek Kubernetes de dişopîne.)

2. Duyemîn (kêm eşkere, lê di heman demê de pir girîng e û dîsa bi îstismarkirinê re têkildar e) - wêneyên ku ji bo vegerandina di doza tespîtkirina pirsgirêkên cidî de pêwîst e di guhertoya heyî de. Mînakî, di doza Helm de, ev wêneyên ku di guhertoyên rizgarkirî yên berdanê de têne bikar anîn. (Bi awayê, bi xwerû di Helm de sînor 256 guhertoyên e, lê ne mimkûn e ku kesek bi rastî hewce bike ku xilas bike wisa hejmareke mezin ji versiyonan?..) Axir, em bi taybetî guhertoyan diparêzin da ku em paşê wan bikar bînin, yanî. Ger hewce be ji wan re "bizivirin".

3. Sêyem - hewcedariyên pêşdebiran: Hemî wêneyên ku bi xebata wan a niha ve girêdayî ne. Mînakî, heke em PR-ê bifikirin, wê hingê maqûl e ku em wêneyek li gorî peywira paşîn bihêlin û, bêje, kirina berê: bi vî rengî pêşdebir dikare zû vegere her peywirê û bi guhertinên herî dawî re bixebite.

4. Çarem - wêneyên ku bi guhertoyên serîlêdana me re têkildar in, yanî berhema dawîn in: v1.0.0, 20.04.01/XNUMX/XNUMX, sierra, hwd.

NB: Pîvanên ku li vir hatine destnîşankirin li ser bingeha ezmûna ku bi dehan tîmên pêşkeftinê yên ji pargîdaniyên cihêreng re têkildar in hatine formulekirin. Lêbelê, bê guman, li gorî taybetmendiyên pêvajoyên pêşkeftinê û binesaziya ku tê bikar anîn (mînak, Kubernetes nayê bikar anîn), dibe ku ev pîvan cûda bibin.

Qebûlbûn û çareseriyên heyî

Karûbarên populer ên bi qeydên konteynerê, wekî qaîdeyek, polîtîkayên xwe yên paqijkirina wêneyê pêşkêş dikin: di wan de hûn dikarin şert û mercên ku tê de tagek ji qeydê tê derxistin diyar bikin. Lêbelê, ev şert ji hêla pîvanên wekî nav, dema afirandinê, û hejmara nîşanan * ve têne sînorkirin.

* Bi pêkanînên qeydkirina konteynerê ve girêdayî ye. Me îmkanên çareseriyên jêrîn nirxand: Azure CR, Docker Hub, ECR, GCR, Pakêtên GitHub, Registry Container GitLab, Registry Harbor, JFrog Artifactory, Quay.io - ji Septemberlon'2020.

Ev koma pîvanan ji bo têrkirina pîvana çaremîn têr e - ango ji bo hilbijartina wêneyên ku bi guhertoyan re têkildar in. Lêbelê, ji bo hemî pîvanên din, pêdivî ye ku meriv cûreyek çareseriyek lihevhatinê hilbijêrin (siyasetek hişktir an, berevajî, nermtir) - li gorî bendewarî û kapasîteyên darayî ve girêdayî ye.

Mînakî, pîvana sêyemîn - bi hewcedariyên pêşdebiran ve girêdayî ye - dikare bi organîzekirina pêvajoyên di nav tîmê de were çareser kirin: navên taybetî yên wêneyan, domandina navnîşên destûrnameyên taybetî û peymanên hundurîn. Lê di dawiyê de ew hîn jî pêdivî ye ku bixweber bibe. Û heke kapasîteyên çareseriyên amade ne bes in, divê hûn tiştek ji xwe re bikin.

Rewşa her du pîvanên yekem bi vî rengî ye: ew bêyî wergirtina daneyan ji pergalek derveyî - ya ku serlêdan lê têne bicîh kirin (di doza me de, Kubernetes) nekarin razî bibin.

Nîşana tevgera xebatê li Git

Ka em bibêjin ku hûn li Git tiştek wusa dixebitin:

Pirsgirêka paqijkirina "aqilmend" a wêneyên konteynerê û çareseriya wê di werfê de

Nîşana bi serê xwe di diagramê de wêneyên konteynerê destnîşan dike ku niha li Kubernetes ji bo her bikarhênerek (bikarhênerên dawîn, ceribandiner, rêveber, hwd.) têne bicîh kirin an jî ji hêla pêşdebiran ve ji bo debugkirin û armancên mîna wan têne bikar anîn.

Ger polîtîkayên paqijkirinê tenê destûrê bidin ku wêne bêne girtin (ne jêbirin) çi dibe bi navên etîketan hatine dayîn?

Pirsgirêka paqijkirina "aqilmend" a wêneyên konteynerê û çareseriya wê di werfê de

Eşkere ye ku senaryoyek wiha dê kesî kêfxweş neke.

Ger siyaset rê bidin ku wêne neyên jêbirin dê çi biguhere? li gorî navberek demkî diyarkirî / jimareya peywirên paşîn?

Pirsgirêka paqijkirina "aqilmend" a wêneyên konteynerê û çareseriya wê di werfê de

Encam pir çêtir bûye, lê hîn jî ji îdealê dûr e. Beriya her tiştî, me hîn jî pêşdebiran hene ku hewceyê wêneyan di qeydê de (an jî di K8-an de jî hatine bicîh kirin) hene ku xeletiyan derxînin…

Ji bo kurtkirina rewşa bazarê ya heyî: fonksiyonên ku di qeydên konteynerê de têne peyda kirin di dema paqijkirinê de nermbûnek têr peyda nakin, û sedema bingehîn a vê yekê ev e. rê nade ku bi cîhana derve re têkilî daynin. Derket holê ku tîmên ku hewcedariyek wusa hewce dikin neçar in ku bi rengek serbixwe jêbirina wêneyê "ji derve" bicîh bikin, bi karanîna Docker Registry API (an API-ya xwecî ya pêkanîna têkildar).

Lêbelê, em li çareseriyek gerdûnî digeriyan ku dê paqijkirina wêneyê ji bo tîmên cihêreng bi karanîna tomarên cihêreng bixweber bike ...

Riya me ya paqijkirina wêneya gerdûnî

Ev hewcedarî ji ku tê? Rastî ev e ku em ne komek pêşdebiranek cihêreng in, lê tîmek ku bi yekcarî gelek ji wan re xizmet dike, ji bo çareserkirina pirsgirêkên CI/CD-ê bi berfirehî dibe alîkar. Û amûra teknîkî ya sereke ji bo vê amûra Çavkaniya Vekirî ye werf. Taybetmendiya wê ev e ku ew fonksiyonek yekane pêk nayîne, lê di hemî qonaxan de bi pêvajoyên radestkirina domdar re tevdigere: ji kombûnê heya bicîhkirinê.

Weşandina wêneyan li qeydê * (di cih de piştî ku ew têne çêkirin) fonksiyonek eşkere ya amûrek wusa ye. Û ji ber ku wêne ji bo hilanînê li wir têne danîn, wê hingê - heke hilanîna we ne bêsînor be - hûn hewce ne ku ji paqijkirina wan a paşîn berpirsiyar bin. Çawa me di vê yekê de serketî bi dest xist, ku hemî pîvanên diyarkirî têr dike, dê bêtir were nîqaş kirin.

* Her çend tomar bixwe cûda bin (Docker Registry, GitLab Container Registry, Harbor, hwd.), bikarhênerên wan bi heman pirsgirêkan re rû bi rû dimînin. Di doza me de çareseriya gerdûnî bi pêkanîna qeydê ve girêdayî nabe, ji ber xwe li derveyî qeydan dimeşîne û ji bo her kesî heman tevgerê pêşkêşî dike.

Her çend em werf wekî pêkanînek nimûne bikar tînin jî, em hêvî dikin ku nêzîkatiyên ku têne bikar anîn dê ji bo tîmên din ên ku bi dijwariyên bi heman rengî re rû bi rû mane kêrhatî bin.

Ji ber vê yekê em mijûl bûn xûkirînî pêkanîna mekanîzmayek ji bo paqijkirina wêneyan - li şûna wan kapasîteyên ku berê di qeydên konteyneran de hatine çêkirin. Pêngava yekem ev bû ku hûn API-ya Docker Registry bikar bînin da ku ji bo hejmara etîketan û dema çêkirina wan heman polîtîkayên seretayî biafirînin (li jor behs kirin). Li wan zêde kirin navnîşa destûrê li ser bingeha wêneyên ku di binesaziya birêkûpêk de têne bikar anîn, yanî Kubernetes. Ji bo ya paşîn, bes bû ku hûn API-ya Kubernetes bikar bînin da ku di nav hemî çavkaniyên belavkirî de dubare bikin û navnîşek nirxan bistînin. image.

Vê çareseriya piçûk pirsgirêka herî krîtîk çareser kir (krîtera No. 1), lê tenê destpêka rêwîtiya me bû ku mekanîzmaya paqijkirinê baştir bike. Pêngava din - û pir balkêştir - biryar bû wêneyên weşandî bi dîroka Git re têkildar bikin.

Tagging schemes

Ji bo destpêkê, me nêzîkatiyek hilbijart ku tê de wêneya paşîn divê agahdariya pêwîst ji bo paqijkirinê hilîne, û pêvajo li ser nexşeyên nîşankirinê ava kir. Dema ku wêneyek diweşîne, bikarhêner vebijarkek nîşankirina taybetî hilbijart (git-branch, git-commit an git-tag) û nirxa têkildar bikar anîn. Di pergalên CI de, ev nirx bixweber li ser guhêrbarên hawîrdorê hatine danîn. Di rastî wêneya paşîn bi primitiveek Git ya taybetî re têkildar bû, daneyên pêwîst ji bo paqijkirinê di etîketan de hilîne.

Vê nêzîkatiyê di komek polîtîkayan de encam da ku hişt ku Git wekî çavkaniya yekane ya rastiyê were bikar anîn:

  • Dema ku şaxek / nîşanek li Git jêbirin, wêneyên têkildar ên di qeydê de bixweber hatin jêbirin.
  • Hejmara wêneyên ku bi etîket û peywirên Git ve girêdayî ne dikarin ji hêla hejmara tagên ku di şemaya hilbijartî de hatine bikar anîn û dema ku tê de peywira têkildar hatî afirandin ve were kontrol kirin.

Bi tevayî, pêkanîna encam hewcedariyên me têr kir, lê di demek kurt de dijwariyek nû li benda me bû. Rastî ev e ku dema ku nexşeyên nîşankirinê yên li ser bingeha Git primitives bikar tînin, em rastî gelek kêmasiyan hatin. (Ji ber ku danasîna wan li derveyî çarçoveya vê gotarê ye, her kes dikare xwe bi hûrguliyan nas bike vir.) Ji ber vê yekê, me biryar da ku em ji bo nîşankirina nêzîkatiyek bikêrtir (nîşandana naverokê) veguherînin, neçar ma ku em pêkanîna paqijkirina wêneyê ji nû ve binirxînin.

Algorîtmaya nû

Çima? Bi nîşankirina-bingeha naverokê re, her etîket dikare di Git-ê de gelek peywiran têr bike. Dema ku wêneyan paqij dikin, êdî hûn nikarin texmîn bikin bi tenê ji komîteya ku tagê nû li qeydê hate zêdekirin.

Ji bo algorîtmaya paqijkirina nû, biryar hate girtin ku ji nexşeyên nîşankirinê dûr bikevin û ava bikin pêvajoya meta-image, ku her yek ji wan komek ji:

  • peywira ku weşan li ser hatî çêkirin (ferq nake ka wêne di qeyda konteynerê de hate zêdekirin, guheztin an wekî xwe ma);
  • û nasnameya meya navxweyî ya ku bi wêneya berhevkirî re têkildar e.

Bi gotineke din hat dayîn girêdana etîketên weşandî bi peymanên li Git.

Veavakirina dawîn û algorîtmaya giştî

Dema ku paqijkirinê mîheng dikin, bikarhêner naha xwe bigihînin polîtîkayên ku wêneyên heyî hilbijêrin. Her siyasetek weha tête diyar kirin:

  • gelek referans, ango. Etîketên Git an şaxên Git ku di dema şopandinê de têne bikar anîn;
  • û sînorê wêneyên lêgerîn ji bo her referansa ji set.

Ji bo ronîkirinê, ev e ya ku veavakirina polîtîkaya xwerû dest pê kir wekî xuya dike:

cleanup:
  keepPolicies:
  - references:
      tag: /.*/
      limit:
        last: 10
  - references:
      branch: /.*/
      limit:
        last: 10
        in: 168h
        operator: And
    imagesPerReference:
      last: 2
      in: 168h
      operator: And
  - references:  
      branch: /^(main|staging|production)$/
    imagesPerReference:
      last: 10

Ev veavakirin sê polîtîkayên ku bi qaîdeyên jêrîn re tevdigerin dihewîne:

  1. Wêneyê ji bo 10 tagên Git-ê yên paşîn (li gorî tarîxa çêkirina tagê) hilînin.
  2. Ji 2 wêneyên ku di hefteya paşîn de hatine weşandin ji bo 10 mijarên ku di hefteya paşîn de bi çalakiyan re ne zêde hatine tomar kirin.
  3. Ji bo şaxan 10 wêneyan hilînin main, staging и production.

Algorîtmaya paşîn bi gavên jêrîn ve girêdayî ye:

  • Vegerandina diyardeyan ji qeyda konteynerê.
  • Ji derveyî wêneyên ku di Kubernetes de têne bikar anîn, ji ber Me berê wan bi anketa K8s API-yê pêş-hilbijartî kir.
  • Dîroka Git dişoxilîne û li ser bingeha polîtîkayên diyarkirî wêneyan derdixe.
  • Rakirina wêneyên mayî.

Em vegerin ser nîgara xwe, tiştê ku bi werfê diqewime ev e:

Pirsgirêka paqijkirina "aqilmend" a wêneyên konteynerê û çareseriya wê di werfê de

Lêbelê, heke hûn werf bikar neynin jî, nêzîkatiyek wusa ji bo paqijkirina wêneya pêşkeftî - di yek pêkanînê de an yeka din (li gorî nêzîkatiya bijartî ya nîşankirina wêneyê) - dikare li ser pergalên / karûbarên din jî were sepandin. Ji bo vê yekê, bes e ku hûn pirsgirêkên ku derdikevin bi bîr bînin û wan fersendên di stûyê xwe de bibînin ku destûrê didin we ku hûn çareseriya wan bi qasî ku gengaz tevbigerin. Em hêvî dikin ku riya ku me geriyaye dê ji we re bibe alîkar ku hûn bi hûrgulî û ramanên nû li doza xweya taybetî binêrin.

encamê

  • Zû an dereng, pir tîm bi pirsgirêka zêdebûna qeydê re rû bi rû dimînin.
  • Dema ku li çareseriyan digere, pêşî hewce ye ku pîvanên têkildariya wêneyê were destnîşankirin.
  • Amûrên ku ji hêla karûbarên tomara konteyner ên populer ve têne pêşkêş kirin dihêlin hûn paqijkirinek pir hêsan organîze bikin ku "cîhana derve" li ber çavan nagire: Wêneyên ku di Kubernetes de têne bikar anîn û taybetmendiyên karûbarê tîmê.
  • Pêdivî ye ku algorîtmayek maqûl û bikêr têgihîştina pêvajoyên CI/CD hebe û ne tenê bi daneyên wêneya Docker re tevbigere.

PS

Li ser bloga me jî bixwînin:

Source: www.habr.com

Add a comment