Alamar tushen abun ciki a cikin maginin werf: me yasa kuma ta yaya yake aiki?

Alamar tushen abun ciki a cikin maginin werf: me yasa kuma ta yaya yake aiki?

wuf shine tushen tushen mu na GitOps CLI mai amfani don ginawa da isar da aikace-aikace zuwa Kubernetes. IN saki v1.1 an gabatar da sabon fasali a cikin mai tattara hoto: yiwa hotuna alama ta abun ciki ko tushen abun ciki tagging. Har zuwa yanzu, tsarin sawa na yau da kullun a cikin werf ya haɗa da yiwa hotuna Docker alama ta Git tag, reshen Git ko Git aikatawa. Amma duk waɗannan tsare-tsare suna da lahani waɗanda aka warware gaba ɗaya ta hanyar sabon dabarun sawa. Cikakken bayani game da shi da kuma dalilin da yasa yake da kyau yana ƙarƙashin yanke.

Ana fitar da saitin microservices daga ma'ajin Git guda ɗaya

Wani yanayi yakan faru lokacin da aka raba aikace-aikacen zuwa ayyuka masu zaman kansu da yawa ko žasa. Sakin waɗannan ayyukan na iya faruwa da kansa: ɗaya ko fiye sabis za a iya saki a lokaci guda, yayin da sauran dole ne su ci gaba da aiki ba tare da wani canji ba. Amma daga ra'ayi na ajiyar lambar da sarrafa ayyukan, ya fi dacewa don ajiye irin waɗannan ayyukan aikace-aikacen a cikin ma'ajin guda ɗaya.

Akwai yanayi lokacin da sabis ke zaman kansa da gaske kuma ba a haɗa su da aikace-aikace guda ɗaya ba. A wannan yanayin, za a sanya su a cikin ayyuka daban-daban kuma za a aiwatar da sakin su ta hanyar CI / CD daban-daban a kowane ɗayan ayyukan.

Koyaya, a zahiri, masu haɓakawa sukan raba aikace-aikacen guda ɗaya zuwa microservices da yawa, amma ƙirƙirar ma'ajin ajiya daban da aiki ga kowane… shine bayyanannen wuce gona da iri. Wannan halin da ake ciki ne za a tattauna kara: da yawa irin waɗannan microservices suna samuwa a cikin ma'ajin aikin guda ɗaya kuma sakewa suna faruwa ta hanyar tsari guda ɗaya a cikin CI / CD.

Yin alama ta reshen Git da alamar Git

Bari mu ce ana amfani da dabarun tambarin da aka fi sani da shi - tag-ko-reshe. Don rassan Git, ana yiwa hotuna alama da sunan reshe, ga reshe ɗaya a lokaci guda akwai hoton da aka buga da sunan reshen. Don alamun Git, ana yiwa hotuna alama bisa ga sunan tag.

Lokacin da aka ƙirƙiri sabon alamar Git-misali, lokacin da aka fitar da sabon sigar-za a ƙirƙiri sabon alamar Docker don duk hotunan aikin a cikin Registry 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

Waɗannan sabbin sunayen hoton ana wuce su ta samfuran Helm zuwa tsarin Kubernetes. Lokacin fara turawa tare da umarni werf deploy ana sabunta filin image a cikin Kubernetes albarkatu yana bayyana da kuma sake kunna albarkatun da suka dace saboda sunan hoton da aka canza.

matsala: a cikin yanayin lokacin, a zahiri, abubuwan da ke cikin hoton ba su canza ba tun fitowar da ta gabata (Tag Git), amma kawai alamar Docker, wannan yana faruwa. kari sake kunna wannan aikace-aikacen kuma, saboda haka, wasu lokutan raguwa yana yiwuwa. Kodayake babu ainihin dalilin yin wannan sake farawa.

Sakamakon haka, tare da tsarin alamar tambarin na yanzu ya zama dole a shinge ma'ajiyar Git daban-daban kuma matsalar ta taso na tsara fitar da waɗannan ma'ajiyar. Gabaɗaya, irin wannan makircin ya zama mai ɗaukar nauyi da rikitarwa. Yana da kyau a haɗa ayyuka da yawa a cikin ma'ajiya guda ɗaya kuma ƙirƙirar alamun Docker don kada a sake farawa da ba dole ba.

Tagging ta Git alkawari

werf kuma yana da dabarun sawa mai alaƙa da ayyukan Git.

Git-commit mai gano abubuwan da ke cikin ma'ajiyar Git kuma ya dogara da tarihin gyara fayilolin da ke cikin ma'ajiyar Git, don haka yana da ma'ana don amfani da shi don yiwa hotuna alama a cikin Docker Registry.

Koyaya, yiwa alama ta Git aikatawa yana da lahani iri ɗaya kamar sawa ta rassan Git ko alamun Git:

  • Za a iya ƙirƙira wani aikin wofi wanda baya canza kowane fayil, amma za a canza alamar Docker na hoton.
  • Za a iya ƙirƙirar haɗin kai wanda baya canza fayilolin, amma za a canza alamar Docker na hoton.
  • Ana iya yin alƙawarin da zai canza waɗannan fayilolin a cikin Git waɗanda ba a shigo da su cikin hoton ba, kuma za a sake canza alamar Docker na hoton.

Yin yiwa sunan reshen Git alama baya nuna sigar hoto

Akwai wata matsala mai alaƙa da dabarun sawa ga rassan Git.

Yin alama da sunan reshe yana aiki muddin an tattara ayyukan da aka yi a wannan reshe a jere a jere.

Idan a cikin tsarin na yanzu mai amfani ya fara sake gina tsohuwar alƙawarin da ke da alaƙa da wani reshe, to werf zai sake rubuta hoton ta amfani da alamar Docker daidai tare da sabon sigar hoton da aka gina don tsohon alƙawarin. Abubuwan da aka yi amfani da wannan alamar daga yanzu suna fuskantar haɗarin jawo wani nau'in hoton daban-daban yayin sake kunna kwasfan fayiloli, sakamakon haka aikace-aikacenmu zai rasa haɗin gwiwa tare da tsarin CI kuma ya daina aiki.

Bugu da ƙari, tare da ci gaba da turawa zuwa reshe ɗaya tare da ɗan gajeren lokaci a tsakanin su, ana iya haɗa tsohuwar alƙawarin daga baya fiye da sabon: tsohon sigar hoton zai sake rubuta sabon ta amfani da alamar Git. Ana iya magance irin waɗannan matsalolin ta hanyar tsarin CI / CD (misali, a cikin GitLab CI an ƙaddamar da bututun na ƙarshen don jerin aikatawa). Koyaya, ba duk tsarin bane ke goyan bayan wannan kuma dole ne a sami ingantacciyar hanyar hana irin wannan babbar matsala.

Menene tushen abun ciki tagging?

Don haka, menene tagging na tushen abun ciki - yiwa hotuna alama ta abun ciki.

Don ƙirƙirar alamun Docker, ba Git primitives (reshen Git, Git tag...) ake amfani da su ba, amma ƙididdigar da ke da alaƙa da:

  • abinda ke cikin hoton. Tambarin ID na hoton yana nuna abun ciki. Lokacin gina sabon siga, wannan mai ganowa ba zai canza ba idan fayilolin da ke cikin hoton ba su canza ba;
  • tarihin ƙirƙirar wannan hoton a Git. Hotunan da ke da alaƙa da rassan Git daban-daban da tarihin gini daban-daban ta hanyar werf za su sami alamun ID daban-daban.

Irin wannan alamar mai ganowa shine abin da ake kira sa hannun matakin hoto.

Kowane hoto ya ƙunshi saitin matakai: from, before-install, git-archive, install, imports-after-install, before-setup... git-latest-patch da dai sauransu. Kowane mataki yana da mai ganowa wanda ke nuna abinda ke cikinsa - sa hannun mataki (sa hannun mataki).

Hoton ƙarshe, wanda ya ƙunshi waɗannan matakan, an yi masa alama tare da abin da ake kira sa hannu na saitin waɗannan matakan - sa hannun matakai, - wanda ke gabaɗaya ga duk matakan hoton.

Ga kowane hoto daga tsari werf.yaml a cikin yanayin gabaɗaya, za a sami sa hannun sa kuma, bisa ga haka, alamar Docker.

Sa hannun matakin yana magance duk waɗannan matsalolin:

  • Mai jure wa komai Git aikata.
  • Mai tsayayya ga Git yana yin canjin fayilolin da basu dace da hoton ba.
  • Baya haifar da matsalar sake fasalin fasalin hoton na yanzu lokacin sake kunna ginin don tsohon Git na reshe.

Wannan yanzu shine dabarar sanya alamar da aka ba da shawarar kuma shine tsoho a cikin werf ga duk tsarin CI.

Yadda ake kunnawa da amfani da werf

Umurnin yanzu yana da zaɓi mai dacewa werf publish: --tag-by-stages-signature=true|false

A cikin tsarin CI, an ƙayyade dabarun sawa ta hanyar umarni werf ci-env. A baya can, an bayyana siga don shi werf ci-env --tagging-strategy=tag-or-branch. Yanzu, idan kun saka werf ci-env --tagging-strategy=stages-signature ko kar a saka wannan zaɓi, werf zai yi amfani da dabarar tagging ta tsohuwa stages-signature. Tawaga werf ci-env za ta saita tutocin da suka dace don umarnin ta atomatik werf build-and-publish (ko werf publish), don haka babu ƙarin zaɓuɓɓuka da ke buƙatar bayyanawa don waɗannan umarni.

Misali, umarnin:

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

...zai iya ƙirƙirar hotuna masu zuwa:

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

Yana da 4ef339f84ca22247f01fb335bb19f46c4434014d8daa3d5d6f0e386d sa hannu ne na matakan hoton backendda kuma f44206457e0a4c8a54655543f749799d10a9fe945896dab1c16996c6 - sa hannun matakan hoto frontend.

Lokacin amfani da ayyuka na musamman werf_container_image и werf_container_env Babu buƙatar canza wani abu a cikin samfuran Helm: waɗannan ayyukan za su haifar da ainihin sunayen hoto ta atomatik.

Tsarin misali a cikin tsarin CI:

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

Ana samun ƙarin bayani kan daidaitawa a cikin takaddun:

Jimlar

  • Sabon zaɓi werf publish --tag-by-stages-signature=true|false.
  • Sabuwar ƙimar zaɓi werf ci-env --tagging-strategy=stages-signature|tag-or-branch (idan ba a bayyana ba, tsoho zai kasance stages-signature).
  • Idan a baya kun yi amfani da zaɓuɓɓukan alamar alama don Git aikata (WERF_TAG_GIT_COMMIT ko zabi werf publish --tag-git-commit COMMIT), sa'an nan kuma tabbatar da canzawa zuwa dabarar tagging matakai-sa hannu.
  • Yana da kyau a canza sabbin ayyuka nan da nan zuwa sabon tsarin tagging.
  • Lokacin canja wurin zuwa werf 1.1, yana da kyau a canza tsoffin ayyukan zuwa sabon tsarin tagging, amma tsohon. tag-ko-reshe har yanzu ana tallafawa.

Alamar tushen abun ciki tana magance duk matsalolin da aka rufe cikin labarin:

  • Docker alamar sunan juriya ga komai Git yayi.
  • Juriya na sunan alamar Docker zuwa Git ya aikata cewa canza fayilolin da basu da alaƙa da hoton.
  • Ba ya haifar da matsalar sake fasalin fasalin hoton na yanzu lokacin da aka sake farawa gini don tsohon Git ya yi wa rassan Git.

Yi amfani da shi! Kuma kar ku manta ku ziyarce mu a GitHubdon ƙirƙirar al'amari ko nemo wani data kasance, ƙara ƙari, ƙirƙirar PR ko kawai kallon ci gaban aikin.

PS

Karanta kuma a kan shafinmu:

source: www.habr.com

Add a comment