Zvemukati-based tagging mune werf muunganidzi: nei uye inoshanda sei?

Zvemukati-based tagging mune werf muunganidzi: nei uye inoshanda sei?

werf ndiyo yedu yakavhurika sosi GitOps CLI utility yekuvaka uye kuendesa zvikumbiro kuKubernetes. IN kuburitsa v1.1 chinhu chitsva chakaunzwa mumuunganidzi wemifananidzo: kumaka mifananidzo nezvirimo kana content-based tagging. Kusvika izvozvi, iyo yakajairwa yekumaka chirongwa muwerf yaisanganisira kuisa Docker mifananidzo neGit tag, Git bazi kana Git commit. Asi zvese izvi zvirongwa zvine zvakaipira zvinogadziriswa zvizere neiyo nyowani yekumaka zano. Tsanangudzo pamusoro payo uye nei yakanaka kwazvo iri pasi pekucheka.

Kuburitsa seti yemamicroservices kubva kune imwe Git repository

Mamiriro ezvinhu anowanzoitika kana chikumbiro chakakamurwa kuita akawanda kana mashoma akazvimirira masevhisi. Kuburitswa kwemasevhisi aya kunogona kuitika kwakazvimirira: imwe kana mamwe masevhisi anogona kuburitswa panguva, nepo mamwe ese anofanirwa kuramba achishanda pasina shanduko. Asi kubva pakuona kwekodhi yekuchengetedza uye manejimendi manejimendi, zviri nyore kuchengetedza akadai masevhisi ekushandisa mune imwechete repository.

Pane mamiriro ezvinhu apo masevhisi akanyatsozvimiririra uye asina kubatana nechero application. Muchiitiko ichi, ivo vachave vari mumapurojekiti akasiyana uye kuburitswa kwavo kuchaitwa kuburikidza neakasiyana CI / CD maitiro mune yega yega mapurojekiti.

Nekudaro, muchokwadi, vanogadzira vanowanzo patsanura imwe application kuita akati wandei mamicroservices, asi kugadzira yakaparadzana repository uye purojekiti kune yega yega ... ndeye yakajeka overkill. Aya ndiwo mamiriro achakurukurwa zvakare: akati wandei akadai ma microservices ari mune imwechete purojekiti repository uye kuburitswa kunoitika kuburikidza nekuita kumwe chete muCI/CD.

Kumaka neGit bazi uye Git tag

Ngatitii nzira yakajairika yekumaka ndiyo inoshandiswa - tag-kana-bazi. Kumatavi eGit, mifananidzo inoiswa zita rebazi, kune rimwe bazi panguva pane imwe chete yakadhindwa mufananidzo une zita rebazi iro. Kune maGit tag, mifananidzo inoiswa zvinoenderana nezita remaki.

Kana iyo Git tag nyowani yagadzirwa-semuenzaniso, kana vhezheni nyowani yaburitswa-itsva Docker tag ichagadzirwa kune ese mapurojekiti mifananidzo muDocker Registry:

  • 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

Aya mazita matsva emifananidzo anopfuudzwa kuburikidza neHelm templates kune Kubernetes kumisikidzwa. Paunotanga kutumirwa nekuraira werf deploy munda uri kuvandudzwa image muKubernetes sosi inoratidza uye kutangazve zviwanikwa zvinoenderana nekuda kwezita remufananidzo rakashandurwa.

dambudziko: mune iyo nyaya apo, muchokwadi, zviri mukati memufananidzo hazvina kuchinja kubva pakatanga kuburitswa (Git tag), asi chete Docker tag yayo, izvi zvinoitika. kuwedzera kutangazve iyi application uye, nekudaro, imwe nguva yekuzorora inogoneka. Kunyangwe pakanga pasina chikonzero chaicho chekuita iyi restart.

Nekuda kweizvozvo, nehurongwa hwazvino hwekumaka zvinodikanwa kufence akati wandei akapatsanurwa Git repositori uye dambudziko rinomuka rekuronga kuburitswa kweaya akati wandei marepositori. Kazhinji, chirongwa chakadaro chinoshanduka kuva chakawandisa uye chakaoma. Zviri nani kusanganisa masevhisi akawanda mune imwechete repository uye kugadzira maDocker tag kuitira kuti pasave neasina kufanira kutangazve.

Kumaka neGit commit

werf zvakare ine nzira yekumaka yakabatana neGit inoita.

Git-commit chiziviso chezviri mukati meGit repository uye zvinoenderana neyakagadziriswa nhoroondo yemafaira ari muGit repository, saka zvinoita senge zvine musoro kuishandisa kumaka mifananidzo muDocker Registry.

Nekudaro, kumaka neGit commit kune zvakangofanana nekumaka nemapazi eGit kana Git tags:

  • Chipikirwa chisina chinhu chinogona kugadzirwa icho chisingachinji chero mafaera, asi iyo Docker tag yemufananidzo ichashandurwa.
  • Kubatanidza kuzvipira kunogona kugadzirwa iyo isingachinji mafaera, asi iyo Docker tag yemufananidzo ichashandurwa.
  • Chibvumirano chinogona kuitwa chinoshandura iwo mafaera muGit asina kupinzwa mumufananidzo, uye iyo Docker tag yemufananidzo ichashandurwa zvakare.

Kumaka Git zita rebazi hariratidzi mufananidzo vhezheni

Pane rimwe dambudziko rakabatana neiyo yekumaka nzira yemapazi eGit.

Kutega nemazita ebazi kunoshanda chero bedzi zvakaitwa pabazi iroro zvaunganidzwa zvakatevedzana munhevedzano yenguva.

Kana muchirongwa chazvino mushandisi akatanga kuvakazve chibvumirano chekare chakabatana nerimwe bazi, ipapo werf inonyorazve mufananidzo uchishandisa inoenderana Docker tag ine ichangobva kuvakwa vhezheni yemufananidzo kune yekare kuzvipira. Deployments uchishandisa iyi tag kubva zvino inomhanyisa njodzi yekudhonza imwe vhezheni yemufananidzo paunotangazve mapodhi, semhedzisiro yekuti application yedu inorasikirwa nekubatana neCI system uye kuita desynchronized.

Pamusoro pezvo, nekusundidzira kunotevedzana mubazi rimwe rine nguva pfupi pakati pawo, kuzvipira kwekare kunogona kuunganidzwa gare gare kupfuura iyo nyowani: iyo yekare vhezheni yemufananidzo ichabvisa iyo nyowani uchishandisa iyo Git bazi tag. Matambudziko akadai anogona kugadziriswa neCI/CD system (semuenzaniso, muGitLab CI pombi yekupedzisira inotangwa kune akatevedzana ekuita). Nekudaro, haasi ese masisitimu anotsigira izvi uye panofanirwa kuve neimwe nzira yakavimbika yekudzivirira dambudziko rakakosha kudaro.

Chii chinonzi content-based tagging?

Saka, chii chinonzi content-based tagging - kuisa mifananidzo nemukati.

Kugadzira Docker tags, haisi Git primitives (Git bazi, Git tag ...) inoshandiswa, asi cheki inosanganiswa ne:

  • zviri mukati memufananidzo. Mufananidzo ID tag inoratidza zvirimo. Paunenge uchivaka shanduro itsva, chiziviso ichi hachizoshanduki kana mafaira ari mumufananidzo asina kuchinja;
  • nhoroondo yekugadzira mufananidzo uyu muGit. Mifananidzo yakabatana nemapazi akasiyana eGit uye akasiyana ekuvaka nhoroondo kuburikidza newerf ichave neakasiyana ID ma tag.

Yakadaro identifier tag ndiyo inonzi mufananidzo danho siginecha.

Mufananidzo wega wega une seti yematanho: from, before-install, git-archive, install, imports-after-install, before-setup... git-latest-patch etc. Danho rega rega rine chiziviso chinoratidza zvirimo βˆ’ siteji siginicha (stage siginicha).

Mufananidzo wekupedzisira, unosanganisira nhanho idzi, wakamisikidzwa neinonzi siginicha yeseti yematanho aya - nhanho siginicha, - iyo inogadzirisa kune ese matanho emufananidzo.

Pamufananidzo wega wega kubva pakugadzirisa werf.yaml mune zvakajairika, pachave neyayo siginecha uye, maererano, iyo Docker tag.

Siginecha yedanho inogadzirisa matambudziko ese aya:

  • Kupokana neGit isina chinhu inoita.
  • Resistant to Git inoita kuti inoshandura mafaera asina basa nemufananidzo.
  • Haitungamiri kudambudziko rekugadzirisa iyo yazvino vhezheni yemufananidzo kana uchitangazve kuvaka kune ekare Git dhizaini yebazi.

Iyi ndiyo ikozvino yakakurudzirwa yekumaka zano uye ndiyo yakasarudzika mune werf kune ese maCI masisitimu.

Maitiro ekugonesa uye kushandisa mune werf

Iwo murairo zvino une sarudzo inoenderana werf publish: --tag-by-stages-signature=true|false

Mune CI system, nzira yekumaka inotsanangurwa nemurairo werf ci-env. Pakutanga, parameter yakatsanangurwa iyo werf ci-env --tagging-strategy=tag-or-branch. Zvino, kana ukatsanangura werf ci-env --tagging-strategy=stages-signature kana usatsanangure sarudzo iyi, werf inoshandisa iyo yekumaka zano nekusarudzika stages-signature. Team werf ci-env ichaisa otomatiki mireza inodiwa yekuraira werf build-and-publish (kana werf publish), saka hapana imwe sarudzo inoda kutsanangurwa kune iyi mirairo.

Somuenzaniso, murairo:

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

... inogona kugadzira mifananidzo inotevera:

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

zviri 4ef339f84ca22247f01fb335bb19f46c4434014d8daa3d5d6f0e386d isignature yematanho emufananidzo backenduye f44206457e0a4c8a54655543f749799d10a9fe945896dab1c16996c6 - siginicha yematanho emifananidzo frontend.

Paunenge uchishandisa mabasa akakosha werf_container_image ΠΈ werf_container_env Iko hakuna chikonzero chekuchinja chero chinhu muHelm templates: aya mabasa anozogadzira otomatiki iwo chaiwo mazita emifananidzo.

Muenzaniso kumisikidzwa muCI system:

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

Rumwe ruzivo nezve configuration inowanikwa mune zvinyorwa:

Total

  • Sarudzo itsva werf publish --tag-by-stages-signature=true|false.
  • New sarudzo kukosha werf ci-env --tagging-strategy=stages-signature|tag-or-branch (kana isina kutaurwa, iyo default ichave stages-signature).
  • Kana iwe wakamboshandisa iyo yekumaka sarudzo yeGit inoita (WERF_TAG_GIT_COMMIT kana sarudzo werf publish --tag-git-commit COMMIT), wobva waita shuwa yekuchinjira kune yekumaka zano matanho-saina.
  • Zviri nani kukurumidza kushandura mapurojekiti matsva kuchirongwa chitsva chekumaka.
  • Kana uchichinjisa kune werf 1.1, zvinokurudzirwa kushandura mapurojekiti ekare kuchirongwa chitsva chekumaka, asi chekare. tag-kana-bazi ichiri kutsigirwa.

Content-based tagging inogadzirisa matambudziko ese akafukidzwa muchinyorwa:

  • Docker tag zita kuramba kune isina chinhu Git anoita.
  • Resilience yezita reDocker tag kuGit inoita kuti inoshandura mafaera asina basa nemufananidzo.
  • Hazvitungamiri kune dambudziko rekugadzirisa iyo yazvino vhezheni yemufananidzo paunotangazve kuvaka kune yekare Git kuzvipira kumapazi eGit.

Shandisa! Uye usakanganwa kutishanyira pa GitHubkugadzira nyaya kana kutsvaga iripo, wedzera kuwedzera, gadzira PR kana kungoona budiriro yeprojekiti.

PS

Verenga zvakare pablog yedu:

Source: www.habr.com

Voeg