Famaritana mifototra amin'ny votoaty ao amin'ny mpanangona werf: nahoana ary amin'ny fomba ahoana no miasa?

Famaritana mifototra amin'ny votoaty ao amin'ny mpanangona werf: nahoana ary amin'ny fomba ahoana no miasa?

werf dia loharano misokatra GitOps CLI ho an'ny fananganana sy fandefasana rindranasa amin'ny Kubernetes. IN famoahana v1.1 Nisy endri-javatra vaovao nampidirina tao amin'ny mpanangona sary: ​​fametahana sary amin'ny atiny na famandrihana mifototra amin'ny atiny. Hatramin'izao, ny rafitra fametahana mahazatra ao amin'ny werf dia nahitana fametahana sary Docker amin'ny alàlan'ny Git tag, sampana Git na Git commit. Saingy ireo tetika rehetra ireo dia manana fatiantoka izay voavaha tanteraka amin'ny paikady fametahana vaovao. Ny antsipiriany momba izany sy ny antony maha-tsara azy dia eo ambany fanapahana.

Mamoaka andiana microservice avy amin'ny tahiry Git iray

Matetika ny toe-javatra iray no mitranga rehefa mizara ho tolotra mahaleo tena bebe kokoa na latsaka ny fampiharana iray. Ny famoahana ireo tolotra ireo dia mety hitranga tsy miankina: serivisy iray na maromaro dia azo avoaka amin'ny fotoana iray, fa ny ambiny dia tsy maintsy manohy miasa tsy misy fiovana. Saingy raha jerena ny fitahirizana kaody sy ny fitantanana ny tetikasa, dia mora kokoa ny mitazona serivisy fampiharana toy izany ao anaty tahiry tokana.

Misy toe-javatra izay tena mahaleo tena ny serivisy ary tsy mifandray amin'ny fampiharana tokana. Amin'ity tranga ity dia ho hita ao amin'ny tetikasa samihafa izy ireo ary ny famoahana azy ireo dia hatao amin'ny alàlan'ny fizotry ny CI/CD misaraka amin'ny tetikasa tsirairay.

Na izany aza, raha ny tena izy dia matetika no mizara fampiharana tokana ho microservices maromaro ny mpamorona, fa ny famoronana tahiry manokana sy tetikasa ho an'ny tsirairay ... Ity toe-javatra ity no horesahina bebe kokoa: microservices maromaro toy izany no hita ao amin'ny tahiry tetikasa tokana ary ny famoahana dia mitranga amin'ny alàlan'ny dingana tokana ao amin'ny CI/CD.

Tagging amin'ny sampana Git sy Git tag

Andao atao hoe ny paikadin'ny fametahana matetika indrindra no ampiasaina - tag-na-sampana. Ho an'ny sampana Git, ny sary dia asiana marika amin'ny anaran'ny sampana, ho an'ny sampana iray isaky ny mandeha dia tsy misy afa-tsy sary iray navoaka amin'ny anaran'io sampana io. Ho an'ny Git tags, ny sary dia nasiana marika araka ny anaran'ny tag.

Rehefa misy tenifototra Git vaovao noforonina-ohatra, rehefa mivoaka ny dikan-teny vaovao-dia hisy tenifototra Docker vaovao ho noforonina ho an'ny sary tetikasa rehetra ao amin'ny Docker 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

Ireo anarana sary vaovao ireo dia ampitaina amin'ny maodely Helm mankany amin'ny config Kubernetes. Rehefa manomboka ny fametrahana amin'ny baiko werf deploy havaozina ny saha image ao amin'ny loharanon-karena Kubernetes dia maneho sy mamerina ny loharano mifanaraka amin'izany noho ny anaran'ny sary niova.

olana: raha ny marina, ny votoatin'ny sary dia tsy niova hatramin'ny famoahana teo aloha (Git tag), fa ny tag Docker ihany no mitranga. FANALAVAM avereno indray ity fampiharana ity ary, araka izany, dia mety hisy fiatoana sasany. Na dia tsy misy antony marina hanaovana an'io famerenana io aza.

Vokatr'izany, miaraka amin'ny rafitra fametahana amin'izao fotoana izao dia ilaina ny fefy trano fitehirizam-bokatra Git maromaro ary mipoitra ny olana amin'ny fandaminana ny famoahana ireo tahiry maromaro ireo. Amin'ny ankapobeny, ny tetika toy izany dia miseho ho be loatra sy sarotra. Tsara kokoa ny manambatra serivisy maro ao anaty tahiry tokana ary mamorona marika Docker mba tsy hisy famerenana tsy ilaina.

Tagging amin'ny Git commit

Werf koa dia manana paikady fametahana marika mifandraika amin'ny Git commits.

Ny Git-commit dia famantarana ny votoatin'ny tahiry Git ary miankina amin'ny tantaran'ny fanovana ny rakitra ao amin'ny tahiry Git, ka toa mitombina ny fampiasana azy io amin'ny fametahana sary ao amin'ny Docker Registry.

Na izany aza, ny fametahana amin'ny Git commit dia manana fatiantoka mitovy amin'ny fametahana ny sampana Git na Git tags:

  • Azo atao ny mamorona commit tsy misy fanovana, fa ny tag Docker amin'ny sary dia hovana.
  • Mety ho noforonina ny merge commit izay tsy manova ny rakitra, fa ny tag Docker amin'ny sary dia hovana.
  • Azo atao ny commit izay manova ireo rakitra ao amin'ny Git izay tsy ampidirina ao amin'ny sary, ary ny tag Docker amin'ny sary dia hovana indray.

Ny fametahana ny anaran'ny sampana Git dia tsy maneho ny dikan-tsary

Misy olana hafa mifandraika amin'ny paikady fametahana ho an'ny sampana Git.

Ny fanisana anarana amin'ny anaran'ny sampana dia miasa raha toa ka voaangona araka ny filaharan'ny fotoana ny commit amin'io sampana io.

Raha amin'ny drafitra ankehitriny ny mpampiasa dia manomboka manangana fanekena taloha mifandray amin'ny sampana iray, dia haverin'i werf ny sary amin'ny alàlan'ny marika Docker mifanaraka amin'izany miaraka amin'ny dikan-tsary vao naorina ho an'ny fanolorana taloha. Ny fandefasana mampiasa an'io marika io manomboka izao dia mety hisintona dikan-tsary hafa rehefa manomboka ny pods, vokatr'izany dia ho very ny fifandraisana amin'ny rafitra CI ary ho lasa desynchronize ny fampiharana.

Ankoatr'izay, miaraka amin'ny fanosehana misesy ao amin'ny sampana iray miaraka amin'ny fotoana fohy eo anelanelan'izy ireo, ny commit taloha dia azo angonina aoriana kokoa noho ny vaovao: ny dikan-tsarimihetsika taloha dia hanodina ilay vaovao amin'ny alàlan'ny tag sampana Git. Ny olana toy izany dia azo voavaha amin'ny alàlan'ny rafitra CI/CD (ohatra, ao amin'ny GitLab CI ny fantsona farany dia natomboka ho an'ny andiana fanoloran-tena). Na izany aza, tsy ny rafitra rehetra no manohana izany ary tsy maintsy misy fomba azo antoka kokoa hisorohana ny olana fototra toy izany.

Inona no atao hoe fametahana votoaty?

Noho izany, inona ny fametahana votoaty - fametahana sary amin'ny atiny.

Mba hamoronana marika Docker dia tsy Git primitives (Git branch, Git tag...) no ampiasaina, fa checksum mifandray amin'ny:

  • ny votoatin'ny sary. Ny marika ID sary dia maneho ny atiny. Rehefa manangana dikan-teny vaovao dia tsy hiova io famantarana io raha tsy niova ny rakitra ao amin'ny sary;
  • tantaran'ny famoronana ity sary ity ao amin'ny Git. Ny sary mifandray amin'ny sampana Git samihafa sy ny tantaran'ny fananganana samihafa amin'ny alàlan'ny werf dia hanana marika ID samihafa.

Ny marika famantarana toy izany dia ilay antsoina hoe sonia sehatra sary.

Ny sary tsirairay dia misy dingana maromaro: from, before-install, git-archive, install, imports-after-install, before-setup, ... git-latest-patch Sns Ny dingana tsirairay dia manana famantarana izay maneho ny ao anatiny − sonia an-tsehatra (sonia an-tsehatra).

Ny sary farany, ahitana ireo dingana ireo, dia voamarika amin'ny antsoina hoe sonia an'ireo dingana ireo - dingana sonia, - izay manenika ny dingana rehetra amin'ny sary.

Ho an'ny sary tsirairay avy amin'ny fanamafisana werf.yaml Amin'ny tranga ankapobeny, hisy ny soniany manokana ary, araka izany, ny marika Docker.

Ny sonia an-tsehatra dia mamaha ireto olana rehetra ireto:

  • Mahatohitra ny fanafoanana ny Git commits.
  • Resistant to Git dia manolo-tena hanova ny rakitra tsy mifandraika amin'ny sary.
  • Tsy mitondra any amin'ny olana amin'ny fanavaozana ny dikan-tsary amin'izao fotoana izao rehefa mamerina ny fananganana ho an'ny sampana Git taloha.

Ity izao no paikadin'ny fametahana marika ary ny default amin'ny werf ho an'ny rafitra CI rehetra.

Ahoana ny fomba ahafahana sy mampiasa amin'ny werf

Ny baiko izao dia manana safidy mifanaraka amin'izany werf publish: --tag-by-stages-signature=true|false

Ao amin'ny rafitra CI, ny paikadin'ny fametahana dia voafaritry ny baiko werf ci-env. Teo aloha dia nofaritana ho azy ny paramètre werf ci-env --tagging-strategy=tag-or-branch. Ankehitriny, raha mamaritra ianao werf ci-env --tagging-strategy=stages-signature na aza mamaritra ity safidy ity, werf dia hampiasa ny paikadin'ny fametahana amin'ny alàlan'ny default stages-signature. Ekipa werf ci-env dia hametraka ho azy ny saina ilaina ho an'ny baiko werf build-and-publish (na werf publish), ka tsy misy safidy fanampiny tokony hofaritana ho an'ireo baiko ireo.

Ohatra, ny baiko:

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

...afaka mamorona ireto sary manaraka ireto:

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

izany 4ef339f84ca22247f01fb335bb19f46c4434014d8daa3d5d6f0e386d dia sonia ny dingan'ny sary backendary f44206457e0a4c8a54655543f749799d10a9fe945896dab1c16996c6 - sonia ny dingana sary frontend.

Rehefa mampiasa asa manokana werf_container_image и werf_container_env Tsy ilaina ny manova na inona na inona ao amin'ny maodely Helm: ireo fiasa ireo dia hamokatra ho azy ny anaran-tsary marina.

Configuration ohatra amin'ny rafitra CI:

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

Misy fampahalalana bebe kokoa momba ny fanamafisana azo jerena ao amin'ny antontan-taratasy:

Итого

  • Safidy vaovao werf publish --tag-by-stages-signature=true|false.
  • Sanda safidy vaovao werf ci-env --tagging-strategy=stages-signature|tag-or-branch (raha tsy voalaza, ny default dia ho stages-signature).
  • Raha nampiasa ny safidy fametahana ho an'ny Git commits ianao teo aloha (WERF_TAG_GIT_COMMIT na safidy werf publish --tag-git-commit COMMIT), dia ho azo antoka fa hifindra amin'ny paikadin'ny fametahana dingana-sonia.
  • Tsara kokoa ny manova avy hatrany ny tetikasa vaovao amin'ny rafitra fametahana vaovao.
  • Rehefa mamindra any amin'ny werf 1.1 dia tsara ny manova ny tetikasa taloha amin'ny rafitra fametahana vaovao, fa ny taloha tag-na-sampana mbola tohanana.

Ny fanindriana mifototra amin'ny atiny dia mamaha ny olana rehetra voarakitra ao amin'ny lahatsoratra:

  • Ny fanoherana ny anaran'ny docker amin'ny Git tsy misy dikany.
  • Ny faharetan'ny anaran'ny tag Docker amin'ny Git dia manova ny rakitra tsy misy ifandraisany amin'ny sary.
  • Tsy mitondra any amin'ny olana amin'ny fanavaozana ny dikan-tsary amin'izao fotoana izao rehefa manomboka ny fananganana ho an'ny Git taloha natao ho an'ny sampana Git.

Ampiasao io! Ary aza adino ny mitsidika anay amin'ny GitHubmba hamoronana olana na hitady efa misy, ampio fanampiny, mamorona PR na mijery fotsiny ny fivoaran'ny tetikasa.

Sal

Vakio ihany koa ao amin'ny bilaoginay:

Source: www.habr.com

Add a comment