ProHoster > blog > Amministrazzjoni > 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.
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:
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.