Ifi aami-orisun akoonu ni olugba werf: kilode ati bawo ni o ṣe n ṣiṣẹ?

Ifi aami-orisun akoonu ni olugba werf: kilode ati bawo ni o ṣe n ṣiṣẹ?

werf jẹ orisun ṣiṣi wa GitOps IwUlO CLI fun kikọ ati jiṣẹ awọn ohun elo si Kubernetes. IN tu v1.1 ẹya tuntun kan ti ṣe afihan ni olugba aworan: fifi aami si awọn aworan nipasẹ akoonu tabi akoonu-orisun tagging. Titi di bayi, ero fifi aami si aṣoju ni werf kan pẹlu fifi aami le awọn aworan Docker nipasẹ Git tag, ẹka Git tabi Git ṣẹ. Ṣugbọn gbogbo awọn ero wọnyi ni awọn aila-nfani ti o jẹ ipinnu patapata nipasẹ ilana fifi aami si tuntun. Awọn alaye nipa rẹ ati idi ti o fi dara julọ wa labẹ gige.

Yiyi ṣeto awọn iṣẹ microservices lati ibi ipamọ Git kan

Ipo kan nigbagbogbo waye nigbati ohun elo ba pin si ọpọlọpọ diẹ sii tabi kere si awọn iṣẹ ominira. Awọn idasilẹ ti awọn iṣẹ wọnyi le waye ni ominira: ọkan tabi diẹ sii awọn iṣẹ le ṣe idasilẹ ni akoko kan, lakoko ti iyoku gbọdọ tẹsiwaju lati ṣiṣẹ laisi awọn ayipada eyikeyi. Ṣugbọn lati oju wiwo ti ipamọ koodu ati iṣakoso ise agbese, o rọrun diẹ sii lati tọju iru awọn iṣẹ ohun elo ni ibi ipamọ kan.

Awọn ipo wa nigbati awọn iṣẹ jẹ ominira nitootọ ati pe ko ni nkan ṣe pẹlu ohun elo ẹyọkan. Ni ọran yii, wọn yoo wa ni awọn iṣẹ akanṣe lọtọ ati idasilẹ wọn yoo ṣee ṣe nipasẹ awọn ilana CI / CD lọtọ ni awọn iṣẹ akanṣe kọọkan.

Bibẹẹkọ, ni otitọ, awọn olupilẹṣẹ nigbagbogbo pin ohun elo kan si ọpọlọpọ awọn iṣẹ microservices, ṣugbọn ṣiṣẹda ibi-ipamọ lọtọ ati iṣẹ akanṣe fun ọkọọkan… jẹ iwọn apọju. O jẹ ipo yii ti yoo jiroro siwaju sii: ọpọlọpọ awọn iru awọn microservices wa ni ibi ipamọ iṣẹ akanṣe kan ati awọn idasilẹ waye nipasẹ ilana kan ni CI / CD.

Iforukọsilẹ nipasẹ ẹka Git ati tag Git

Jẹ ki a sọ pe ilana fifi aami le wọpọ julọ ni a lo - tag-tabi-ẹka. Fun awọn ẹka Git, awọn aworan ni a samisi pẹlu orukọ ẹka, fun ẹka kan ni akoko kan aworan kan ṣoṣo ti a gbejade nipasẹ orukọ ẹka yẹn. Fun awọn afi Git, awọn aworan jẹ aami ni ibamu si orukọ tag.

Nigbati aami Git tuntun ba ṣẹda — fun apẹẹrẹ, nigbati ẹya tuntun ba ti tu silẹ — aami Docker tuntun yoo ṣẹda fun gbogbo awọn aworan iṣẹ akanṣe ni Iforukọsilẹ 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

Awọn orukọ aworan tuntun wọnyi kọja nipasẹ awọn awoṣe Helm si iṣeto Kubernetes. Nigbati o ba bẹrẹ imuṣiṣẹ pẹlu aṣẹ werf deploy aaye ti wa ni imudojuiwọn image ni awọn orisun Kubernetes ṣafihan ati tun bẹrẹ awọn orisun ti o baamu nitori orukọ aworan ti o yipada.

Isoro: ninu ọran nigbati, ni otitọ, awọn akoonu ti aworan ko yipada lati igba ti tẹlẹ yipo (Tag Git), ṣugbọn aami Docker nikan, eyi ṣẹlẹ afikun tun bẹrẹ ohun elo yii ati, ni ibamu, diẹ ninu akoko idaduro jẹ ṣeeṣe. Botilẹjẹpe ko si idi gidi lati ṣe atunbere yii.

Gẹgẹbi abajade, pẹlu ero fifi aami si lọwọlọwọ o jẹ dandan lati ṣe odi ọpọlọpọ awọn ibi ipamọ Git lọtọ ati iṣoro naa dide ti siseto yiyi ti awọn ibi ipamọ pupọ wọnyi. Ni gbogbogbo, iru ero yii yoo jade lati jẹ apọju ati eka. O dara lati darapo ọpọlọpọ awọn iṣẹ sinu ibi ipamọ ẹyọkan ati ṣẹda awọn aami Docker ki ko si awọn atunbere ti ko wulo.

Ifi aami nipasẹ Git ṣẹ

werf tun ni ilana fifi aami si ni nkan ṣe pẹlu awọn iṣẹ Git.

Git-commit jẹ idanimọ fun awọn akoonu ti ibi ipamọ Git kan ati pe o da lori itan-akọọlẹ ti awọn faili ni ibi ipamọ Git, nitorinaa o dabi ọgbọn lati lo fun fifi aami si awọn aworan ni iforukọsilẹ Docker.

Sibẹsibẹ, fifi aami si nipasẹ Git ṣẹ ni awọn aila-nfani kanna bi fifi aami si nipasẹ awọn ẹka Git tabi awọn afi Git:

  • Iṣe ofo le ṣee ṣẹda ti ko yi awọn faili eyikeyi pada, ṣugbọn aami Docker ti aworan naa yoo yipada.
  • Ifarapọ idapọ le ṣee ṣẹda ti ko yi awọn faili pada, ṣugbọn aami Docker ti aworan naa yoo yipada.
  • Iṣe kan le ṣe ti o yi awọn faili wọnyẹn pada ni Git ti ko gbe wọle si aworan naa, ati aami Docker ti aworan naa yoo yipada lẹẹkansi.

Ifi aami si orukọ ẹka Git ko ṣe afihan ẹya aworan

Iṣoro miiran wa ti o ni nkan ṣe pẹlu ilana fifi aami si fun awọn ẹka Git.

Ifiṣamisi nipasẹ orukọ ẹka n ṣiṣẹ niwọn igba ti awọn iṣẹ ti o wa lori ẹka yẹn ni a kojọ ni ọkọọkan ni ilana akoko.

Ti o ba wa ninu ero lọwọlọwọ olumulo naa bẹrẹ atunkọ adehun atijọ ti o ni nkan ṣe pẹlu ẹka kan, lẹhinna werf yoo tun aworan naa kọ nipa lilo aami Docker ti o baamu pẹlu ẹya tuntun ti aworan ti a ṣe fun adehun atijọ. Awọn imuṣiṣẹ lilo aami yii lati igba bayi lọ ṣiṣe eewu ti fifa ẹya ti o yatọ ti aworan naa nigbati o tun bẹrẹ awọn adarọ-ese, nitori abajade eyiti ohun elo wa yoo padanu asopọ pẹlu eto CI ati di mimuuṣiṣẹpọ.

Ni afikun, pẹlu awọn titari ti o tẹle si ẹka kan pẹlu akoko kukuru kan laarin wọn, adehun atijọ le ṣe akopọ nigbamii ju eyi tuntun lọ: ẹya atijọ ti aworan naa yoo tun kọ tuntun naa ni lilo tag ẹka Git. Iru awọn iṣoro bẹ le ṣee yanju nipasẹ eto CI/CD (fun apẹẹrẹ, ni GitLab CI opo gigun ti epo ti igbehin ti ṣe ifilọlẹ fun lẹsẹsẹ awọn iṣe). Sibẹsibẹ, kii ṣe gbogbo awọn eto ṣe atilẹyin eyi ati pe o gbọdọ jẹ ọna igbẹkẹle diẹ sii lati ṣe idiwọ iru iṣoro ipilẹ kan.

Kini fifi aami si akoonu?

Nitorinaa, kini fifi aami si akoonu - fifi aami si awọn aworan nipasẹ akoonu.

Lati ṣẹda awọn taagi Docker, kii ṣe Git primitives (ẹka Git, tag Git...) ni a lo, ṣugbọn sọwedowo ti o ni nkan ṣe pẹlu:

  • awọn akoonu ti aworan. Aami ID aworan ṣe afihan akoonu rẹ. Nigbati o ba n kọ ẹya tuntun, idamo yii kii yoo yipada ti awọn faili ti o wa ninu aworan ko ba yipada;
  • itan-akọọlẹ ṣiṣẹda aworan yii ni Git. Awọn aworan ti o ni nkan ṣe pẹlu awọn ẹka Git oriṣiriṣi ati itan-akọọlẹ ti o yatọ nipasẹ werf yoo ni awọn ami idanimọ oriṣiriṣi.

Iru aami idamo bẹ ni ohun ti a npe ni Ibuwọlu ipele image.

Aworan kọọkan ni akojọpọ awọn ipele: from, before-install, git-archive, install, imports-after-install, before-setup, ... git-latest-patch ati be be lo. Ipele kọọkan ni idanimọ ti o ṣe afihan awọn akoonu rẹ - Ibuwọlu ipele (ibuwọlu ipele).

Aworan ti o kẹhin, ti o ni awọn ipele wọnyi, jẹ aami pẹlu ohun ti a pe ni ibuwọlu ti ṣeto awọn ipele wọnyi - Ibuwọlu awọn ipele, - eyiti o jẹ gbogbogbo fun gbogbo awọn ipele ti aworan naa.

Fun kọọkan aworan lati iṣeto ni werf.yaml ninu ọran gbogbogbo, ibuwọlu tirẹ yoo wa ati, ni ibamu, aami Docker kan.

Ibuwọlu ipele yanju gbogbo awọn iṣoro wọnyi:

  • Sooro si awọn iṣẹ Git ofo.
  • Sooro si Git ṣe pe o yi awọn faili ti ko ṣe pataki si aworan naa.
  • Ko yori si iṣoro ti ṣiṣatunṣe ẹya lọwọlọwọ ti aworan naa nigbati o tun bẹrẹ awọn kọ fun awọn iṣẹ Git atijọ ti ẹka kan.

Eyi ni imọran fifi aami si ni iṣeduro ati pe o jẹ aiyipada ni werf fun gbogbo awọn eto CI.

Bii o ṣe le mu ṣiṣẹ ati lo ninu werf

Aṣẹ ni bayi ni aṣayan ti o baamu werf publish: --tag-by-stages-signature=true|false

Ninu eto CI kan, ilana fifi aami le jẹ pato nipasẹ aṣẹ werf ci-env. Ni iṣaaju, a ti ṣalaye paramita fun rẹ werf ci-env --tagging-strategy=tag-or-branch. Bayi, ti o ba pato werf ci-env --tagging-strategy=stages-signature tabi maṣe pato aṣayan yii, werf yoo lo ilana fifi aami si nipasẹ aiyipada stages-signature. Egbe werf ci-env yoo ṣeto awọn asia pataki fun pipaṣẹ laifọwọyi werf build-and-publish (tabi werf publish), nitorina ko si awọn aṣayan afikun nilo lati wa ni pato fun awọn aṣẹ wọnyi.

Fun apẹẹrẹ, aṣẹ naa:

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

O le ṣẹda awọn aworan wọnyi:

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

o ti wa ni 4ef339f84ca22247f01fb335bb19f46c4434014d8daa3d5d6f0e386d jẹ ibuwọlu ti awọn ipele ti aworan naa backend, ati f44206457e0a4c8a54655543f749799d10a9fe945896dab1c16996c6 - Ibuwọlu ti awọn ipele aworan frontend.

Nigba lilo pataki awọn iṣẹ werf_container_image и werf_container_env Ko si iwulo lati yi ohunkohun pada ninu awọn awoṣe Helm: awọn iṣẹ wọnyi yoo ṣe ina awọn orukọ aworan ti o pe laifọwọyi.

Iṣeto apẹẹrẹ ni eto CI kan:

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

Alaye diẹ sii lori iṣeto ni wa ninu iwe:

Lapapọ

  • Aṣayan tuntun werf publish --tag-by-stages-signature=true|false.
  • Titun aṣayan iye werf ci-env --tagging-strategy=stages-signature|tag-or-branch (ti ko ba pato, aiyipada yoo jẹ stages-signature).
  • Ti o ba lo awọn aṣayan fifi aami si tẹlẹ fun awọn iṣẹ Git (WERF_TAG_GIT_COMMIT tabi aṣayan werf publish --tag-git-commit COMMIT), lẹhinna rii daju lati yipada si ilana fifi aami si awọn ipele-ibuwọlu.
  • O dara lati yipada lẹsẹkẹsẹ awọn iṣẹ akanṣe si ero fifi aami si tuntun.
  • Nigbati o ba n gbe lọ si werf 1.1, o ni imọran lati yipada awọn iṣẹ akanṣe atijọ si ero fifi aami si tuntun, ṣugbọn atijọ tag-tabi-ẹka tun ni atilẹyin.

Ifi aami si akoonu yanju gbogbo awọn iṣoro ti o bo ninu nkan naa:

  • Docker tag orukọ resistance si awọn iṣẹ Git ofo.
  • Resilience ti orukọ tag Docker si Git ṣe iyipada awọn faili ti ko ṣe pataki si aworan naa.
  • Ko yori si iṣoro ti ṣiṣatunṣe ẹya lọwọlọwọ ti aworan naa nigbati o tun bẹrẹ awọn kọ fun awọn iṣẹ Git atijọ fun awọn ẹka Git.

Lo o! Ki o si ma ṣe gbagbe lati be wa ni GitHublati ṣẹda ọrọ kan tabi wa ohun ti o wa tẹlẹ, ṣafikun afikun kan, ṣẹda PR tabi nirọrun wo idagbasoke iṣẹ akanṣe naa.

PS

Ka tun lori bulọọgi wa:

orisun: www.habr.com

Fi ọrọìwòye kun