.НЕТ Цоре на Линук-у, ДевОпс на коњу

Развили смо ДевОпс најбоље што смо могли. Било нас је 8, а Васја је био најбољи у Виндовсу. Васја је изненада отишао, а ја сам имао задатак да покренем нови пројекат који је обезбедио Виндовс развој. Када сам бацио цео Виндовс развојни пакет на сто, схватио сам да је ситуација мучна...

Овако прича почиње Александра Синчинова на ДевОпсЦонф. Када је водећи стручњак за Виндовс напустио компанију, Александар се питао шта да ради сада. Пређите на Линук, наравно! Александар ће вам испричати како је успео да направи преседан и пренесе део Виндовс развоја на Линук на примеру завршеног пројекта за 100 крајњих корисника.

.НЕТ Цоре на Линук-у, ДевОпс на коњу

Како лако и без напора испоручити пројекат у РПМ користећи ТФС, Пуппет, Линук .НЕТ језгро? Како подржати верзију пројектне базе података ако развојни тим први пут чује речи Постгрес и Фливаи, а рок је прекосутра? Како се интегрисати са Доцкер-ом? Како мотивисати .НЕТ програмере да напусте Виндовс и смутије у корист Пуппет-а и Линук-а? Како решити идеолошке сукобе ако нема ни снаге, ни жеље, ни ресурса да се Виндовс одржава у производњи? О овоме, као и о Веб Деплои-у, тестирању, ЦИ, о пракси коришћења ТФС-а у постојећим пројектима и, наравно, о поквареним штакама и радним решењима, у транскрипту Александровог извештаја.


Дакле, Васја је отишао, задатак је на мени, програмери нестрпљиво чекају са вилама. Када сам коначно схватио да Васја не може бити враћен, прешао сам на посао. За почетак, проценио сам проценат Вин ВМ-а у нашој флоти. Резултат није био у корист Виндовс-а.

.НЕТ Цоре на Линук-у, ДевОпс на коњу

Пошто активно развијамо ДевОпс, схватио сам да нешто треба променити у приступу испоруци нове апликације. Постојало је само једно решење – ако је могуће, пребаците све на Линук. Гугл ми је помогао – у то време .Нет је већ био пренет на Линук, и схватио сам да је то решење!

Зашто .НЕТ цоре у комбинацији са Линуком?

За то је било неколико разлога. Између „плати новац“ и „не плати“, већина ће изабрати друго – као ја. Лиценца за МСДБ кошта око 1 долара, одржавање флоте Виндовс виртуелних машина кошта стотине долара. За велику компанију ово је велики трошак. Зато штедња - први разлог. Не најважнији, али један од значајних.

Виндовс виртуелне машине заузимају више ресурса него њихова Линук браћа - тешки су. С обзиром на размере велике компаније, изабрали смо Линук.

Систем је једноставно интегрисан у постојећи ЦИ. Ми себе сматрамо прогресивним ДевОпс-ом, користимо Бамбоо, Јенкинс и ГитЛаб ЦИ, тако да се већина нашег посла одвија на Линук-у.

Последњи разлог је згодна пратња. Требало је да спустимо баријеру уласку за „пратеће“ — момке који разумеју технички део, обезбеђују непрекидну услугу и одржавају услуге из друге линије. Они су већ били упознати са Линук стеком, тако да им је много лакше да разумеју, подрже и одржавају нови производ него да троше додатне ресурсе да разумеју исту функционалност софтвера за Виндовс платформу.

Захтеви

Прво и основно - погодност новог решења за програмере. Нису сви били спремни за промене, посебно након што је изговорена реч Линукс. Програмери желе свој омиљени Висуал Студио, ТФС са аутотестовима за склопове и смутије. За њих није важно како се одвија испорука у производњу. Стога смо одлучили да не мењамо уобичајени процес и оставимо све непромењено за Виндовс развој.

Потребан нови пројекат интегрисати у постојеће ЦИ. Шине су већ биле ту и сав посао је морао да се обави узимајући у обзир параметре система за управљање конфигурацијом, прихваћене стандарде испоруке и системе за праћење.

Лакоћа подршке и рада, као услов за минимални улазни праг за све нове учеснике из различитих дивизија и одељења за подршку.

Рок - јуче.

Вин Девелопмент Гроуп

Са чиме је Виндовс тим тада радио?

.НЕТ Цоре на Линук-у, ДевОпс на коњу

Сада то могу са сигурношћу да кажем ИдентитиСервер4 је кул бесплатна алтернатива за АДФС са сличним могућностима, или шта Ентити Фрамеворк Цоре - рај за програмере, где не морате да се трудите да пишете СКЛ скрипте, већ опишите упите у бази података ООП терминима. Али онда, током расправе о акционом плану, погледао сам на овај стек као да је сумерски клинопис, препознајући само ПостгреСКЛ и Гит.

У то време смо активно користили марионета као систем управљања конфигурацијом. У већини наших пројеката смо користили ГитЛаб ЦИ, Еластичан, уравнотежене услуге високог оптерећења користећи ХАПроки пратио све са Заббик, лигаменти Графана и Прометеј, Стрелац, а све се ово вртело на комадима гвожђа HPЕСКСи на VMware . Сви то знају - класик жанра.

.НЕТ Цоре на Линук-у, ДевОпс на коњу

Хајде да погледамо и покушамо да схватимо шта се десило пре него што смо започели све ове интервенције.

Шта се десило

ТФС је прилично моћан систем који не само да испоручује код од програмера до финалне производне машине, већ има и сет за веома флексибилну интеграцију са различитим сервисима – да обезбеди ЦИ на вишеплатформском нивоу.

.НЕТ Цоре на Линук-у, ДевОпс на коњу
Раније су то били чврсти прозори. ТФС је користио неколико Буилд агената, који су коришћени за склапање многих пројеката. Сваки агент има 3-4 радника за паралелизацију задатака и оптимизацију процеса. Затим, према плановима за издавање, ТФС је испоручио свеже испечени Буилд на Виндовс сервер апликација.

Шта смо хтели да постигнемо?

Користимо ТФС за испоруку и развој, и покрећемо апликацију на Линук апликацијском серверу, а између њих постоји нека врста магије. Ово Магиц Бок и ту је сол посла пред нама. Пре него што га раставим, направићу корак у страну и рећи неколико речи о апликацији.

Пројекат

Апликација пружа функционалност за руковање припејд картицама.

.НЕТ Цоре на Линук-у, ДевОпс на коњу

Купац

Постојале су две врсте корисника. Прво стекли приступ пријављивањем помоћу ССЛ СХА-2 сертификата. У други постојао је приступ користећи логин и лозинку.

ХАПроки

Затим је захтев клијента отишао на ХАПроки, који је решио следеће проблеме:

  • примарно овлашћење;
  • ССЛ терминација;
  • подешавање ХТТП захтева;
  • захтеви за емитовање.

Сертификат клијента је верификован дуж ланца. Ми - ауторитет и то можемо себи да приуштимо, пошто сами издајемо сертификате клијентима услуга.

Обратите пажњу на трећу тачку, на њу ћемо се вратити мало касније.

Бацкенд

Планирали су да направе бацкенд на Линук-у. Бацкенд ступа у интеракцију са базом података, учитава потребну листу привилегија и затим, у зависности од тога које привилегије има овлашћени корисник, омогућава приступ за потписивање финансијских докумената и њихово слање на извршење, или генерисање неке врсте извештаја.

Уштеда уз ХАПроки

Поред два контекста којима се сваки клијент кретао, постојао је и контекст идентитета. ИдентитиСервер4 само вам омогућава да се пријавите, ово је бесплатан и моћан аналог за АДФС - Услуге федерације Ацтиве Дирецтори.

Захтев за идентитет је обрађен у неколико корака. Први корак - клијент ушао у позадину, који је комуницирао са овим сервером и проверавао присуство токена за клијента. Ако није пронађен, захтев је враћен назад у контекст из којег је дошао, али са преусмеравањем, а са преусмеравањем је отишао на идентитет.

Други корак - захтев је примљен на страницу за ауторизацију у ИдентитиСерверу, где се клијент регистровао, а тај дуго очекивани токен се појавио у бази података ИдентитиСервер.

Трећи корак - клијент је преусмерен назад на контекст из којег је дошло.

.НЕТ Цоре на Линук-у, ДевОпс на коњу

ИдентитиСервер4 има функцију: враћа одговор на захтев за враћање преко ХТТП-а. Без обзира колико смо се мучили са подешавањем сервера, колико год да смо се просветлили документацијом, сваки пут смо примили почетни захтев клијента са УРЛ-ом који је дошао преко ХТТПС-а, а ИдентитиСервер је враћао исти контекст, али са ХТТП-ом. Били смо шокирани! И све ово смо пренели кроз контекст идентитета на ХАПроки, а у заглављима смо морали да модификујемо ХТТП протокол у ХТТПС.

Какво је побољшање и где сте уштедели?

Уштедели смо новац коришћењем бесплатног решења за ауторизацију групе корисника, ресурса, пошто ИдентитиСервер4 нисмо поставили као посебан чвор у посебан сегмент, већ смо га користили заједно са бекендом на истом серверу на коме се покреће бекенд апликације. .

Како би требало да функционише

Дакле, као што сам обећао - Магиц Бок. Већ разумемо да ћемо загарантовано прећи на Линук. Хајде да формулишемо конкретне задатке који су захтевали решења.

.НЕТ Цоре на Линук-у, ДевОпс на коњу

Луткарски манифести. За испоруку и управљање конфигурацијом услуга и апликација, морали су бити написани цоол рецепти. Ролна оловке елоквентно показује колико је то брзо и ефикасно урађено.

Начин доставе. Стандард је број обртаја у минути. Сви разумеју да у Линуку не можете без њега, али сам пројекат, након склапања, био је скуп извршних ДЛЛ датотека. Било их је око 150, пројекат је био прилично тежак. Једино хармонично решење је упаковати ову бинарну датотеку у РПМ и из ње применити апликацију.

Версионинг. Морали смо да издајемо веома често, и морали смо да одлучимо како да формирамо име пакета. Ово је питање нивоа интеграције са ТФС-ом. Имали смо агента за изградњу на Линук-у. Када ТФС пошаље задатак руковаоцу - раднику - агенту за изградњу, он му такође прослеђује гомилу променљивих које завршавају у окружењу процеса руковања. Ове променљиве окружења садрже назив верзије, назив верзије и друге варијабле. Прочитајте више о томе у одељку „Изградња РПМ пакета“.

Подешавање ТФС-а сводио се на постављање Цевовода. Раније смо прикупљали све Виндовс пројекте на Виндовс агентима, али сада се појављује Линук агент - Буилд агент, који треба да буде укључен у групу за изградњу, обогаћен неким артефактима и рећи који тип пројеката ће бити изграђен на овом Буилд агенту , и некако модификовати цевовод.

ИдентитиСервер. АДФС није наш начин, ми идемо на Опен Соурце.

Хајде да прођемо кроз компоненте.

Магиц Бок

Састоји се од четири дела.

.НЕТ Цоре на Линук-у, ДевОпс на коњу

Линук Буилд агент. Линук, јер ми градимо за њега - логично је. Овај део је рађен у три корака.

  • Конфигуришите раднике а не сама, пошто се очекивао дистрибуиран рад на пројекту.
  • Инсталирајте .НЕТ Цоре 1.к. Зашто 1.к када је 2.0 већ доступан у стандардном спремишту? Јер када смо започели развој, стабилна верзија је била 1.09 и одлучено је да се пројекат направи на основу ње.
  • Гит 2.к.

РПМ-репозиторијум. РПМ пакете је требало негде ускладиштити. Претпостављало се да ћемо користити исто корпоративно РПМ спремиште које је доступно свим Линук домаћинима. То су они урадили. Сервер спремишта је конфигурисан вебхоок који је преузео потребан РПМ пакет са наведене локације. Верзија пакета је пријављена веб-хуку од стране Буилд агента.

ГитЛаб. Пажња! ГитЛаб овде не користе програмери, већ оперативно одељење за контролу верзија апликација, верзија пакета, праћење статуса свих Линук машина и чува рецепт - све манифесте лутке.

марионета — решава сва контроверзна питања и испоручује тачно конфигурацију коју желимо од Гитлаба.

Почињемо да ронимо. Како функционише испорука ДЛЛ-а у РПМ?

Испорука ДДЛ у РПМ

Рецимо да имамо роцкстар за развој .НЕТ. Користи Висуал Студио и креира грану издања. Након тога, он га поставља у Гит, а Гит овде је ТФС ентитет, односно, то је спремиште апликације са којим програмер ради.

.НЕТ Цоре на Линук-у, ДевОпс на коњу

Након чега ТФС види да је стигло ново урезивање. Која апликација? У ТФС поставкама постоји ознака која показује које ресурсе има одређени Буилд агент. У овом случају, он види да градимо .НЕТ Цоре пројекат и бира агента за Линук Буилд из скупа.

Агент за изградњу прима изворе и преузима потребне зависности из .НЕТ спремишта, нпм итд. и након израде саме апликације и накнадног паковања, шаље РПМ пакет у РПМ спремиште.

С друге стране, дешава се следеће. Инжењер оперативног одељења је директно укључен у имплементацију пројекта: мења верзије пакета у Хиера у спремишту где се чува рецепт апликације, након чега се Пуппет активира иум, преузима нови пакет из спремишта, а нова верзија апликације је спремна за употребу.

.НЕТ Цоре на Линук-у, ДевОпс на коњу

Све је једноставно речима, али шта се дешава унутар самог Буилд агента?

Паковање ДЛЛ РПМ

Примљени извори пројекта и задатак изградње из ТФС-а. Буилд агент почиње изградњу самог пројекта из извора. Састављени пројекат је доступан у комплету ДЛЛ датотеке, који су упаковани у зип архиву да би се смањило оптерећење система датотека.

ЗИП архива се баца у директоријум за прављење РПМ пакета. Затим, Басх скрипта иницијализује променљиве окружења, проналази верзију Буилд-а, верзију пројекта, путању до директоријума за изградњу и покреће РПМ-буилд. Када се изградња заврши, пакет се објављује на локално спремиште, који се налази на агенту за изградњу.

Затим, од агента за изградњу до сервера у РПМ спремишту ЈСОН захтев је послат означавајући назив верзије и верзије. Вебхоок, о којем сам раније говорио, преузима управо овај пакет из локалног спремишта на агенту за изградњу и чини нови склоп доступним за инсталацију.

.НЕТ Цоре на Линук-у, ДевОпс на коњу

Зашто баш ова шема испоруке пакета у РПМ спремиште? Зашто не могу одмах да пошаљем састављени пакет у спремиште? Чињеница је да је то услов за осигурање безбедности. Овај сценарио ограничава могућност да неовлашћени људи учитавају РПМ пакете на сервер који је доступан свим Линук машинама.

Верзија базе података

На консултацији са развојним тимом испоставило се да су момци ближи МС СКЛ-у, али у већини пројеката који нису Виндовс ми смо већ користили ПостгреСКЛ свом снагом. Пошто смо већ одлучили да напустимо све плаћено, почели смо да користимо ПостгреСКЛ и овде.

.НЕТ Цоре на Линук-у, ДевОпс на коњу

У овом делу желим да вам кажем како смо верзионисали базу података и како смо бирали између Фливаи-а и Ентити Фрамеворк Цоре-а. Хајде да погледамо њихове предности и недостатке.

Против

Фливаи иде само у једном правцу, ми не можемо да се вратимо - ово је значајан недостатак. Можете га упоредити са Ентити Фрамеворк Цоре на друге начине – у смислу погодности за програмере. Сећате се да смо ово ставили у први план, а главни критеријум је био да се ништа не мења за Виндовс развој.

За Фливаи нас била је потребна нека врста омотачада момци не пишу СКЛ упити. Они су много ближи раду у ООП терминима. Написали смо упутства за рад са објектима базе података, генерисали СКЛ упит и извршили га. Нова верзија базе је спремна, тестирана - све је у реду, све ради.

Ентити Фрамеворк Цоре има минус - под великим оптерећењем гради субоптималне СКЛ упите, а смањење у бази података може бити значајно. Али пошто немамо услугу са великим оптерећењем, не рачунамо оптерећење у стотинама РПС-а, прихватили смо ове ризике и делегирали проблем на себе.

Прозодија

Ентити Фрамеворк Цоре ради из кутије и лако се развија, и Фливаи Лако се интегрише у постојећи ЦИ. Али ми то чинимо згодним за програмере :)

Процедура ролл-уп

Пуппет види да долази промена у верзији пакета, укључујући и ону која је одговорна за миграцију. Прво, он инсталира пакет који садржи скрипте за миграцију и функционалност у вези са базом података. Након овога, апликација која ради са базом података се поново покреће. Следи инсталација преосталих компоненти. Редослед којим се пакети инсталирају и покрећу апликације описан је у манифесту лутке.

Апликације користе осетљиве податке, као што су токени, лозинке базе података, све ово се увлачи у конфигурацију из Пуппет мастер-а, где се чувају у шифрованом облику.

ТФС проблеми

Након што смо одлучили и схватили да све заиста ради за нас, одлучио сам да погледам шта се дешава са склоповима у ТФС-у у целини за Вин развојно одељење на другим пројектима – да ли смо градили/објављивали брзо или не, и открили значајне проблеме са брзином .

За склапање једног од главних пројеката потребно је 12-15 минута - то је дуго, не можете тако живети. Брза анализа је показала ужасан пад у И/О, а ово је било на низовима.

Након што сам га анализирао компоненту по компоненту, идентификовао сам три жаришта. Први - "Касперски антивирус", који скенира изворе на свим Виндовс Буилд агентима. Друго - виндовс Индексер. Није онемогућено и све је индексирано у реалном времену на агентима за изградњу током процеса имплементације.

Треће - Нпм инсталл. Испоставило се да смо у већини гасовода користили управо овај сценарио. Зашто је лош? Процедура Нпм инсталације се покреће када се формира стабло зависности пацкаге-лоцк.јсон, где су снимљене верзије пакета који ће се користити за изградњу пројекта. Недостатак је што Нпм инсталл сваки пут извлачи најновије верзије пакета са Интернета, а то одузима доста времена у случају великог пројекта.

Програмери понекад експериментишу на локалној машини да би тестирали како одређени део или цео пројекат функционише. Понекад се испоставило да је све кул локално, али су то саставили, размотали и ништа није радило. Почињемо да схватамо у чему је проблем - да, различите верзије пакета са зависностима.

одлука

  • Извори у АВ изузецима.
  • Онемогући индексирање.
  • Иди на нпм ци.

Предности нпм ци су у томе што смо Сакупљамо стабло зависности једном, и добијамо прилику да обезбедимо програмера актуелна листа пакета, са којим може локално да експериментише колико год жели. Ово штеди време програмери који пишу код.

Конфигурација

Сада мало о конфигурацији спремишта. Историјски гледано користимо веза за управљање репозиторијумима, укључујући Интерни РЕПО. Ово интерно спремиште садржи све компоненте које користимо за интерне сврхе, на пример, самописно праћење.

.НЕТ Цоре на Линук-у, ДевОпс на коњу

Такође користимо НуГет, јер има боље кеширање у поређењу са другим менаџерима пакета.

Резултат

Након што смо оптимизовали Буилд Агенте, просечно време изградње је смањено са 12 минута на 7.

Ако пребројимо све машине које смо могли да користимо за Виндовс, али смо у овом пројекту прешли на Линукс, уштедели смо око 10 долара и то само на лиценцама, и више ако узмемо у обзир садржај.

Планови

За наредни квартал планирали смо да радимо на оптимизацији испоруке кода.

Прелазак на претходно направљену Доцкер слику. ТФС је одлична ствар са много додатака који вам омогућавају да се интегришете у Пипелине, укључујући склапање засновано на окидачу, рецимо, Доцкер слике. Желимо да направимо овај окидач за исти пацкаге-лоцк.јсон. Ако се састав компоненти коришћених за изградњу пројекта некако промени, правимо нову Доцкер слику. Касније се користи за постављање контејнера са склопљеном апликацијом. Сада то није случај, али планирамо да пређемо на микросервисну архитектуру у Кубернетес-у, која се активно развија у нашој компанији и већ дуже време опслужује производна решења.

Резиме

Охрабрујем све да баце Виндовс, али то није зато што не знам да га кувам. Разлог је тај што већина решења отвореног кода јесте Линук стек. да ли си добро уштеде на ресурсима. По мом мишљењу, будућност припада решењима отвореног кода на Линук-у са моћном заједницом.

Профил говорника Александра Синчинова на ГитХуб-у.

ДевОпс Цонф је конференција о интеграцији процеса развоја, тестирања и рада за професионалце од стране професионалаца. Зато је пројекат о коме је Александар говорио? реализована и у функцији, а на дан извођења била су два успешна издања. на ДевОпс Цонф на РИТ++ 27. и 28. маја биће још више сличних случајева од практичара. Још увек можете да ускочите у последњи вагон и поднети извештај или узмите времена резервисати Улазница. Упознајте нас у Сколкову!

Извор: ввв.хабр.цом

Додај коментар