Tagradh stèidhichte air susbaint anns an neach-togail werf: carson agus ciamar a tha e ag obair?

Tagradh stèidhichte air susbaint anns an neach-togail werf: carson agus ciamar a tha e ag obair?

gaoir an goireas fosgailte GitOps CLI againn airson a bhith a’ togail agus a’ lìbhrigeadh thagraidhean gu Kubernetes. ANNS sgaoileadh v1.1 chaidh feart ùr a thoirt a-steach don neach-cruinneachaidh ìomhaighean: tagadh ìomhaighean a rèir susbaint no tagadh stèidhichte air susbaint. Gu ruige seo, bha an sgeama tagaidh àbhaisteach ann an werf a’ toirt a-steach a bhith a’ tagadh ìomhaighean Docker le tag Git, meur Git no gealltanas Git. Ach tha eas-bhuannachdan aig na sgeamaichean sin uile a tha gu tur air am fuasgladh leis an ro-innleachd tagaidh ùr. Tha mion-fhiosrachadh mu dheidhinn agus carson a tha e cho math fon ghearradh.

A’ sgaoileadh seata de mhicro-sheirbheisean bho aon stòr Git

Bidh suidheachadh tric a’ tachairt nuair a tha iarrtas air a roinn ann am mòran sheirbheisean neo-eisimeileach. Faodaidh sgaoilidhean de na seirbheisean sin tachairt gu neo-eisimeileach: faodar aon no barrachd sheirbheisean a leigeil ma sgaoil aig an aon àm, agus feumaidh an còrr cumail orra ag obair gun atharrachadh sam bith. Ach bho thaobh stòradh còd agus stiùireadh pròiseict, tha e nas fhasa seirbheisean tagraidh mar sin a chumail ann an aon stòr.

Tha suidheachaidhean ann nuair a tha seirbheisean dha-rìribh neo-eisimeileach agus nach eil co-cheangailte ri aon iarrtas. Anns a’ chùis seo, bidh iad suidhichte ann am pròiseactan fa-leth agus thèid an sgaoileadh tro phròiseasan CI/CD air leth anns gach pròiseact.

Ach, ann an da-rìribh, bidh luchd-leasachaidh gu tric a’ roinn aon iarrtas ann an grunnan meanbh-sheirbheisean, ach tha cruthachadh stòr agus pròiseact air leth airson gach fear... gu math soilleir. Is e an suidheachadh seo a thèid a dheasbad tuilleadh: tha grunn de na meanbh-sheirbheisean sin suidhichte ann an aon stòr pròiseict agus bidh fiosan a’ tachairt tro aon phròiseas ann an CI / CD.

Tagradh le meur Git agus tag Git

Canaidh sinn gur e an ro-innleachd tagaidh as cumanta a thathas a’ cleachdadh - tag-no-meur. Airson meuran Git, tha ìomhaighean air an tagadh le ainm a’ mheur; airson aon mheur aig aon àm chan eil ann ach aon ìomhaigh foillsichte le ainm a’ mheur sin. Airson tagaichean Git, tha ìomhaighean air an tagadh a rèir ainm an taga.

Nuair a thèid taga Git ùr a chruthachadh - mar eisimpleir, nuair a thèid dreach ùr fhoillseachadh - thèid taga Docker ùr a chruthachadh airson a h-uile dealbh pròiseict ann an Clàr an Docker:

  • myregistry.org/myproject/frontend:v1.1.10
  • myregistry.org/myproject/myservice1:v1.1.10
  • myregistry.org/myproject/myservice2:v1.1.10
  • myregistry.org/myproject/myservice3:v1.1.10
  • myregistry.org/myproject/myservice4:v1.1.10
  • myregistry.org/myproject/myservice5:v1.1.10
  • myregistry.org/myproject/database:v1.1.10

Thèid na h-ainmean ìomhaigh ùra seo a chuir tro theamplaidean Helm gu rèiteachadh Kubernetes. Nuair a thòisicheas tu air an cleachdadh leis an àithne werf deploy raon ga ùrachadh image ann an goireas Kubernetes a’ nochdadh agus ag ath-thòiseachadh nan goireasan co-fhreagarrach air sgàth an ainm ìomhaigh atharraichte.

duilgheadas: anns a’ chùis nuair, gu dearbh, nach eil susbaint na h-ìomhaigh air atharrachadh bhon sgaoileadh roimhe (Git tag), ach dìreach an taga Docker aige, bidh seo a’ tachairt a bharrachd ath-thòiseachadh an tagraidh seo agus, a rèir sin, tha beagan ùine downt comasach. Ged nach robh fìor adhbhar ann airson an ath-thòiseachadh seo a dhèanamh.

Mar thoradh air an sin, leis an sgeama tagaidh gnàthach feumar feansadh a dhèanamh air grunn stòran Git fa leth agus tha an duilgheadas ag èirigh le bhith ag eagrachadh sgaoileadh nan grunn stòran sin. San fharsaingeachd, tha an leithid de sgeama a 'tionndadh a-mach gu bhith cus agus iom-fhillte. Tha e nas fheàrr mòran sheirbheisean a chur còmhla ann an aon stòr agus tagaichean Docker a chruthachadh gus nach bi ath-thòiseachadh neo-riatanach ann.

Tagradh le Git commit

tha ro-innleachd tagaidh aig werf cuideachd co-cheangailte ri geallaidhean Git.

Tha Git-commit na aithnichear airson susbaint stòr Git agus tha e an urra ri eachdraidh deasachaidh fhaidhlichean ann an stòr Git, agus mar sin tha e coltach gu bheil e reusanta a chleachdadh airson ìomhaighean a thagadh ann an Clàr an Docker.

Ach, tha na h-aon eas-bhuannachdan aig tagadh le Git gealltanas ri tagadh le meuran Git no tagaichean Git:

  • Dh’ fhaodadh gealltanas falamh a bhith air a chruthachadh nach atharraich faidhlichean sam bith, ach thèid tag Docker na h-ìomhaigh atharrachadh.
  • Dh’ fhaodadh gealltanas aonaidh a bhith air a chruthachadh nach atharraich na faidhlichean, ach thèid tag Docker na h-ìomhaigh atharrachadh.
  • Dh’ fhaodadh gealladh a dhèanamh a dh’ atharraicheas na faidhlichean sin ann an Git nach eil air an toirt a-steach don ìomhaigh, agus thèid tag Docker na h-ìomhaigh atharrachadh a-rithist.

Chan eil ainm meur Tagging Git a’ nochdadh dreach ìomhaigh

Tha duilgheadas eile co-cheangailte ris an ro-innleachd tagaidh airson meuran Git.

Bidh tagadh a rèir ainm meur ag obair fhad ‘s a tha na geallaidhean air a’ mheur sin air an cruinneachadh ann an òrdugh a rèir eachdraidh.

Ma thòisicheas an neach-cleachdaidh san sgeama làithreach ag ath-thogail seann ghealladh co-cheangailte ri meur sònraichte, an uairsin bidh werf ag ath-sgrìobhadh an ìomhaigh a’ cleachdadh an taga Docker co-fhreagarrach le dreach ùr den ìomhaigh airson an t-seann ghealladh. Bidh cleachdadh a’ cleachdadh an taga seo bho seo a-mach ann an cunnart dreach eadar-dhealaichte den ìomhaigh a tharraing nuair a bhios iad ag ath-thòiseachadh pods, agus mar thoradh air an sin caillidh an tagradh againn ceangal ris an t-siostam CI agus thèid a dhì-shioncronachadh.

A bharrachd air an sin, le putadh leantainneach a-steach do aon mheur le ùine ghoirid eatorra, faodar an t-seann ghealladh a chuir ri chèile nas fhaide na am fear as ùire: bidh an seann dreach den ìomhaigh a’ sgrìobhadh thairis air an fhear ùr a’ cleachdadh tag meur Git. Faodar duilgheadasan leithid seo fhuasgladh le siostam CI/CD (mar eisimpleir, ann an GitLab CI tha loidhne-phìoban an tè mu dheireadh air a chuir air bhog airson sreath de ghealltanasan). Ach, chan eil a h-uile siostam a 'toirt taic dha seo agus feumaidh dòigh nas earbsaiche a bhith ann gus casg a chur air duilgheadas cho bunaiteach.

Dè a th’ ann an tagadh stèidhichte air susbaint?

Mar sin, dè a th 'ann an tagadh stèidhichte air susbaint - a' tagadh ìomhaighean a rèir susbaint.

Gus tagaichean Docker a chruthachadh, chan e Git primitives (meur Git, tag Git ...) a thathas a’ cleachdadh, ach checksum co-cheangailte ri:

  • susbaint na h-ìomhaigh. Tha taga ID na h-ìomhaigh a’ nochdadh a shusbaint. Nuair a bhios tu a' togail dreach ùr, chan atharraich an aithnichear seo mur eil na faidhlichean san dealbh air atharrachadh;
  • eachdraidh cruthachadh an ìomhaigh seo ann an Git. Bidh tagaichean ID eadar-dhealaichte aig ìomhaighean co-cheangailte ri diofar mheuran Git agus eachdraidh togail eadar-dhealaichte tro werf.

Is e tag aithnichear mar sin an t-ainm ainm-sgrìobhte ìre ìomhaigh.

Tha seata de ìrean anns gach ìomhaigh: from, before-install, git-archive, install, imports-after-install, before-setup... git-latest-patch etc. Tha aithnichear aig gach ìre a tha a’ nochdadh susbaint − ainm-sgrìobhte àrd-ùrlar (ainm-sgrìobhte ìre).

Tha an ìomhaigh mu dheireadh, anns a bheil na h-ìrean sin, air a chomharrachadh le ainm-sgrìobhte seata nan ìrean sin - ainm-sgrìobhte ìrean, - a tha coitcheann airson gach ìre den ìomhaigh.

Airson gach dealbh bhon rèiteachadh werf.yaml anns a 'chùis choitcheann, bidh ainm-sgrìobhte fhèin ann agus, a rèir sin, tag Docker.

Bidh ainm-sgrìobhte an àrd-ùrlair a’ fuasgladh nan duilgheadasan sin uile:

  • A’ seasamh an aghaidh geallaidhean Git falamh.
  • Tha Resistant to Git a’ gealltainn gun atharraich sin faidhlichean nach eil buntainneach don ìomhaigh.
  • Chan eil sin a’ leantainn gu duilgheadas le bhith ag ath-nuadhachadh an dreach gnàthach den ìomhaigh nuair a bhios tu ag ath-thòiseachadh toglaichean airson seann gheugan Git de mheur.

Is e seo a-nis an ro-innleachd tagaidh a thathar a’ moladh agus is e seo an ro-innleachd àbhaisteach ann an werf airson a h-uile siostam CI.

Mar a nì thu comas agus cleachdadh ann an werf

Tha roghainn co-fhreagarrach aig an àithne a-nis werf publish: --tag-by-stages-signature=true|false

Ann an siostam CI, tha an ro-innleachd tagaidh air a shònrachadh leis an àithne werf ci-env. Roimhe sin, chaidh am paramadair a mhìneachadh air a shon werf ci-env --tagging-strategy=tag-or-branch. A-nis, ma tha thu a shònrachadh werf ci-env --tagging-strategy=stages-signature no na sònraich an roghainn seo, cleachdaidh werf an ro-innleachd tagaidh gu bunaiteach stages-signature... Sgioba werf ci-env suidhichidh e gu fèin-ghluasadach na brataichean riatanach airson an àithne werf build-and-publish (no werf publish), mar sin chan fheumar roghainnean a bharrachd a shònrachadh airson na h-òrdughan sin.

Mar eisimpleir, an òrdugh:

werf publish --stages-storage :local --images-repo registry.hello.com/web/core/system --tag-by-stages-signature

... na dealbhan a leanas a chruthachadh:

  • registry.hello.com/web/core/system/backend:4ef339f84ca22247f01fb335bb19f46c4434014d8daa3d5d6f0e386d
  • registry.hello.com/web/core/system/frontend:f44206457e0a4c8a54655543f749799d10a9fe945896dab1c16996c6

tha e 4ef339f84ca22247f01fb335bb19f46c4434014d8daa3d5d6f0e386d tha e na ainm-sgrìobhte de ìrean na h-ìomhaigh backendagus f44206457e0a4c8a54655543f749799d10a9fe945896dab1c16996c6 - ainm-sgrìobhte ìrean ìomhaigh frontend.

Nuair a bhios tu a 'cleachdadh gnìomhan sònraichte werf_container_image и werf_container_env Chan eil feum air dad atharrachadh anns na teamplaidean Helm: cruthaichidh na gnìomhan sin gu fèin-ghluasadach na h-ainmean ìomhaigh ceart.

Eisimpleir de rèiteachadh ann an siostam CI:

type multiwerf && source <(multiwerf use 1.1 beta)
type werf && source <(werf ci-env gitlab)
werf build-and-publish|deploy

Tha tuilleadh fiosrachaidh mu rèiteachadh ri fhaighinn anns na sgrìobhainnean:

Iomlan

  • Roghainn ùr werf publish --tag-by-stages-signature=true|false.
  • Luach roghainn ùr werf ci-env --tagging-strategy=stages-signature|tag-or-branch (mura h-eil e air a shònrachadh, bidh am fear bunaiteach stages-signature).
  • Ma chleachd thu na roghainnean tagaidh airson gealltanas Git roimhe seo (WERF_TAG_GIT_COMMIT no roghainn werf publish --tag-git-commit COMMIT), an uairsin bi cinnteach gun atharraich thu chun ro-innleachd tagadh ìrean-ainm-sgrìobhte.
  • Tha e nas fheàrr pròiseactan ùra atharrachadh sa bhad chun sgeama tagaidh ùr.
  • Nuair a ghluaiseas tu gu werf 1.1, tha e ciallach seann phròiseactan atharrachadh chun sgeama tagaidh ùr, ach an t-seann tag-no-meur a’ faighinn taic fhathast.

Bidh tagadh stèidhichte air susbaint a’ fuasgladh nan duilgheadasan uile a tha air an còmhdach san artaigil:

  • Ainm tag docker an aghaidh Git falamh a’ gealltainn.
  • Tha fulangas ainm tag an Docker gu Git a’ gealltainn gun atharraich sin faidhlichean nach eil buntainneach don ìomhaigh.
  • Chan eil seo a’ leantainn gu duilgheadas le bhith ag ath-sgrùdadh an dreach gnàthach den ìomhaigh nuair a bhios ath-thòiseachadh air togalaichean airson seann Git a’ gealltainn airson meuran Git.

Cleachd e! Agus na dìochuimhnich tadhal oirnn aig GitHubgus cùis a chruthachadh no fear a lorg a tha ann mu thràth, cuir ris a bharrachd, cruthaich PR no dìreach coimhead air leasachadh a’ phròiseict.

PS

Leugh cuideachd air ar blog:

Source: www.habr.com

Cuir beachd ann