.NET Core дар Linux, DevOps дар асп

Мо то ҳадди имкон DevOps таҳия кардем. Мо 8 нафар будем ва Вася дар Windows олитарин буд. Ногаҳон Вася рафт ва ман вазифадор шудам, ки лоиҳаи наверо оғоз кунам, ки аз ҷониби таҳияи Windows таъмин карда шудааст. Вақте ки ман тамоми стеки таҳияи Windows-ро ба рӯи миз партофтам, ман фаҳмидам, ки вазъият дардовар аст...

Ҳикоя ҳамин тавр оғоз мешавад Александра Синчинова ба DevOpsConf. Вақте ки мутахассиси пешбари Windows ширкатро тарк кард, Александр ҳайрон шуд, ки ҳоло чӣ кор кунад. Гузариш ба Linux, албатта! Искандар ба шумо нақл мекунад, ки чӣ гуна ӯ тавонистааст як преседент эҷод кунад ва як қисми таҳияи Windows-ро ба Linux интиқол диҳад, бо мисоли лоиҳаи анҷомёфта барои 100 корбарони ниҳоӣ.

.NET Core дар Linux, DevOps дар асп

Чӣ тавр ба осонӣ ва бемаънӣ лоиҳаро ба RPM бо истифода аз TFS, Puppet, Linux .NET core интиқол додан мумкин аст? Чӣ тавр версияи пойгоҳи додаҳои лоиҳаро дастгирӣ кардан мумкин аст, агар гурӯҳи таҳиягарон калимаҳои Postgres ва Flywayро бори аввал бишнаванд ва мӯҳлат пас аз фардо бошад? Чӣ тавр бо Docker ҳамгироӣ кардан мумкин аст? Чӣ тавр таҳиягарони .NET-ро барои тарк кардани Windows ва smoothies ба манфиати Puppet ва Linux ҳавасманд кардан мумкин аст? Агар барои нигоҳ доштани Windows дар истеҳсолот на қувват, на хоҳиш ва на захира мавҷуд набошад, ихтилофҳои идеологиро чӣ гуна бояд ҳал кард? Дар бораи ин, инчунин дар бораи Web Deploy, озмоиш, CI, дар бораи таҷрибаҳои истифодаи TFS дар лоиҳаҳои мавҷуда ва, албатта, дар бораи асобағолҳои шикаста ва ҳалли корӣ, дар стенограммаи гузориши Александр.


Инак, Вася рафт, вазифа ба души ман аст, тахиягарон бесаброна бо пиччорхо мунтазиранд. Вақте ки ман ниҳоят фаҳмидам, ки Васяро баргардондан мумкин нест, ман ба кор даромадам. Барои оғоз, ман фоизи Win VM-ро дар парки мо арзёбӣ кардам. Ҳисоб ба фоидаи Windows набуд.

.NET Core дар Linux, DevOps дар асп

Азбаски мо DevOps-ро фаъолона таҳия карда истодаем, ман фаҳмидам, ки дар равиши пешниҳоди барномаи нав чизе бояд тағир дода шавад. Танҳо як роҳи ҳал вуҷуд дошт - агар имконпазир бошад, ҳама чизро ба Linux интиқол диҳед. Google ба ман кӯмак кард - он вақт .Net аллакай ба Linux интиқол дода шуда буд ва ман фаҳмидам, ки ин роҳи ҳал аст!

Чаро core .NET дар якҷоягӣ бо Linux?

Ин якчанд сабаб дошт. Миёни «пул додан» ва «напардохтан» аксарият дуюмро интихоб мекунанд - мисли ман. Литсензия барои MSDB тақрибан $ 1 арзиш дорад; нигоҳ доштани парки мошинҳои виртуалии Windows садҳо доллар арзиш дорад. Барои як ширкати калон ин хароҷоти калон аст. Барои ҳамон сарфа - сабаби аввал. На муҳимтарин, балки яке аз муҳимтаринҳо.

Мошинҳои виртуалии Windows нисбат ба бародарони Linuxи худ захираҳои бештарро мегиранд - вазнинанд. Бо назардошти миқёси ширкати калон, мо Linux-ро интихоб кардем.

Система танҳо ба CI мавҷуда муттаҳид карда шудааст. Мо худро DevOps пешқадам мешуморем, мо Bamboo, Jenkins ва GitLab CI-ро истифода мебарем, аз ин рӯ аксари корҳои мо дар Linux кор мекунанд.

Сабаби охирин ин аст ҳамроҳии қулай. Ба мо лозим омад, ки монеаи вурудро барои "мушоият" паст кунем - бачаҳое, ки қисми техникиро мефаҳманд, хидмати бефосиларо таъмин мекунанд ва хидматҳоро аз хати дуюм нигоҳ медоранд. Онҳо аллакай бо стеки Linux ошно буданд, аз ин рӯ фаҳмидан, дастгирӣ ва нигоҳдории маҳсулоти нав барои онҳо хеле осонтар аст, назар ба харҷ кардани захираҳои иловагӣ барои фаҳмидани ҳамон як функсияи нармафзор барои платформаи Windows.

талаботи

Пеш аз ҳама - роҳати ҳалли нав барои таҳиягарон. На ҳамаи онҳо барои тағирот омода буданд, махсусан пас аз он ки калимаи Linux гуфта шуд. Таҳиягарон мехоҳанд, ки Visual Studio дӯстдоштаи худ, TFS бо худтестҳо барои анҷуманҳо ва smoothies. Чӣ тавр ба истеҳсолот интиқол додани онҳо барои онҳо муҳим нест. Аз ин рӯ, мо тасмим гирифтем, ки раванди муқаррариро тағир надиҳем ва ҳама чизро барои рушди Windows бетағйир гузорем.

Лоиҳаи нав лозим аст ба CI мавҷуда ҳамгироӣ кунед. Рельсҳо аллакай дар он ҷо буданд ва тамоми корҳо бояд бо назардошти параметрҳои системаи идоракунии конфигуратсия, стандартҳои қабулшуда ва системаҳои назорат анҷом дода шаванд.

Осонии дастгирӣ ва амалиёт, ҳамчун шарти ҳадди ақали ҳадди аққал барои ҳамаи иштирокчиёни нав аз бахшҳои гуногун ва шӯъбаи дастгирӣ.

Мӯҳлати ниҳоӣ - дирӯз.

Win Group Development

Дастаи Windows он вақт бо чӣ кор мекард?

.NET Core дар Linux, DevOps дар асп

Акнун ман бо камоли боварй гуфта метавонам IdentityServer4 як алтернативаи ройгон ба ADFS бо қобилиятҳои шабеҳ аст ё чӣ Асоси чаҳорчӯбаи объект - биҳишт барои таҳиягар, ки дар он шумо набояд дар навиштани скриптҳои SQL ташвиш кашед, балки дархостҳоро дар пойгоҳи додаҳо бо истилоҳи OOP тавсиф кунед. Аммо баъдан, ҳангоми муҳокимаи нақшаи амал, ман ба ин стек нигоҳ кардам, ки гӯё он хатти шумерӣ бошад ва танҳо PostgreSQL ва Git-ро эътироф мекард.

Он вакт мо фаъолона истифода мебурдем Қабат ҳамчун системаи идоракунии конфигуратсия. Дар аксари лоиҳаҳои мо мо истифода мебурдем GitLab CI, тағйирёбанда, хизматрасонии мутавозуни баланд-бор истифода HAProxy бо ҳама чизро назорат мекард Зарифӣ, пайвандҳо Графана и Prometheus, Ҷайгер, ва хамаи ин дар руи порахои охан чарх мезад HPESXi ба VMware. Ҳама медонанд - як классикии жанр.

.NET Core дар Linux, DevOps дар асп

Биёед бубинем ва кӯшиш кунем фаҳмем, ки пеш аз оғози ҳамаи ин дахолатҳо чӣ рӯй дод.

Чӣ гап шуд

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

.NET Core дар Linux, DevOps дар асп
Пештар, ин тирезаҳои сахт буданд. TFS якчанд агентҳои Build-ро истифода бурд, ки барои ҷамъ кардани лоиҳаҳои зиёд истифода мешуданд. Ҳар як агент 3-4 коргар дорад, то вазифаҳоро параллел созад ва равандро оптимизатсия кунад. Сипас, тибқи нақшаҳои нашр, TFS Build-и нав пухташударо ба сервери замимаи Windows интиқол дод.

Мо ба чӣ ноил шудан мехостем?

Мо TFS-ро барои таҳвил ва таҳия истифода мебарем ва барномаро дар сервери Linux Ариза иҷро мекунем ва дар байни онҳо як навъ ҷодуе ҳаст. Ин Қуттии Magic ва намаки кор дар пеш аст. Пеш аз он ки онро ҷудо кунам, ман як қадам мегузорам ва дар бораи ариза чанд сухан мегӯям.

Лоиҳа

Ин барнома функсияҳоро барои коркарди кортҳои пешпардохт таъмин мекунад.

.NET Core дар Linux, DevOps дар асп

мизоҷ

Ду намуди корбарон вуҷуд доштанд. Аввал тавассути ворид шудан бо истифода аз сертификати SSL SHA-2 дастрасӣ пайдо кард. У дуюм бо истифода аз логин ва парол дастрасӣ вуҷуд дошт.

HAProxy

Сипас дархости муштарӣ ба HAProxy рафт, ки мушкилоти зеринро ҳал кард:

  • иҷозати ибтидоӣ;
  • қатъи SSL;
  • танзими дархостҳои HTTP;
  • дархостҳои пахш.

Шаҳодатномаи муштарӣ дар баробари занҷир тасдиқ карда шуд. Мо - маќоми ва мо метавонем инро пардохт кунем, зеро худи мо ба мизоҷони хидматрасонӣ сертификатҳо медиҳем.

Ба нуктаи сеюм таваҷҷуҳ кунед, каме дертар ба он бармегардем.

Backend

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

Пасандозҳо бо HAProxy

Илова ба ду контекст, ки ҳар як муштарӣ паймоиш мекард, контексти шахсият низ вуҷуд дошт. IdentityServer4 танҳо ба шумо имкон медиҳад, ки ворид шавед, ин аналоги ройгон ва пурқувват барои ADFS - Хизматрасонии Федератсияи фаъол.

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

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

Қадами сеюм - муштарӣ баргардонида шуд ба контекст, ки аз он пайдо шудааст.

.NET Core дар Linux, DevOps дар асп

IdentityServer4 дорои хусусияти: он ҷавобро ба дархости бозгашт тавассути HTTP бармегардонад. Новобаста аз он ки мо бо таъсиси сервер чӣ қадар мубориза мебурдем, новобаста аз он ки мо худро бо ҳуҷҷатҳо равшан мекардем, ҳар дафъае, ки мо дархости аввалини муштариро бо URL-и тавассути HTTPS ворид мекардем ва IdentityServer ҳамон контекстро баргардонид, аммо бо HTTP. Мо дар ҳайрат будем! Ва мо ҳамаи инро тавассути контексти шахсият ба HAProxy интиқол додем ва дар сарлавҳаҳо мо бояд протоколи HTTP-ро ба HTTPS тағир диҳем.

Беҳтаршавӣ чист ва шумо дар куҷо сарфа кардед?

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

Он чӣ гуна бояд кор кунад

Ҳамин тавр, чунон ки ман ваъда дода будам - ​​Қуттии ҷодугарӣ. Мо аллакай дарк мекунем, ки ба мо кафолат дода мешавад, ки ба Linux ҳаракат кунем. Биёед вазифаҳои мушаххасеро тартиб диҳем, ки ҳалли онҳоро талаб мекарданд.

.NET Core дар Linux, DevOps дар асп

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

Усули интиқол. Стандарт RPM аст. Ҳама мефаҳманд, ки дар Linux шумо бе он кор карда наметавонед, аммо худи лоиҳа пас аз васлкунӣ маҷмӯи файлҳои иҷрошавандаи DLL буд. Онҳо тақрибан 150 нафар буданд, лоиҳа хеле душвор буд. Ягона ҳалли ҳамоҳанг ин бастабандии ин бинарӣ ба RPM ва ҷойгиркунии барнома аз он мебошад.

Версиясозӣ. Мо бояд хеле зуд-зуд озод мекардем ва мо бояд тасмим гирифтем, ки номи бастаро чӣ гуна ташаккул диҳем. Ин савол дар бораи сатҳи ҳамгироӣ бо TFS аст. Мо дар Linux агенти сохтмон доштем. Вақте ки TFS супоришро ба коркардкунанда - коргар - ба агенти Build мефиристад, он инчунин як қатор тағирёбандаҳоро мефиристад, ки дар муҳити раванди коркардкунанда ба охир мерасанд. Ин тағирёбандаҳои муҳити зист номи Сохт, номи версия ва дигар тағирёбандаҳоро дар бар мегиранд. Муфассалтар дар ин бора дар бахши "Сохтани бастаи RPM" хонед.

Танзими TFS ба барпо намудани қубур омад. Пештар, мо ҳама лоиҳаҳои Windows-ро дар агентҳои Windows ҷамъоварӣ мекардем, аммо ҳоло агенти Linux пайдо мешавад - агенти Build, ки бояд ба гурӯҳи сохтмон дохил карда шуда, бо баъзе артефактҳо ғанӣ гардонида шавад ва гуфт, ки кадом намуди лоиҳаҳо дар ин агенти Build сохта мешаванд , ва бо ягон роҳ қубурро тағир диҳед.

IdentityServer. ADFS роҳи мо нест, мо ба манбаи кушода меравем.

Биёед аз ҷузъҳо гузарам.

Қуттии Magic

Аз чор қисм иборат аст.

.NET Core дар Linux, DevOps дар асп

Агенти Build Linux. Linux, зеро мо барои он месозем - ин мантиқист. Ин қисм дар се марҳила анҷом дода шуд.

  • Коргаронро танзим кунед ва на танҳо, зеро кори тақсимшуда дар лоиҳа интизор буд.
  • .NET Core 1.x -ро насб кунед. Чаро 1.x, вақте ки 2.0 аллакай дар анбори стандартӣ дастрас аст? Зеро вақте ки мо ба коркард шурӯъ кардем, версияи устувор 1.09 буд ва тасмим гирифта шуд, ки лоиҳаро дар асоси он созем.
  • Git 2.x.

RPM-анбор. Бастаҳои RPM бояд дар ҷое нигоҳ дошта шаванд. Тахмин карда мешуд, ки мо ҳамон як анбори RPM-и корпоративиро, ки барои ҳама ҳостҳои Linux дастрас аст, истифода мебарем. Он чизе ки онҳо карданд. Сервери репозиторий танзим карда шудааст қалмоқе ки бастаи зарурии RPM-ро аз макони муайяншуда бор кардааст. Версияи баста аз ҷониби агенти Build ба webhook гузориш дода шуд.

ГитЛаб. Диққат! GitLab дар ин ҷо на аз ҷониби таҳиягарон, балки аз ҷониби шӯъбаи амалиётҳо барои назорати версияҳои барномаҳо, версияҳои бастаҳо, назорати ҳолати ҳама мошинҳои Linux истифода мешавад ва он рецептро нигоҳ медорад - ҳама манифестҳои Puppet.

Қабат — ҳама масъалаҳои баҳсбарангезро ҳал мекунад ва маҳз конфигуратсияеро, ки мо аз Gitlab мехоҳем, пешкаш мекунад.

Мо ба ғарқ шудан шурӯъ мекунем. Интиқоли DLL ба RPM чӣ гуна кор мекунад?

Интиқоли DDL ба RPM

Биёед бигӯем, ки мо як ситораи рок дар рушди .NET дорем. Он Visual Studio-ро истифода мебарад ва шохаи нашрро месозад. Пас аз он, он онро ба Git бор мекунад ва Git ин ҷо як объекти TFS мебошад, яъне он анбори барномаҳост, ки таҳиякунанда бо он кор мекунад.

.NET Core дар Linux, DevOps дар асп

Пас аз он TFS мебинад, ки ӯҳдадории нав расидааст. Кадом барнома? Дар танзимоти TFS нишонае мавҷуд аст, ки нишон медиҳад, ки агенти мушаххаси Build дорои кадом захираҳо мебошад. Дар ин ҳолат, ӯ мебинад, ки мо лоиҳаи .NET Core сохта истодаем ва аз ҳавз агенти Linux Build-ро интихоб мекунад.

Агенти Build манбаъҳоро қабул мекунад ва заруриро зеркашӣ мекунад вобастагӣ аз анбори .NET, npm ва ғайра. ва пас аз сохтани худи барнома ва бастабандии минбаъда, бастаи RPM-ро ба анбори RPM мефиристад.

Аз тарафи дигар, чунин ҳодиса рӯй медиҳад. Муҳандиси шӯъбаи амалиёт бевосита дар таҳияи лоиҳа иштирок мекунад: ӯ версияҳои бастаҳоро дар Хиера дар анборе, ки рецепти барнома нигоҳ дошта мешавад, пас аз он Puppet триггер мешавад Yum, бастаи навро аз анбор меорад ва версияи нави барнома барои истифода омода аст.

.NET Core дар Linux, DevOps дар асп

Ҳама чиз дар сухан оддӣ аст, аммо дар дохили худи агенти Build чӣ рӯй медиҳад?

Бастабандии DLL RPM

Манбаъҳои лоиҳа ва сохтани супориш аз TFS гирифта шуданд. Сохтани агент худаш ба сохтмони лоиха аз манбаъхо шуруъ мекунад. Лоиҳаи ҷамъшуда ҳамчун маҷмӯа дастрас аст файлҳои DLL, ки барои кам кардани сарбории системаи файлӣ дар архиви zip бастабандӣ карда шудаанд.

Архиви ZIP партофта мешавад ба феҳристи сохтани бастаи RPM. Баъдан, скрипти Bash тағирёбандаҳои муҳити зистро оғоз мекунад, версияи Build, версияи лоиҳа, роҳ ба директорияи сохтмонро пайдо мекунад ва RPM-build -ро иҷро мекунад. Пас аз анҷом ёфтани сохтмон, баста ба он нашр мешавад анбори маҳаллӣ, ки дар агенти Сохта ҷойгир аст.

Минбаъд, аз агенти Сохта ба сервер дар анбори RPM Дархости JSON фиристода мешавад бо нишон додани номи версия ва сохтани. Webhook, ки ман дар бораи он қаблан гуфта будам, ин бастаро аз анбори маҳаллӣ дар агенти Build зеркашӣ мекунад ва маҷлиси навро барои насб дастрас мекунад.

.NET Core дар Linux, DevOps дар асп

Чаро ин нақшаи мушаххаси интиқоли бастаҳо ба анбори RPM? Чаро ман бастаи ҷамъшударо фавран ба анбор фиристода наметавонам? Гап дар сари он аст, ки ин шарти таъмини бехатарй мебошад. Ин сенария имкони бор кардани одамони беиҷозат бастаҳои RPM-ро ба сервере, ки барои ҳама мошинҳои Linux дастрас аст, маҳдуд мекунад.

Версияи пойгоҳи додаҳо

Ҳангоми машварат бо гурӯҳи таҳиягарон маълум шуд, ки бачаҳо ба MS SQL наздиктаранд, аммо дар аксари лоиҳаҳои ғайри Windows мо аллакай PostgreSQL-ро бо тамоми қувва истифода мебурдем. Азбаски мо аллакай қарор дода будем, ки ҳама чизи пардохтшударо тарк кунем, мо дар ин ҷо низ PostgreSQL-ро истифода бурдем.

.NET Core дар Linux, DevOps дар асп

Дар ин қисм ман мехоҳам ба шумо бигӯям, ки мо маълумотро чӣ гуна нусхабардорӣ кардем ва чӣ гуна мо байни Flyway ва Entity Framework Core интихоб кардем. Биёед ба мусбат ва манфии онҳо назар кунем.

Минусы

Flyway танҳо як тараф меравад, мо мо наметавонем баргардем — ин камбудии калон аст. Шумо метавонед онро бо Entity Framework Core бо роҳҳои дигар муқоиса кунед - аз ҷиҳати роҳати таҳиякунанда. Шумо дар хотир доред, ки мо инро дар мадди аввал гузоштем ва меъёри асосӣ ин буд, ки чизе барои рушди Windows тағир надиҳад.

Барои Flyway мо як навъ печка лозим будто ки бачахо нанависанд Дархостҳои SQL. Онҳо ба кор дар шароити OOP хеле наздиктаранд. Мо дастурҳо оид ба кор бо объектҳои пойгоҳи додаҳо навиштем, дархости SQL тавлид кардем ва онро иҷро кардем. Версияи нави базаи маълумот омода аст, санҷида шудааст - ҳама чиз хуб аст, ҳама чиз кор мекунад.

Entity Framework Core як минус дорад - дар зери бори вазнин дархостҳои зероптималии SQL-ро месозад, ва коҳиш дар базаи маълумот метавонад назаррас бошад. Аммо азбаски мо хидмати сербор надорем, мо сарбориро дар садҳо RPS ҳисоб намекунем, мо ин хатарҳоро қабул кардем ва мушкилотро ба ояндаи худ вогузор кардем.

Плюсы

Асоси чаҳорчӯбаи объект берун аз қуттӣ кор мекунад ва ба осонӣ таҳия карда мешавад, ва Flyway Ба осонӣ ба CI мавҷуда ҳамгиро мешавад. Аммо мо онро барои таҳиягарон қулай мегардонем :)

Тартиби ҷамъоварӣ

Лӯхтак мебинад, ки тағирот дар версияи баста, аз ҷумла версияе, ки барои муҳоҷират масъул аст, меояд. Аввалан, он бастаеро насб мекунад, ки дорои скриптҳои муҳоҷират ва функсияҳои марбут ба пойгоҳи додаҳо мебошад. Пас аз ин, барномае, ки бо пойгоҳи додаҳо кор мекунад, аз нав оғоз мешавад. Минбаъд насби ҷузъҳои боқимонда меояд. Тартиби насб кардани бастаҳо ва оғоз кардани барномаҳо дар манифести лӯхтак тасвир шудааст.

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

Мушкилоти TFS

Пас аз он ки мо тасмим гирифтем ва фаҳмидем, ки ҳама чиз воқеан барои мо кор мекунад, ман қарор додам, ки дар маҷлисҳо дар TFS дар маҷмӯъ барои шӯъбаи рушди Win дар лоиҳаҳои дигар чӣ рӯй дода истодааст - хоҳ мо зуд сохта/баровардем ё не ва ва мушкилоти ҷиддиро бо суръат ошкор карданд.

Яке аз лоиҳаҳои асосӣ барои ҷамъоварӣ 12-15 дақиқа вақтро мегирад - ин вақти зиёд аст, шумо наметавонед чунин зиндагӣ кунед. Таҳлили зуд коҳиши даҳшатноки I/O нишон дод ва ин дар массивҳо буд.

Пас аз таҳлили ҷузъ ба ҷузъ, ман се фокусро муайян кардам. Аввал - "Антивируси Касперский", ки манбаъҳоро дар ҳама агентҳои Windows Build скан мекунад. Дуюм - Windows Индексатор. Он ғайрифаъол набуд ва ҳама чиз дар вақти воқеӣ дар агентҳои Build дар ҷараёни ҷойгиркунӣ индексатсия карда шуд.

Сеюм - Npm насб кунед. Маълум шуд, ки дар аксари қубурҳо мо ин сенарияи дақиқро истифода мебурдем. Чаро ӯ бад аст? Тартиби насби Npm вақте иҷро мешавад, ки дарахти вобастагӣ дар package-lock.json, ки дар он версияҳои бастаҳое, ки барои сохтани лоиҳа истифода мешаванд, сабт карда мешаванд. Камбудии он дар он аст, ки насби Npm ҳар дафъа версияҳои охирини бастаҳоро аз Интернет мебарорад ва ин дар сурати лоиҳаи калон вақти зиёдро мегирад.

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

ҳалли

  • Сарчашмаҳо дар истисноҳои AV.
  • Индексизатсияро хомӯш кунед.
  • Гузариш ба npm ci.

Бартарии npm ci аз он иборат аст, ки мо Мо як маротиба дарахти вобастагӣ ҷамъ мекунем, ва мо имконият пайдо мекунем, ки таҳиякунандаро таъмин кунем рӯйхати ҷории бастаҳо, ки бо он у дар махалхо хар кадар дилхох тачриба карда метавонад. Ин вақтро сарфа мекунад таҳиягароне, ки код менависанд.

Танзимот

Акнун каме дар бораи конфигуратсияи анбор. Таърихан мо истифода мебарем Nexus барои идоракунии анборҳо, аз ҷумла РЕПО-и дохилӣ. Ин анбори дохилӣ дорои ҳама ҷузъҳое мебошад, ки мо барои мақсадҳои дохилӣ истифода мебарем, масалан, мониторинги худнависӣ.

.NET Core дар Linux, DevOps дар асп

Мо низ истифода мебарем NuGet, зеро он дар муқоиса бо дигар менеҷерони бастаҳо кэши беҳтар дорад.

Дар натиҷа

Пас аз он ки мо агентҳои созандаро оптимизатсия кардем, вақти миёнаи сохтмон аз 12 дақиқа то 7 кам карда шуд.

Агар мо ҳамаи мошинҳоеро ҳисоб кунем, ки мо метавонистем барои Windows истифода бурдем, вале дар ин лоиҳа ба Linux гузаштем, мо тақрибан $10 сарфа кардем.Ва ин танҳо ба литсензияҳо дахл дорад ва агар мундариҷаро ба назар гирем.

Нақшаҳо

Дар семоҳаи оянда мо ба нақша гирифта будем, ки оид ба оптимизатсияи интиқоли код кор кунем.

Гузариш ба тасвири қаблан сохташудаи Docker. TFS як чизи олиҷаноб бо бисёр плагинҳост, ки ба шумо имкон медиҳанд ба Pipeline ҳамгиро шавед, аз ҷумла васлкунии триггер, масалан, тасвири Docker. Мо мехоҳем ин триггерро барои ҳамон триггер созем package-lock.json. Агар таркиби ҷузъҳое, ки барои сохтани лоиҳа истифода мешуданд, ба гунае тағир ёбад, мо тасвири нави Docker эҷод мекунем. Он баъдтар барои ҷойгир кардани контейнер бо замимаи ҷамъшуда истифода мешавад. Ҳоло ин тавр нест, аммо мо нақша дорем, ки ба меъмории микросервис дар Кубернетес гузарем, ки он дар ширкати мо фаъолона рушд мекунад ва муддати тӯлонӣ ба ҳалли истеҳсолот хидмат мерасонад.

Натиҷа

Ман ҳамаро ташвиқ мекунам, ки Windows-ро партоянд, аммо ин аз он сабаб нест, ки ман чӣ тавр пухтанро намедонам. Сабаб дар он аст, ки аксари ҳалли Opensource мебошанд Стек Linux. шумо хубед захирахоро сарфа кунанд. Ба андешаи ман, оянда ба ҳалли Open Source дар Linux бо ҷомеаи пурқувват тааллуқ дорад.

Профили сухангӯи Александр Синчинов дар GitHub.

DevOps Conf конфронс оид ба ҳамгироии равандҳои рушд, озмоиш ва амалиёт барои мутахассисон аз ҷониби мутахассисон мебошад. Барои ҳамин лоиҳае, ки Искандар дар бораи он сӯҳбат мекард? ба амал бароварда, кор карда, дар рузи намоиш ду барориши бомуваффакият ба амал омад. Дар DevOps Conf дар RIT++ Рӯзҳои 27 ва 28 май ҳолатҳои шабеҳи таҷрибаомӯзон боз ҳам бештар хоҳанд буд. Шумо ба ҳар ҳол метавонед ба вагон охир ҷаҳида ва ҳисобот пешниҳод кунанд ё вақти худро бигиред китоб гирифтан чипта. Бо мо дар Сколково вохӯред!

Манбаъ: will.com

Илова Эзоҳ