Татбиқи мо Ҷойгиркунии доимӣ дар платформаи муштарӣ

Мо дар True Engineering равандеро барои интиқоли пайвастаи навсозиҳо ба серверҳои муштарӣ таъсис додем ва мехоҳем ин таҷрибаро мубодила кунем.

Барои оғоз, мо барои муштарӣ як системаи онлайн таҳия кардем ва онро дар кластери Кубернетеси худ ҷойгир кардем. Ҳоло ҳалли пурборкунандаи мо ба платформаи муштарӣ гузашт, ки барои он мо як раванди пурраи худкори Ҷойгиркунии доимиро таъсис додем. Ба шарофати ин, мо вақти ба бозор баровардани тағиротро ба муҳити маҳсулот суръат додем.

Дар ин мақола мо дар бораи ҳамаи марҳилаҳои раванди густариши доимӣ (CD) ё ​​расонидани навсозиҳо ба платформаи муштарӣ сӯҳбат хоҳем кард:

  1. Ин раванд чӣ гуна оғоз меёбад?
  2. ҳамоҳангсозӣ бо анбори Git муштарӣ,
  3. маҷлиси пушти сар ва фронт,
  4. ҷойгиркунии автоматии барнома дар муҳити санҷиш,
  5. ҷойгиркунии автоматӣ ба Prod.

Мо тафсилоти танзимро дар тӯли роҳ мубодила хоҳем кард.

Татбиқи мо Ҷойгиркунии доимӣ дар платформаи муштарӣ

1. CD-ро оғоз кунед

Ҷойгиркунии муттасил аз он оғоз мешавад, ки таҳиягар тағиротҳоро ба шохаи барориши анбори Git мо ворид мекунад.

Замимаи мо дар меъмории микросервис кор мекунад ва ҳамаи ҷузъҳои он дар як репозиторий нигоҳ дошта мешаванд. Ба шарофати ин, ҳама хидматҳои хурд ҷамъоварӣ ва насб карда мешаванд, ҳатто агар яке аз онҳо тағир ёбад.

Мо корро тавассути як анбор бо якчанд сабаб ташкил кардем:

  • Осонии рушд - барнома фаъолона рушд мекунад, бинобар ин шумо метавонед бо ҳама кодҳо якбора кор кунед.
  • Як лӯлаи CI/CD, ки кафолат медиҳад, ки барнома ҳамчун як системаи ягона аз ҳама санҷишҳо мегузарад ва ба муҳити истеҳсолии муштарӣ интиқол дода мешавад.
  • Мо нофаҳмиҳо дар версияҳоро бартараф мекунем - ба мо лозим нест, ки харитаи версияҳои микросервисро нигоҳ дорем ва конфигуратсияи онро барои ҳар як микросервис дар скриптҳои Helm тавсиф кунем.

2. Ҳамоҳангсозӣ бо анбори Git рамзи сарчашмаи муштарӣ

Тағиротҳои воридшуда ба таври худкор бо анбори Git муштарӣ ҳамоҳанг карда мешаванд. Дар он ҷо маҷмӯи барномаҳо танзим карда мешавад, ки пас аз навсозии филиал ва ҷойгиркунӣ ба идома оғоз карда мешавад. Ҳарду раванд дар муҳити худ аз анбори Git сарчашма мегиранд.

Мо наметавонем мустақиман бо анбори муштарӣ кор кунем, зеро мо барои таҳия ва озмоиш ба муҳити шахсии худ ниёз дорем. Мо барои ин мақсадҳо анбори Git-и худро истифода мебарем - он бо анбори Git онҳо ҳамоҳанг карда мешавад. Ҳамин ки таҳиякунанда тағиротро ба филиали мувофиқи анбори мо интишор мекунад, GitLab ин тағиротҳоро фавран ба муштарӣ тела медиҳад.

Татбиқи мо Ҷойгиркунии доимӣ дар платформаи муштарӣ

Баъд аз ин, шумо бояд монтажро анҷом диҳед. Он аз якчанд марҳила иборат аст: васлкунии пушти сар ва фронт, озмоиш ва таҳвил ба истеҳсолот.

3. Ҷамъоварии қафо ва пештара

Сохтани пушти сар ва фронт ду вазифаи мувозӣ мебошанд, ки дар системаи GitLab Runner иҷро мешаванд. Конфигуратсияи аслии он дар ҳамон анбор ҷойгир аст.

Дарсӣ барои навиштани скрипти YAML барои сохтани GitLab.

GitLab Runner кодро аз анбори зарурӣ мегирад, онро бо фармони сохтани барномаи Java ҷамъ мекунад ва ба реестри Docker мефиристад. Дар ин ҷо мо пушти сар ва фронтро ҷамъ меорем, тасвирҳои Docker мегирем, ки мо онҳоро ба анбори паҳлӯи муштарӣ мегузорем. Барои идоракунии тасвирҳои Docker мо истифода мебарем Плагини Gradle.

Мо версияҳои тасвирҳои худро бо версияи релиз, ки дар Docker нашр мешаванд, ҳамоҳанг мекунем. Барои кори муътадил мо якчанд ислоҳот ворид кардем:

1. Контейнерҳо дар байни муҳити озмоишӣ ва муҳити истеҳсолӣ аз нав сохта намешаванд. Мо параметризатсия кардем, то як контейнер бо ҳама танзимот, тағирёбандаҳои муҳити зист ва хидматҳо ҳам дар муҳити озмоишӣ ва ҳам дар истеҳсолот бидуни барқарорсозӣ кор кунад.

2. Барои навсозии барнома тавассути Helm, шумо бояд версияи онро муайян кунед. Мо пуштибонӣ, фронталӣ ва навсозии барномаро месозем - ин се вазифаи гуногун аст, бинобар ин дар ҳама ҷо истифода бурдани як версияи барнома муҳим аст. Барои ин вазифа, мо маълумотро аз таърихи Git истифода мебарем, зеро конфигуратсияи кластери K8S ва замимаҳои мо дар як анбори Git ҷойгиранд.

Мо версияи барномаро аз натиҷаҳои иҷрои фармон мегирем
git describe --tags --abbrev=7.

4. Ҷойгиркунии худкори ҳама тағйирот дар муҳити санҷиш (UAT)

Қадами навбатӣ дар ин скрипти сохта ба таври худкор навсозии кластери K8S мебошад. Ин ба шарте рух медиҳад, ки тамоми барнома сохта шуда бошад ва ҳамаи артефактҳо дар Реестри Docker нашр карда шаванд. Пас аз ин, навсозии муҳити санҷиш оғоз меёбад.

Навсозии кластер истифода мешавад Навсозии руль. Агар, дар натиҷа, чизе мувофиқи нақша иҷро нашавад, Helm ба таври худкор ва мустақилона ҳамаи тағиротҳои худро бармегардонад. Ба кори у назорат кардан лозим нест.

Мо конфигуратсияи кластери K8S-ро дар якҷоягӣ бо васила таъмин мекунем. Аз ин рӯ, қадами навбатӣ ин навсозии он аст: configMaps, ҷойгиркунӣ, хидматҳо, асрор ва ҳама конфигуратсияҳои дигари K8S, ки мо тағир додаем.

Сипас Helm навсозии RollOut-и худи барномаро дар муҳити санҷиш иҷро мекунад. Пеш аз он ки барнома дар истеҳсолот ҷойгир карда шавад. Ин барои он анҷом дода мешавад, ки корбарон хусусиятҳои тиҷоратиеро, ки мо ба муҳити санҷиш гузоштаем, дастӣ санҷанд.

5. Ҷойгиркунии худкори ҳама тағйирот ба Prod

Барои ҷойгиркунии навсозӣ дар муҳити истеҳсолӣ, шумо бояд танҳо як тугмаро дар GitLab пахш кунед - ва контейнерҳо фавран ба муҳити истеҳсолӣ интиқол дода мешаванд.

Як барнома метавонад дар муҳитҳои гуногун - озмоиш ва истеҳсол - бидуни барқарорсозӣ кор кунад. Мо ҳамон артефактҳоро бидуни тағир додани чизе дар барнома истифода мебарем ва параметрҳоро берун аз он муқаррар мекунем.

Параметризатсияи чандири танзимоти барнома аз муҳите, ки дар он барнома иҷро мешавад, вобаста аст. Мо ҳама танзимоти муҳити атрофро ба берун кӯчонидаем: ҳама чиз тавассути конфигуратсияи K8S ва параметрҳои Helm параметр карда мешавад. Вақте ки Helm васлкуниро дар муҳити санҷиш ҷойгир мекунад, танзимоти санҷиш ба он татбиқ карда мешаванд ва танзимоти маҳсулот ба муҳити истеҳсолӣ татбиқ карда мешаванд.

Аз ҳама мушкил ин буд, ки ҳама хидматҳо ва тағирёбандаҳои истифодашуда, ки ба муҳити зист вобастаанд, ва тарҷумаи онҳо ба тағирёбандаҳои муҳити зист ва тавсифи конфигуратсияҳои параметрҳои муҳити зист барои Helm.

Танзимоти барнома тағирёбандаҳои муҳити зистро истифода мебаранд. Қиматҳои онҳо дар контейнерҳо бо истифода аз конфигуратсияи K8S муқаррар карда мешаванд, ки бо истифода аз қолибҳои Go шаблон карда шудааст. Масалан, муқаррар кардани тағирёбандаи муҳити зист ба номи домен метавонад чунин анҷом дода шавад:

APP_EXTERNAL_DOMAIN: {{ (pluck .Values.global.env .Values.app.properties.app_external_domain | first) }}

.Values.global.env – ин тағирёбанда номи муҳити атрофро нигоҳ медорад (маҳсулот, марҳила, UAT).
.Values.app.properties.app_external_domain – дар ин тағирёбанда мо домени дилхоҳро дар файли .Values.yaml муқаррар мекунем

Ҳангоми навсозии барнома, Helm аз қолибҳо файли configmap.yaml эҷод мекунад ва арзиши APP_EXTERNAL_DOMAIN-ро вобаста ба муҳити дилхоҳе, ки навсозии барнома оғоз мешавад, пур мекунад. Ин тағирёбанда аллакай дар контейнер гузошта шудааст. Онро аз барнома дастрас кардан мумкин аст, аз ин рӯ ҳар як муҳити барнома барои ин тағирёбанда арзиши гуногун хоҳад дошт.

Нисбатан ба наздикӣ, дастгирии K8S дар Spring Cloud пайдо шуд, аз ҷумла кор бо configMaps: Абри баҳорӣ Кубернетес. Лоиха фаъолона инкишоф ёфта, ба куллй тагьир меёбад, мо онро дар истехсолот истифода бурда наметавонем. Аммо мо ҳолати онро фаъолона назорат мекунем ва онро дар конфигуратсияҳои DEV истифода мебарем. Ҳамин ки он мӯътадил мешавад, мо аз истифодаи тағирёбандаҳои муҳити зист ба он мегузарем.

Ҳамагӣ

Ҳамин тавр, Ҷойгиркунии доимӣ танзим ва кор мекунад. Ҳама навсозиҳо бо як клавиатура ба амал меоянд. Интиқоли тағирот ба муҳити маҳсулот автоматӣ аст. Ва муҳимтар аз ҳама, навсозӣ системаро бозмедорад.

Татбиқи мо Ҷойгиркунии доимӣ дар платформаи муштарӣ

Нақшаҳои оянда: интиқоли автоматии пойгоҳи додаҳо

Мо дар бораи навсозии пойгоҳи додаҳо ва имкони баргардонидани ин тағйирот фикр мекардем. Охир, ду версияи гуногуни барнома дар як вакт кор мекунад: версияи кухна кор мекунад ва наваш кор мекунад. Ва мо кӯҳнаро танҳо вақте хомӯш мекунем, ки боварӣ ҳосил кунем, ки версияи нав кор мекунад. Муҳоҷирати пойгоҳи додаҳо бояд ба шумо имкон диҳад, ки бо ҳарду версияи барнома кор кунед.

Аз ин рӯ, мо наметавонем танҳо номи сутун ё дигар маълумотро иваз кунем. Аммо мо метавонем як сутуни нав эҷод кунем, маълумотро аз сутуни кӯҳна ба он нусхабардорӣ кунем ва триггерҳоро нависем, ки ҳангоми навсозии маълумот ҳамзамон онро дар сутуни дигар нусхабардорӣ ва навсозӣ мекунанд. Ва пас аз татбиқи бомуваффақияти версияи нави барнома, пас аз давраи пуштибонии пас аз оғози кор, мо метавонем сутуни кӯҳна ва триггерро, ки нолозим шудааст, нест кунем.

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

Мо нақша дорем, ки интиқоли пойгоҳи додаҳоро тавассути кори K8S автоматикунонида, онро ба раванди CD ҳамгиро кунем. Ва мо бешубҳа ин таҷрибаро дар Ҳабре мубодила хоҳем кард.

Манбаъ: will.com

Илова Эзоҳ