It-tikkettar ibbażat fuq il-kontenut fil-kollettur tal-werf: għaliex u kif jaħdem?

It-tikkettar ibbażat fuq il-kontenut fil-kollettur tal-werf: għaliex u kif jaħdem?

werf hija l-utilità CLI GitOps ta’ sors miftuħ tagħna għall-bini u l-kunsinna ta’ applikazzjonijiet lil Kubernetes. IN rilaxx v1.1 ġiet introdotta karatteristika ġdida fil-kollettur tal-immaġini: it-tikkettar tal-immaġini skont il-kontenut jew tikkettjar ibbażat fuq il-kontenut. Sa issa, l-iskema ta 'tikkettar tipika fil-werf kienet tinvolvi t-tikkettar ta' immaġini Docker permezz ta 'tikketta Git, fergħa Git jew Git commit. Iżda dawn l-iskemi kollha għandhom żvantaġġi li huma kompletament solvuti mill-istrateġija l-ġdida ta 'tagging. Dettalji dwarha u għaliex hija daqshekk tajba huma taħt il-qatgħa.

It-tnedija ta' sett ta' mikroservizzi minn repożitorju Git wieħed

Sitwazzjoni ta' spiss isseħħ meta applikazzjoni tinqasam f'ħafna servizzi bejn wieħed u ieħor indipendenti. Rilaxxi ta' dawn is-servizzi jistgħu jseħħu b'mod indipendenti: servizz wieħed jew aktar jistgħu jiġu rilaxxati kull darba, filwaqt li l-bqija jridu jkomplu jaħdmu mingħajr ebda tibdil. Iżda mil-lat tal-ħażna tal-kodiċi u l-ġestjoni tal-proġett, huwa aktar konvenjenti li jinżammu tali servizzi ta 'applikazzjoni f'repożitorju wieħed.

Hemm sitwazzjonijiet meta s-servizzi huma tassew indipendenti u mhux assoċjati ma' applikazzjoni waħda. F'dan il-każ, se jkunu jinsabu fi proġetti separati u r-rilaxx tagħhom se jitwettaq permezz ta 'proċessi CI/CD separati f'kull wieħed mill-proġetti.

Madankollu, fir-realtà, l-iżviluppaturi ħafna drabi jaqsmu applikazzjoni waħda f'diversi mikroservizzi, iżda l-ħolqien ta 'repożitorju u proġett separat għal kull wieħed... huwa overkill ċar. Hija din is-sitwazzjoni li se tiġi diskussa aktar: diversi mikroservizzi bħal dawn jinsabu f'repożitorju tal-proġett wieħed u r-rilaxxi jseħħu permezz ta 'proċess wieħed f'CI/CD.

Tagging mill-fergħa Git u tikketta Git

Ejja ngħidu li tintuża l-aktar strateġija ta' tikkettar komuni - tag-jew fergħa. Għall-fergħat Git, l-immaġini huma mmarkati bl-isem tal-fergħa, għal fergħa waħda kull darba hemm immaġini ppubblikata waħda biss bl-isem ta 'dik il-fergħa. Għal tikketti Git, l-immaġini huma mmarkati skont l-isem tat-tikketta.

Meta tinħoloq tikketta Git ġdida—per eżempju, meta tiġi rilaxxata verżjoni ġdida—tikketta Docker ġdida tinħoloq għall-immaġini kollha tal-proġett fir-Reġistru 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

Dawn l-ismijiet tal-immaġini ġodda jgħaddu minn mudelli Helm għall-konfigurazzjoni Kubernetes. Meta tibda l-iskjerament bil-kmand werf deploy qasam qed jiġi aġġornat image fil-manifesti tar-riżorsi Kubernetes u terġa 'tibda r-riżorsi korrispondenti minħabba l-isem tal-immaġni mibdul.

problema: fil-każ meta, fil-fatt, il-kontenut tal-immaġni ma nbidilx mit-tnedija preċedenti (it-tikketta Git), iżda biss it-tikketta Docker tagħha, dan jiġri extra terġa 'tibda din l-applikazzjoni u, għaldaqstant, xi ħin ta' waqfien huwa possibbli. Għalkemm ma kien hemm l-ebda raġuni reali biex twettaq dan il-bidu mill-ġdid.

B'riżultat ta 'dan, bl-iskema ta' tikkettjar attwali huwa meħtieġ li jiġu fencetta diversi repożitorji Git separati u tqum il-problema li jiġi organizzat it-tnedija ta 'dawn id-diversi repożitorji. B'mod ġenerali, skema bħal din tirriżulta li hija mgħobbija żżejjed u kumplessa. Huwa aħjar li tgħaqqad ħafna servizzi f'repożitorju wieħed u toħloq tags Docker sabiex ma jkunx hemm bidu mill-ġdid bla bżonn.

Immarkar minn Git commit

werf għandu wkoll strateġija ta 'tagging assoċjata ma' Git commits.

Git-commit huwa identifikatur għall-kontenut ta 'repożitorju Git u jiddependi fuq l-istorja tal-editjar tal-fajls fir-repożitorju Git, għalhekk jidher loġiku li tużah għat-tikkettar ta' immaġini fir-Reġistru Docker.

Madankollu, it-tikkettar minn Git commit għandu l-istess żvantaġġi bħall-immarkar minn fergħat Git jew tikketti Git:

  • Jista 'jinħoloq impenn vojt li ma jbiddel l-ebda fajl, iżda t-tikketta Docker tal-immaġni se tinbidel.
  • Jista 'jinħoloq kommit ta' amalgamazzjoni li ma jbiddilx il-fajls, iżda t-tikketta Docker tal-immaġni se tinbidel.
  • Jista 'jsir impenn li jibdel dawk il-fajls f'Git li mhumiex importati fl-immaġini, u t-tikketta Docker tal-immaġni se terġa' tinbidel.

It-tikkettar tal-isem tal-fergħa Git ma jirriflettix il-verżjoni tal-immaġni

Hemm problema oħra assoċjata mal-istrateġija ta 'tagging għall-fergħat Git.

It-tikkettar bl-isem tal-fergħa jaħdem sakemm il-commits fuq dik il-fergħa jinġabru sekwenzjali f'ordni kronoloġika.

Jekk fl-iskema attwali l-utent jibda jibni mill-ġdid impenn antik assoċjat ma 'ċerta fergħa, allura werf jerġa' jikteb l-immaġni billi juża t-tikketta Docker korrispondenti b'verżjoni mibnija ġdida tal-immaġni għall-kommit l-antik. Skjeramenti li jużaw din it-tikketta minn issa 'l quddiem għandhom ir-riskju li jiġbdu verżjoni differenti tal-immaġni meta jerġgħu jibdew il-miżwed, b'riżultat ta' dan l-applikazzjoni tagħna titlef il-konnessjoni mas-sistema CI u ssir desinkronizzata.

Barra minn hekk, b'impulsi suċċessivi f'fergħa waħda b'perjodu qasir ta 'żmien bejniethom, il-kommit l-antik jista' jiġi kkompilat aktar tard minn dak l-aktar ġdid: il-verżjoni l-qadima tal-immaġni se tikteb fuqha dik il-ġdida billi tuża t-tikketta tal-fergħa Git. Problemi bħal dawn jistgħu jiġu solvuti b'sistema CI/CD (per eżempju, f'GitLab CI il-pipeline ta 'dan tal-aħħar huwa mniedi għal serje ta' impenji). Madankollu, mhux is-sistemi kollha jappoġġjaw dan u għandu jkun hemm mod aktar affidabbli biex tiġi evitata problema fundamentali bħal din.

X'inhu t-tikkettar ibbażat fuq il-kontenut?

Allura, x'inhu t-tikkettar ibbażat fuq il-kontenut - it-tikkettar tal-immaġini skont il-kontenut.

Biex jinħolqu tags Docker, mhumiex primittivi Git (fergħa Git, tag Git...) li jintużaw, iżda checksum assoċjat ma':

  • kontenut tal-immaġni. It-tikketta tal-ID tal-immaġni tirrifletti l-kontenut tagħha. Meta tibni verżjoni ġdida, dan l-identifikatur mhux se jinbidel jekk il-fajls fl-immaġni ma nbidlux;
  • istorja tal-ħolqien ta 'din l-immaġni f'Git. Immaġini assoċjati ma 'fergħat Git differenti u storja ta' bini differenti permezz ta 'werf se jkollhom tikketti ta' ID differenti.

Tali tikketta identifikatur hija l-hekk imsejħa firma tal-istadju tal-immaġni.

Kull immaġini tikkonsisti f'sett ta' stadji: from, before-install, git-archive, install, imports-after-install, before-setup, ... git-latest-patch eċċ. Kull stadju għandu identifikatur li jirrifletti l-kontenut tiegħu − firma tal-palk (firma tal-palk).

L-immaġni finali, li tikkonsisti minn dawn l-istadji, hija mmarkata bl-hekk imsejħa firma tas-sett ta 'dawn l-istadji - stadji firma, - li qed tiġġeneralizza għall-istadji kollha tal-immaġni.

Għal kull immaġini mill-konfigurazzjoni werf.yaml fil-każ ġenerali, se jkun hemm il-firma tagħha stess u, għaldaqstant, tag Docker.

Il-firma tal-istadju ssolvi dawn il-problemi kollha:

  • Reżistenti għall-impenji Git vojta.
  • Resistant to Git jimpenja li jibdlu fajls li mhumiex rilevanti għall-immaġni.
  • Ma jwassalx għall-problema ta 'reviżjoni tal-verżjoni attwali ta' l-immaġini meta terġa 'tibda l-bini għal impenji Git qodma ta' fergħa.

Din issa hija l-istrateġija ta' tikkettjar rakkomandata u hija l-awtomatika fil-werf għas-sistemi CI kollha.

Kif tattiva u tuża fil-werf

Il-kmand issa għandu għażla korrispondenti werf publish: --tag-by-stages-signature=true|false

F'sistema CI, l-istrateġija tat-tikkettar hija speċifikata mill-kmand werf ci-env. Preċedentement, il-parametru kien definit għalih werf ci-env --tagging-strategy=tag-or-branch. Issa, jekk tispeċifika werf ci-env --tagging-strategy=stages-signature jew ma tispeċifikax din l-għażla, werf se juża l-istrateġija tat-tikkettar awtomatikament stages-signature. Tim werf ci-env awtomatikament se jistabbilixxi l-bnadar meħtieġa għall-kmand werf build-and-publish (Jew werf publish), għalhekk m'hemmx bżonn li jiġu speċifikati għażliet addizzjonali għal dawn il-kmandi.

Per eżempju, il-kmand:

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

...jista 'joħloq l-immaġini li ġejjin:

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

Hawnhekk 4ef339f84ca22247f01fb335bb19f46c4434014d8daa3d5d6f0e386d hija firma tal-istadji tal-immaġni backendU f44206457e0a4c8a54655543f749799d10a9fe945896dab1c16996c6 - firma tal-istadji tal-immaġini frontend.

Meta tuża funzjonijiet speċjali werf_container_image и werf_container_env M'hemm l-ebda ħtieġa li tinbidel xejn fil-mudelli Helm: dawn il-funzjonijiet awtomatikament jiġġeneraw l-ismijiet tal-immaġni korretti.

Eżempju ta' konfigurazzjoni f'sistema CI:

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

Aktar informazzjoni dwar il-konfigurazzjoni hija disponibbli fid-dokumentazzjoni:

B'kollox

  • Għażla ġdida werf publish --tag-by-stages-signature=true|false.
  • Valur tal-għażla ġdida werf ci-env --tagging-strategy=stages-signature|tag-or-branch (jekk mhux speċifikat, in-nuqqas se jkun stages-signature).
  • Jekk qabel użajt l-għażliet ta' tikkettjar għal Git commits (WERF_TAG_GIT_COMMIT jew għażla werf publish --tag-git-commit COMMIT), imbagħad kun żgur li taqleb għall-istrateġija tat-tikkettar stadji-firma.
  • Huwa aħjar li immedjatament taqleb proġetti ġodda għall-iskema l-ġdida ta 'tagging.
  • Meta tittrasferixxi għal werf 1.1, huwa rakkomandabbli li taqleb proġetti qodma għall-iskema ta 'tikkettar il-ġdida, iżda l-antika tag-jew fergħa għadu appoġġjat.

It-tikkettar ibbażat fuq il-kontenut isolvi l-problemi kollha koperti fl-artikolu:

  • Reżistenza tal-isem tat-tikketta Docker għal impenji Git vojta.
  • Ir-reżiljenza tal-isem tat-tikketta Docker għal Git timpenja li l-fajls tal-bidla irrilevanti għall-immaġni.
  • Ma jwassalx għall-problema ta 'reviżjoni tal-verżjoni attwali ta' l-immaġini meta terġa 'tibda builds għal impenji Git qodma għall-fergħat Git.

Użaha! U tinsiex iżżurna fuq GitHubbiex toħloq kwistjoni jew issib waħda eżistenti, żid plus, toħloq PR jew sempliċement tara l-iżvilupp tal-proġett.

PS

Aqra wkoll fuq il-blog tagħna:

Sors: www.habr.com

Żid kumment