Барчасп кардани мундариҷа дар коллектори werf: чаро ва чӣ тавр он кор мекунад?

Барчасп кардани мундариҷа дар коллектори werf: чаро ва чӣ тавр он кор мекунад?

верф — утилитаи кушодаи GitOps CLI мо барои сохтан ва расонидани барномаҳо ба Kubernetes. барориши v1.1 Хусусияти нав дар созандаи тасвир ҷорӣ карда шуд: барчасп кардани тасвирҳо аз рӯи мундариҷа ё теги бар асоси мундариҷаТо ба ҳол, схемаи маъмулии барчаспкунӣ дар werf тамғагузории тасвирҳои Docker бо теги Git, филиали Git ё Git commit буд. Бо вуҷуди ин, ҳамаи ин схемаҳо камбудиҳо доранд, ки бо стратегияи нави барчаспҳо комилан ҳал карда мешаванд. Барои тафсилоти бештар дар бораи ин стратегияи нав ва бартариҳои он хонед.

Ҷойгир кардани маҷмӯи микросервисҳо аз як анбори Git

Ариза аксар вақт ба хидматҳои сершумор, бештар ё камтар мустақил тақсим карда мешавад. Ин хидматҳо метавонанд мустақилона бароварда шаванд: як ё якчанд хидматҳо метавонанд дар як вақт бароварда шаванд, дар ҳоле ки дигарон бидуни тағирот кор мекунанд. Аммо, аз нуқтаи назари нигоҳдории кодҳо ва идоракунии лоиҳа, нигоҳ доштани ин хидматҳои барномавӣ дар як анбори ягона қулайтар аст.

Ҳолатҳое ҳастанд, ки хидматҳо воқеан мустақиланд ва ба як барнома вобаста нестанд. Дар ин ҳолат, онҳо дар лоиҳаҳои алоҳида ҷойгир карда мешаванд ва тавассути равандҳои алоҳидаи CI/CD дар ҳар як лоиҳа бароварда мешаванд.

Аммо, дар асл, таҳиягарон аксар вақт як барномаро ба якчанд микросервисҳо тақсим мекунанд, аммо эҷоди як анбори алоҳида ва лоиҳа барои ҳар яке аз ҳад зиёд аст. Ин маҳз вазъиятест, ки мо дар зер муҳокима хоҳем кард: якчанд чунин микросервисҳо дар як анбори лоиҳа ҷойгиранд ва нашрҳо тавассути як раванди CI/CD ба амал меоянд.

Барчаспкунӣ аз ҷониби филиали Git ва теги Git

Биёед бигӯем, ки стратегияи маъмултарини тамғагузорӣ истифода мешавад - тег ё филиалБарои шохаҳои Git, тасвирҳо бо номи филиал нишон дода мешаванд; барои филиали додашуда дар як вақт танҳо як тасвири нашршуда бо номи ин филиал мавҷуд аст. Барои барчаспҳои Git, тасвирҳо мувофиқи номи тегҳо қайд карда мешаванд.

Вақте ки теги нави Git сохта мешавад, масалан, вақте ки версияи нав бароварда мешавад, теги нави Docker барои ҳама тасвирҳои лоиҳа дар Реестри 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

Ин номҳои нави тасвирҳо тавассути қолибҳои Helm ба конфигуратсияи Kubernetes интиқол дода мешаванд. Вақте ки шумо фармони густаришро иҷро мекунед werf deploy майдон нав карда мешавад image дар манбаи Kubernetes манифест ва аз нав оғоз кардани захираҳои мувофиқ бо сабаби тағир додани номи тасвир.

проблема: дар ҳолате, ки мундариҷаи тасвир пас аз паҳншавии қаблӣ (Git теги) воқеан тағир наёфта бошад, балки танҳо теги Docker он, иловагӣ Ин барнома бояд бозоғоз карда шавад ва баъзе вақтҳо метавонанд ба амал оянд. Бо вуҷуди ин, ягон сабаби воқеӣ барои аз нав оғоз кардани он вуҷуд надошт.

Дар натиҷа, нақшаи барчаспкунии ҷорӣ эҷоди якчанд анбори алоҳидаи Git-ро талаб мекунад, ки мушкилоти ташкили ҷойгиркунӣ дар ин анборҳои сершуморро ба миён меорад. Умуман, ин схема пурбор ва мураккаб аст. Беҳтар аст, ки хидматҳои сершуморро дар як анбори ягона муттаҳид кунед ва барчаспҳои Docker эҷод кунед, ки аз бозоғозкунии нолозим пешгирӣ кунанд.

Барчаспкунӣ аз ҷониби Git commit

werf инчунин стратегияи барчаспҳои марбут ба Git commits дорад.

Уҳдадории Git идентификатор барои мундариҷаи анбори Git аст ва аз таърихи таҷдиди файлҳо дар анбори Git вобаста аст, аз ин рӯ истифодаи он барои барчасп кардани тасвирҳо дар Реестри Docker мантиқӣ ба назар мерасад.

Бо вуҷуди ин, нишонгузорӣ аз ҷониби Git commit дорои нуқсонҳои якхелаест, ки нишонгузорӣ аз шохаҳои Git ё барчаспҳои Git дорад:

  • Уҳдадории холӣ эҷод кардан мумкин аст, ки ягон файлро тағир намедиҳад, аммо теги Docker тасвир тағир дода мешавад.
  • Мумкин аст ӯҳдадории якҷоякунӣ сохта шуда бошад, ки ягон файлро тағир намедиҳад, аммо теги Docker дар тасвир тағир дода мешавад.
  • Эҳтимол ӯҳдадоре сохта шуда бошад, ки файлҳоро дар Git тағир диҳад, ки ба тасвир ворид карда нашудаанд ва теги Docker тасвир дубора тағир меёбад.

Барчасп кардани номи филиали Git версияи тасвирро инъикос намекунад

Мушкилоти дигаре бо стратегияи тамғагузории филиали Git вуҷуд дорад.

Барчаспкунӣ аз рӯи номи филиал то он даме, ки ӯҳдадориҳои ин филиал бо тартиби хронологӣ ҷамъоварӣ карда мешаванд, кор мекунад.

Агар дар зери танзимоти ҷорӣ корбар ӯҳдадориҳои кӯҳнаи марбут ба шохаи мушаххасро аз нав барқарор кунад, werf тасвирро бо версияи навсохтаи тасвир барои ӯҳдадории кӯҳна бар асоси теги мувофиқи Docker аз нав менависад. Ҷойгиркунӣ бо истифода аз ин тег ҳоло хавфи кашидани версияи дигари тасвирро ҳангоми бозоғозии подкӣ ба вуҷуд меорад ва боиси он мегардад, ки замимаи мо алоқаро бо системаи CI гум кунад ва ҳамсинхронӣ шавад.

Ғайр аз он, бо телаҳои пайдарпай ба як шоха бо фосилаи кӯтоҳи байни онҳо, ӯҳдадории кӯҳна метавонад дертар аз навтар сохта шавад: версияи кӯҳнаи тасвир навтариро дар асоси теғи филиали Git баргардонад. Чунин масъалаҳоро бо системаи CI/CD ҳал кардан мумкин аст (масалан, дар GitLab CI, лӯла барои ӯҳдадориҳои охирин барои як қатор ӯҳдадориҳо истифода мешавад). Аммо, на ҳама системаҳо инро дастгирӣ мекунанд ва роҳи боэътимоди пешгирии чунин мушкилоти асосӣ лозим аст.

Барчаспкунии ба мундариҷа асосёфта чист?

Пас, теги бар асоси мундариҷа чист?

Барои эҷоди тегҳои Docker, мо на примитивҳои Git-ро (шӯъбаи Git, теги Git ва ғайра) истифода мебарем, балки маблағи санҷиши марбут ба:

  • мазмуни тасвирТеги ID-и тасвир мундариҷаи онро инъикос мекунад. Ҳангоми сохтани версияи нав, ин ID тағир намеёбад, агар файлҳои тасвир тағир наёбанд;
  • таърихи офариниши ин тасвир дар ГитТасвирҳое, ки бо шохаҳои гуногуни Git алоқаманданд ва таърихи гуногуни сохтмон тавассути werf дорои барчаспҳои гуногуни ID мебошанд.

Тег ба ном ҳамчун идентификатор амал мекунад. имзои саҳнаи тасвир.

Ҳар як тасвир аз маҷмӯи марҳилаҳо иборат аст: from, before-install, git-archive, install, imports-after-install, before-setup... git-latest-patch ва ғайра. Ҳар як марҳила муайянкунанда дорад, ки мундариҷаи онро инъикос мекунад, имзои саҳна (имзои марҳила).

Тасвири ниҳоӣ, ки аз ин марҳилаҳо иборат аст, бо ба истилоҳ имзои маҷмӯи ин марҳилаҳо нишон дода мешавад - марҳилаи имзо, - ки барои хамаи мархалахои тасвир умумият медихад.

Ҳар як тасвир аз конфигуратсия werf.yaml Умуман, имзои ин намуд ва мутаносибан теги Docker хоҳад буд.

Имзои саҳна ҳамаи мушкилоти дар боло зикршударо ҳал мекунад:

  • Ба ӯҳдадориҳои холии Git тобовар аст.
  • Муқовимат ба Git ӯҳдадор мешавад, ки файлҳоеро, ки ба тасвир мувофиқ нестанд, тағир медиҳанд.
  • Ҳангоми аз нав оғоз кардани сохтмонҳо барои commits-ҳои кӯҳнаи Git-и филиал ба мушкили баргардонидани версияи ҷории тасвир оварда намерасонад.

Ин ҳоло стратегияи тавсияшудаи барчаспкунӣ аст ва ба таври нобаёнӣ дар werf барои ҳама системаҳои CI истифода мешавад.

Чӣ тавр дар werf фаъол кардан ва истифода бурдан мумкин аст

Дар команда варианти дахлдор пайдо шуд werf publish: --tag-by-stages-signature=true|false

Дар системаи CI, стратегияи барчаспкунӣ бо фармон муайян карда мешавад werf ci-envПештар барои он параметр муайян карда шуда буд werf ci-env --tagging-strategy=tag-or-branchАкнун, агар муайян кунем werf ci-env --tagging-strategy=stages-signature ё агар шумо ин хосиятро муайян накунед, werf стратегияи барчаспро ба таври нобаёнӣ истифода мебарад stages-signature. Дастаи werf ci-env ба таври автоматй барои коллектив байракхои даркориро мукаррар мекунад werf build-and-publishwerf publish), бинобар ин барои ин фармонҳо ягон имконоти иловагӣ лозим нест.

Масалан, фармон:

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

... метавонад тасвирҳои зеринро эҷод кунад:

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

Ин аст, 4ef339f84ca22247f01fb335bb19f46c4434014d8daa3d5d6f0e386d - ин имзои марҳилаҳои тасвир аст backendва f44206457e0a4c8a54655543f749799d10a9fe945896dab1c16996c6 — имзои марҳилаҳои тасвир frontend.

Ҳангоми истифодаи функсияҳои махсус werf_container_image и werf_container_env Дар қолибҳои Helm тағир додани чизе лозим нест: ин функсияҳо ба таври худкор номҳои дурусти тасвирро тавлид мекунанд.

Намунаи конфигуратсия дар системаи CI:

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

Маълумоти бештар дар бораи танзимот дар ҳуҷҷатҳо дастрас аст:

Ҳамагӣ

  • Варианти нав werf publish --tag-by-stages-signature=true|false.
  • Арзиши нави опсия werf ci-env --tagging-strategy=stages-signature|tag-or-branch (агар муайян нашуда бошад, пешфарз хоҳад буд stages-signature).
  • Агар шумо қаблан Git-ро истифода бурда бошед, имконоти барчаспкунии commit (WERF_TAG_GIT_COMMIT ё вариант werf publish --tag-git-commit COMMIT), пас ба стратегияи барчасп гузаштан лозим аст марҳилаҳо-имзо.
  • Беҳтар аст, ки фавран лоиҳаҳои навро ба схемаи нави тамғагузорӣ гузаред.
  • Ҳангоми интиқоли лоиҳаҳои кӯҳна ба werf 1.1, тавсия дода мешавад, ки ба схемаи нави барчаспҳо гузаред, аммо кӯҳна тег ё филиал то ҳол дастгирӣ карда мешавад.

Барчаспкунии ба мундариҷа асосёфта ҳамаи мушкилоти дар мақола баррасӣшударо ҳал мекунад:

  • Муқовимати номи теги Docker ба ӯҳдадориҳои холии Git.
  • Муқовимати номи барчаспҳои Docker ба Git ӯҳдадор мешавад, ки файлҳои ба тасвир номувофиқро тағир медиҳанд.
  • Ҳангоми аз нав оғоз кардани сохтмонҳо барои супоридани Git кӯҳна барои шохаҳои Git, ба мушкили баргардонидани версияи ҷории тасвир оварда намерасонад.

Баҳра баред! Ва фаромӯш накунед, ки ба мо ташриф оред GitHubбарои эҷод кардани масъала ё пайдо кардани масъалаи мавҷуда, овоз додан, эҷод кардани PR ё танҳо аз паи рушди лоиҳа.

PS

Инчунин дар блоги мо хонед:

Манбаъ: will.com

Хостинги боэътимодро барои сайтҳо бо муҳофизати DDoS, серверҳои VPS VDS харед 🔥 Харидани хостинги боэътимоди вебсайт бо муҳофизати DDoS, серверҳои VPS VDS | ProHoster