ProHoster > Blog > Идораи > Барчасп кардани мундариҷа дар коллектори 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 сохта мешавад:
Барчаспкунӣ аз рӯи номи филиал то он даме, ки ӯҳдадориҳо дар ин филиал бо тартиби хронологӣ ҷамъоварӣ карда мешаванд, кор мекунад.
Агар дар нақшаи ҷорӣ корбар ба барқарор кардани ӯҳдадории кӯҳнае, ки бо як шохаи муайян алоқаманд аст, оғоз кунад, werf тасвирро бо истифода аз теги мувофиқи Docker бо версияи нав сохташудаи тасвир барои ӯҳдадории кӯҳна аз нав менависад. Ҷойгиркуниҳо бо истифода аз ин тег аз ин ба баъд хатари кашидани версияи дигари тасвирро ҳангоми бозоғозкунии подкҳо ба вуҷуд меорад, ки дар натиҷа замимаи мо алоқаи худро бо системаи CI гум мекунад ва ҳамсинхронӣ мешавад.
Илова бар ин, бо телаҳои пайдарпай ба як шоха бо муддати кӯтоҳи байни онҳо, ӯҳдадории кӯҳна метавонад дертар аз навтар тартиб дода шавад: версияи кӯҳнаи тасвир бо истифода аз теғи филиали Git навашро аз нав менависад. Чунин мушкилотро тавассути системаи CI/CD ҳал кардан мумкин аст (масалан, дар GitLab CI лӯлаи охирин барои як қатор супоришҳо ба кор андохта мешавад). Аммо, на ҳама системаҳо инро дастгирӣ мекунанд ва бояд роҳи боэътимоди пешгирии чунин мушкилоти асосӣ вуҷуд дошта бошад.
Барчаспкунии бар асоси мундариҷа чист?
Пас, барчаспҳои бар асоси мундариҷа чист - барчасп кардани тасвирҳо аз рӯи мундариҷа.
Барои эҷоди тегҳои Docker, на примитивҳои Git (шӯъбаи Git, теги Git...) истифода мешаванд, балки маблағи назоратӣ бо:
мазмуни тасвир. Теги ID тасвир мундариҷаи онро инъикос мекунад. Ҳангоми сохтани версияи нав, ин идентификатор тағир намеёбад, агар файлҳои тасвир тағир наёфта бошанд;
таърихи эҷоди ин тасвир дар Git. Тасвирҳое, ки бо шохаҳои гуногуни Git алоқаманданд ва таърихи гуногуни сохтмон тавассути werf дорои барчаспҳои гуногуни ID мебошанд.
Чунин теги муайянкунанда ба ном аст имзои саҳнаи тасвир.
Ҳар як тасвир аз маҷмӯи марҳилаҳо иборат аст: from, before-install, git-archive, install, imports-after-install, before-setup... git-latest-patch ва ғайра. Ҳар як марҳила идентификатор дорад, ки мундариҷаи онро инъикос мекунад - имзои саҳна(имзои марҳила).
Тасвири ниҳоӣ, ки аз ин марҳилаҳо иборат аст, бо ба истилоҳ имзои маҷмӯи ин марҳилаҳо нишон дода мешавад - марҳилаи имзо, - ки барои хамаи мархалахои тасвир умумият медихад.
Барои ҳар як тасвир аз конфигуратсия werf.yaml дар сурати умумӣ, имзои худ ва мутаносибан теги Docker хоҳад буд.