Ukuthegiswa okusekwe kumxholo kumqokeleli werf: kutheni kwaye isebenza njani?

Ukuthegiswa okusekwe kumxholo kumqokeleli werf: kutheni kwaye isebenza njani?

i-werf ngumthombo wethu ovulekileyo we-GitOps CLI eluncedo yokwakha kunye nokuhambisa izicelo kwi-Kubernetes. IN ukukhutshwa kwe-v1.1 into entsha yaziswa kumqokeleli wemifanekiso: ukumaka imifanekiso ngomxholo okanye ukuthegiswa okusekwe kumxholo. Ukuza kuthi ga ngoku, iskimu sokuthega esiqhelekileyo kwi-werf sibandakanya ukumaka imifanekiso yeDocker ngethegi yeGit, isebe leGit okanye ukuzibophelela kweGit. Kodwa zonke ezi zicwangciso zinezingeloncedo ezisonjululwe ngokupheleleyo sisicwangciso esitsha sokumaka. Iinkcukacha malunga nayo kwaye kutheni ilungile iphantsi kokusikwa.

Ukukhupha iseti yeemicroservices ukusuka kwindawo yokugcina yeGit

Imeko ihlala isenzeka xa isicelo sahlulwe saba ziinkonzo ezininzi ezizimeleyo. Ukukhutshwa kwezi nkonzo kunokwenzeka ngokuzimeleyo: enye okanye iinkonzo ezininzi zinokukhutshwa ngexesha, ngelixa abanye kufuneka baqhubeke nokusebenza ngaphandle kotshintsho. Kodwa ukusuka kumbono wokugcinwa kwekhowudi kunye nokulawulwa kweprojekthi, kulungele ngakumbi ukugcina iinkonzo zesicelo ezinjalo kwindawo yokugcina enye.

Kukho iimeko apho iinkonzo zizimeleyo ngokwenene kwaye azihambelani nesicelo esinye. Kule meko, baya kufumaneka kwiiprojekthi ezahlukeneyo kwaye ukukhululwa kwabo kuya kuqhutywa ngeenkqubo ezahlukeneyo zeCI / CD kwiprojekthi nganye.

Nangona kunjalo, enyanisweni, abaphuhlisi bahlala behlula isicelo esinye kwiinkonzo ezincinci ezininzi, kodwa ukudala indawo yokugcina kunye neprojekthi nganye ... kukugqithisa okucacileyo. Yile meko ekuya kuxoxwa ngayo ngakumbi: iinkonzo ezincinci ezinjalo zibekwe kwindawo yokugcina iprojekthi enye kwaye ukukhutshwa kwenzeka ngenkqubo enye kwi-CI/CD.

Ukuthegiswa ngesebe leGit kunye nethegi yeGit

Masithi esona sicwangciso sixhaphakileyo sokuthega sisetyenziswa - ithegi-okanye-isebe. Kumasebe e-Git, imifanekiso iphawulwe ngegama lesebe, kwisebe elinye ngexesha kukho umfanekiso omnye opapashiweyo ngegama lelo sebe. Kwiithegi zeGit, imifanekiso imakishwe ngokwegama lethegi.

Xa ithegi entsha yeGit yenziwe-umzekelo, xa inguqulelo entsha ikhutshiwe-ithegi entsha yeDocker iya kwenziwa kuyo yonke imifanekiso yeprojekthi kwiRegistry yeDocker:

  • 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

La magama emitsha emitsha adluliswa kwiitemplate zeHelm kuqwalaselo lweKubernetes. Xa uqala ukuthunyelwa ngomyalelo werf deploy ibala liyahlaziywa image kwi-Kubernetes resource ibonakalisa kwaye iphinda iqalise izixhobo ezihambelanayo ngenxa yegama lomfanekiso elitshintshileyo.

Ingxaki: kwimeko xa, eneneni, imixholo yomfanekiso ayitshintshanga ukusukela ekukhutshweni kwangaphambili (ithegi yeGit), kodwa kuphela ithegi yeDocker, oku kuyenzeka. eyongezelelweyo ukuqala kwakhona esi sicelo kwaye, ngokufanelekileyo, ixesha lokuphumla liyenzeka. Nangona bekungekho sizathu sokwenene sokwenza oku kuqalwa kwakhona.

Ngenxa yoko, kunye neskimu sokuthegiswa kwangoku kuyimfuneko ukubiyela iindawo zokugcina ezininzi ezahlukeneyo ze-Git kwaye ingxaki ivela yokuququzelela ukukhutshwa kwezi zigcini ziliqela. Ngokubanzi, iskimu esinjalo sijika sibe nzima kwaye sinzima. Kungcono ukudibanisa iinkonzo ezininzi kwindawo yokugcina kunye nokwenza iithegi ze-Docker ukuze kungabikho ukuqalisa kwakhona ngokungeyomfuneko.

Ukuthegiswa ngokuzibophelela kwe-Git

I-werf ikwanalo nesicwangciso sokuphawula esinxulunyaniswa nokuzibophelela kwe-Git.

I-Git-commit sisazisi semixholo yogcino lweGit kwaye ixhomekeke kwimbali yokuhlela yeefayile kwindawo yokugcina yeGit, ngoko kubonakala kunengqiqo ukuyisebenzisela ukubeka imifanekiso kwiRegistry yeDocker.

Nangona kunjalo, ukuthegiswa ngokuzibophelela kwe-Git kunezinto ezingalunganga ezifana nokuthegiswa ngamasebe eGit okanye iithegi zeGit:

  • Ukuzibophelela okungenanto kunokwenziwa okungatshintshi naziphi na iifayile, kodwa ithegi yeDocker yomfanekiso iya kutshintshwa.
  • Isibophelelo sokudibanisa sinokudalwa esingatshintshiyo iifayile, kodwa ithegi yeDocker yomfanekiso iya kutshintshwa.
  • Kunokwenziwa isibophelelo esitshintsha ezo fayile kwi-Git ezingangeniswanga emfanekisweni, kunye nethegi ye-Docker yomfanekiso iya kutshintshwa kwakhona.

UkuThega igama lesebe le-Git alibonisi uhlobo lomfanekiso

Kukho enye ingxaki eyayanyaniswa nesicwangciso sokuphawula kumasebe eGit.

Ukuthega ngegama lesebe kusebenza okoko imisebenzi kwelo sebe iqokelelwa ngokulandelelanayo.

Ukuba kwisikimu sangoku umsebenzisi uqalisa ukwakha kwakhona isibophelelo esidala esinxulunyaniswa nesebe elithile, emva koko i-werf iya kuwubhala kwakhona umfanekiso isebenzisa ithegi ye-Docker ehambelanayo noguqulelo olutsha lomfanekiso wokuzinikela kwakudala. Ukuthunyelwa kusetyenziswa le tag ukusuka ngoku kuqhuba umngcipheko wokutsala uguqulelo olwahlukileyo lomfanekiso xa uphinda uqalise iipod, ngenxa yoko isicelo sethu siya kulahlekelwa unxibelelwano kunye nenkqubo yeCI kwaye ingabikho.

Ukongeza, ngokutyhala okulandelelanayo kwisebe elinye kunye nexesha elifutshane phakathi kwabo, isibophelelo esidala sinokuqulunqwa mva kunentsha entsha: inguqulelo endala yomfanekiso iya kubhala ngaphezulu entsha isebenzisa ithegi yesebe leGit. Iingxaki ezinjalo zinokusonjululwa ngenkqubo ye-CI/CD (umzekelo, kwi-GitLab CI umbhobho wamva uqaliswe ngothotho lwezibophelelo). Nangona kunjalo, ayizizo zonke iinkqubo ezixhasayo kwaye kufuneka kubekho indlela ethembekileyo yokuthintela ingxaki ebaluleke kangaka.

Yintoni ukuphawula okusekwe kumxholo?

Ke, yintoni ukuthegiswa okusekwe kumxholo - ukumaka imifanekiso ngomxholo.

Ukwenza iithegi zeDocker, ayizizo iiprimitives zeGit (Git branch, Git tag...) ezisetyenziswayo, kodwa itshekhi enxulunyaniswa ne:

  • imixholo yomfanekiso. Ithegi ye-ID yomfanekiso ibonisa umxholo wayo. Xa usakha inguqulelo entsha, esi sichongi asiyi kutshintsha ukuba iifayile kumfanekiso azitshintshanga;
  • imbali yokudala lo mfanekiso kwiGit. Imifanekiso eyayanyaniswa namasebe ahlukeneyo eGit kunye nembali yokwakha eyahlukileyo nge-werf iya kuba nethegi ye-ID eyahlukileyo.

Ithegi yesazisi esinjalo yinto ebizwa umfanekiso weqonga utyikityo.

Umfanekiso ngamnye uneseti yamanqanaba: from, before-install, git-archive, install, imports-after-install, before-setup... git-latest-patch njl. Inqanaba ngalinye linesazisi esibonisa imixholo yalo βˆ’ utyikityo lweqonga (utyikityo lweqonga).

Umfanekiso wokugqibela, oquka ezi zigaba, uphawulwe ngento ebizwa ngokuba ngumtyikityo wesethi yezi zigaba - izigaba utyikityo, - nto leyo eyenza ngokubanzi kuzo zonke izigaba zomfanekiso.

Kumfanekiso ngamnye ukusuka kuqwalaselo werf.yaml kwimeko eqhelekileyo, kuya kubakho utyikityo lwayo kwaye, ngokufanelekileyo, ithegi yeDocker.

Umsayino weqonga usombulula zonke ezi ngxaki:

  • Ukuxhathisa kwi-Git engenanto.
  • Ukuxhathisa kwiGit kuzibophelela ekutshintsheni iifayile ezingahambelaniyo nomfanekiso.
  • Ayikhokeleli kwingxaki yokulungisa ngokutsha uguqulelo lwangoku lomfanekiso xa uphinda uqalisa ukwakha ukuzinikela kweGit endala yesebe.

Esi ngoku sisicwangciso esicetyiswayo sokuthegiswa kwaye sisisiseko se-werf kuzo zonke iinkqubo zeCI.

Uyenza njani kwaye isetyenziswe njani kwi-werf

Umyalelo ngoku unokhetho oluhambelanayo werf publish: --tag-by-stages-signature=true|false

Kwinkqubo yeCI, isicwangciso sokumaka sichazwe ngumyalelo werf ci-env. Ngaphambili, iparameter yayichazelwe yona werf ci-env --tagging-strategy=tag-or-branch. Ngoku, ukuba ukhankanye werf ci-env --tagging-strategy=stages-signature okanye ungalukhankanyi olu khetho, i-werf izakusebenzisa isicwangciso sokuphawula ngokungagqibekanga stages-signature. Iqela werf ci-env izakubeka ngokuzenzekela iiflegi eziyimfuneko zomyalelo werf build-and-publish (okanye werf publish), ngoko akukho nketho zongezelelweyo kufuneka zichazwe kule miyalelo.

Umzekelo, umyalelo:

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

...ungenza le mifanekiso ilandelayo:

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

kuyinto 4ef339f84ca22247f01fb335bb19f46c4434014d8daa3d5d6f0e386d luphawu lwezigaba zomfanekiso backend, kwaye f44206457e0a4c8a54655543f749799d10a9fe945896dab1c16996c6 - utyikityo lwezigaba umfanekiso frontend.

Xa usebenzisa imisebenzi ekhethekileyo werf_container_image ΠΈ werf_container_env Akukho mfuneko yokutshintsha nantoni na kwiitemplate zeHelm: le misebenzi iya kuvelisa ngokuzenzekelayo amagama achanekileyo emifanekiso.

Umzekelo woqwalaselo kwinkqubo yeCI:

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

Ulwazi oluthe vetshe malunga noqwalaselo luyafumaneka kumaxwebhu:

Iyonke

  • Inketho entsha werf publish --tag-by-stages-signature=true|false.
  • Ixabiso elitsha lokukhetha werf ci-env --tagging-strategy=stages-signature|tag-or-branch (ukuba ayichazwanga, ukungagqibeki kuya kuba stages-signature).
  • Ukuba ubusebenzise ngaphambili iinketho zokuthegiswa kweGit (WERF_TAG_GIT_COMMIT okanye ukhetho werf publish --tag-git-commit COMMIT), ke qiniseka ukuba utshintshela kwisicwangciso sokumaka izigaba-utyikityo.
  • Kungcono ukutshintshela ngokukhawuleza iiprojekthi ezintsha kwisikimu esitsha sokumaka.
  • Xa utshintshela kwi-werf 1.1, kuyacetyiswa ukuba utshintshe iiprojekthi ezindala kwisikimu esitsha sokumaka, kodwa endala ithegi-okanye-isebe isaxhaswa.

Ukuthegiswa okusekwe kumxholo kusombulula zonke iingxaki ezichazwe kweli nqaku:

  • Ukuchasa igama lethegi ye-Docker kwi-Git engenanto.
  • Ukomelela kwegama lethegi ye-Docker kwi-Git yenza ukuba utshintshe iifayile ezingahambelani nomfanekiso.
  • Ayikhokeleli kwingxaki yokulungisa ngokutsha uguqulelo lwangoku lomfanekiso xa uphinda uqalisa ukwakha ukuzinikela kweGit endala kumasebe eGit.

Yisebenzise! Kwaye ungalibali ukusindwendwela GitHubukwenza umba okanye ukufumana esele ikhona, yongeza i-plus, yenza iPR okanye ubukele nje uphuhliso lweprojekthi.

PS

Funda nakwibhlog yethu:

umthombo: www.habr.com

Yongeza izimvo