.NET Nwayo sou Linux, DevOps sou chwal

Nou devlope DevOps jan nou te kapab. Te gen 8 nan nou, ak Vasya te pi fre sou Windows. Toudenkou Vasya te kite, epi mwen te gen travay pou lanse yon nouvo pwojè ki te apwovizyone pa devlopman Windows. Lè mwen jete tout chemine devlopman Windows sou tab la, mwen reyalize ke sitiyasyon an te yon doulè...

Men ki jan istwa a kòmanse Alexandra Sinchinova sou DevOpsConf. Lè espesyalis dirijan Windows la kite konpayi an, Alexander te mande sa pou l fè kounye a. Chanje nan Linux, nan kou! Alexander pral di w kouman li te jere yo kreye yon presedan ak transfere yon pati nan devlopman Windows nan Linux lè l sèvi avèk egzanp lan nan yon pwojè fini pou 100 itilizatè fen.

.NET Nwayo sou Linux, DevOps sou chwal

Ki jan yo fasil epi fasilman delivre yon pwojè nan RPM lè l sèvi avèk TFS, Puppet, Linux .NET nwayo? Ki jan yo sipòte vèsyon yon baz done pwojè si ekip devlopman an tande mo Postgres ak Flyway pou premye fwa, epi dat limit la se apre demen? Ki jan yo entegre ak Docker? Ki jan yo motive devlopè .NET yo abandone Windows ak fwete an favè Puppet ak Linux? Ki jan yo rezoud konfli ideyolojik si pa gen ni fòs la, ni dezi a, ni resous yo kenbe Windows nan pwodiksyon? Konsènan sa a, osi byen ke sou Web Deploy, tès, CI, sou pratik yo nan itilize TFS nan pwojè ki deja egziste, ak, nan kou, sou beki kase ak solisyon k ap travay, nan rapò Alexander a.


Se konsa, Vasya kite, travay la se sou mwen, devlopè yo ap tann ak pitchforks ak enpasyans. Lè mwen finalman reyalize ke Vasya pa t 'kapab retounen, mwen te desann nan biznis. Pou kòmanse, mwen evalye pousantaj Win VMs nan flòt nou an. Nòt la pa t an favè Windows.

.NET Nwayo sou Linux, DevOps sou chwal

Depi nou aktivman devlope DevOps, mwen reyalize ke yon bagay bezwen chanje nan apwòch la pou lanse yon nouvo aplikasyon. Te gen yon sèl solisyon - si sa posib, transfere tout bagay nan Linux. Google te ede m '- nan moman sa a .Net te deja pò nan Linux, epi mwen reyalize ke sa a se solisyon an!

Poukisa nwayo .NET konbine avèk Linux?

Te gen plizyè rezon pou sa. Ant "peye lajan" ak "pa peye", majorite a pral chwazi dezyèm lan - tankou mwen. Yon lisans pou MSDB koute apeprè $ 1; kenbe yon flòt Windows machin vityèl koute dè santèn de dola. Pou yon gwo konpayi sa a se yon gwo depans. Se poutèt sa ekonomize - premye rezon. Pa pi enpòtan an, men youn nan pi enpòtan an.

Machin vityèl Windows yo pran plis resous pase frè Linux yo. yo lou. Bay echèl la nan gwo konpayi an, nou te chwazi Linux.

Se sistèm nan tou senpleman entegre nan CI ki deja egziste. Nou konsidere tèt nou DevOps pwogresif, nou itilize Banbou, Jenkins ak GitLab CI, kidonk pifò nan travay nou an kouri sou Linux.

Rezon ki sot pase a se akonpayman pratik. Nou te bezwen bese baryè pou antre pou "eskòt" - mesye yo ki konprann pati teknik la, asire sèvis san enteripsyon, epi kenbe sèvis nan dezyèm liy lan. Yo te deja abitye ak pil Linux la, kidonk li pi fasil pou yo konprann, sipòte ak kenbe yon nouvo pwodwi pase depanse resous adisyonèl pou konprann fonksyonalite lojisyèl menm jan an pou platfòm Windows la.

Kondisyon pou

Premye ak bagay ki pi enpòtan an se konvenyans nan nouvo solisyon an pou devlopè. Se pa tout nan yo ki te pare pou chanjman, sitou apre mo Linux te pale. Devlopè vle yo pi renmen Visual Studio, TFS ak ototests pou asanble ak fwete. Ki jan livrezon nan pwodiksyon rive pa enpòtan pou yo. Se poutèt sa, nou deside pa chanje pwosesis nòmal la epi kite tout bagay chanje pou devlopman Windows.

Nouvo pwojè nesesè entegre nan CI ki deja egziste. Ray yo te deja la ak tout travay la te dwe fèt pran an kont paramèt yo nan sistèm nan jesyon konfigirasyon, estanda livrezon aksepte ak sistèm siveyans.

Fasilite sipò ak operasyon, kòm yon kondisyon pou papòt minimòm antre pou tout nouvo patisipan ki soti nan diferan divizyon ak depatman sipò.

Dat limit - yè.

Genyen Gwoup Devlopman

Ki sa ki te ekip Windows la te travay ak lè sa a?

.NET Nwayo sou Linux, DevOps sou chwal

Koulye a, mwen ka di sa avèk konfyans IdentityServer4 se yon altènatif fre gratis nan ADFS ak kapasite menm jan an, oswa ki sa? Nwayo chapant antite — yon paradi pou yon pwomotè, kote ou pa bezwen deranje ak ekri script SQL, men dekri demann nan baz done a an tèm OOP. Men, answit, pandan diskisyon plan aksyon an, mwen te gade pil sa a tankou si se te cuneiform sumeryen, mwen te rekonèt sèlman PostgreSQL ak Git.

Nan tan sa a nou te aktivman itilize Mannken kòm yon sistèm jesyon konfigirasyon. Nan pifò nan pwojè nou yo nou te itilize GitLab CI, Elastik, balanse sèvis wo-chaj ak èd la HAProxy kontwole tout bagay ak èd Zabbix, ligaman grafana и Prometheus, Jaeger, ak tout bagay sa yo te k ap vire sou moso pyès ki nan konpitè HPESXi sou VMware. Tout moun abitye ak klasik yo nan genre a.

.NET Nwayo sou Linux, DevOps sou chwal

Ann gade epi eseye konprann sa ki te pase anvan nou kòmanse tout entèvansyon sa yo.

Sak pase

TFS se yon sistèm san patipri pwisan ki pa sèlman delivre kòd soti nan pwomotè a nan machin pwodiksyon final la, men tou li gen yon seri pou entegrasyon trè fleksib ak divès kalite sèvis - bay CI sou yon nivo kwa-platfòm.

.NET Nwayo sou Linux, DevOps sou chwal
Précédemment, sa yo te fenèt solid. TFS te itilize plizyè ajan Build, kote anpil pwojè yo te rasanble. Chak ajan gen 3-4 travayè pou paralelize travay yo ak optimize pwosesis la. Lè sa a, dapre plan lage, TFS te delivre Build ki fèk kwit nan sèvè aplikasyon Windows la.

Sa nou te vle reyalize

Nou itilize TFS pou livrezon ak devlopman, epi nou kouri aplikasyon an sou yon sèvè Aplikasyon Linux, epi gen kèk maji ant yo. Sa a Bwat majik e gen sèl nan travay ki devan yo. Anvan mwen demonte li, mwen pral fè yon etap sou kote epi di kèk mo sou aplikasyon an.

Pwojè

Aplikasyon an bay fonksyonalite pou manyen kat prepeye.

.NET Nwayo sou Linux, DevOps sou chwal

Kliyan

Te gen de kalite itilizatè. Premye jwenn aksè lè w konekte ak yon sètifika SSL SHA-2. U dezyèm lan te gen aksè lè l sèvi avèk yon login ak yon modpas.

HAProxy

Lè sa a, demann kliyan an te ale nan HAProxy, ki te rezoud pwoblèm sa yo:

  • otorizasyon prensipal;
  • SSL revokasyon;
  • ajiste demann HTTP;
  • demann emisyon.

Sètifika kliyan an te verifye sou yon chèn. Nou - otorite epi nou ka peye sa a, depi nou menm nou bay sètifika bay kliyan sèvis yo.

Peye atansyon sou twazyèm pwen an, nou pral tounen sou li yon ti kras pita.

backend

Backend la te planifye yo dwe bati sou Linux. Backend la reyaji ak baz done a, chaje lis privilèj ki nesesè yo epi lè sa a, tou depann de privilèj itilizatè otorize a genyen, bay aksè pou siyen dokiman finansye yo epi voye yo pou ekzekisyon, oswa jenere kèk kalite rapò.

Ekonomi ak HAProxy

Anplis de kontèks ke chak kliyan te mache nan, te gen tou yon kontèks idantite. IdentityServer4 jis pèmèt ou konekte, sa a se yon analòg gratis ak pwisan pou ADFS - Sèvis Federasyon Anyè aktif.

Demann idantite a te trete nan plizyè etap. Premye etap - kliyan te antre nan backend la, ki te kominike ak sèvè sa a epi tcheke pou prezans yon siy pou kliyan an. Si yo pa jwenn li, yo te retounen demann lan tounen nan kontèks kote li soti, men ak yon redireksyon, epi ak yon redireksyon li te ale nan idantite.

Dezyèm etap - demann lan te resevwa nan paj otorizasyon nan IdentityServer, kote kliyan an te anrejistre, ak siy sa a ki long dire parèt nan baz done IdentityServer la.

Twazyèm etap la se kliyan an te redireksyon tounen nan kontèks kote li soti.

.NET Nwayo sou Linux, DevOps sou chwal

IdentityServer4 gen yon karakteristik: li retounen repons lan nan demann lan retounen atravè HTTP. Kèlkeswa kantite lajan nou te plede ak konfigirasyon sèvè a, kèlkeswa kantite lajan nou te eklere tèt nou ak dokiman an, nou chak fwa te resevwa premye demann kliyan an ak yon URL ki te vini atravè HTTPS, ak IdentityServer te retounen menm kontèks la, men ak HTTP. Nou te choke! Epi nou transfere tout bagay sa yo atravè kontèks idantite a nan HAProxy, ak nan tèt yo nou te oblije modifye pwotokòl la HTTP nan HTTPS.

Ki sa ki amelyorasyon ak ki kote ou te sove?

Nou te ekonomize lajan lè nou itilize yon solisyon gratis pou otorize yon gwoup itilizatè, resous, paske nou pa t plase IdentityServer4 kòm yon ne separe nan yon segman separe, men nou te itilize li ansanm ak backend la sou menm sèvè kote backend aplikasyon an kouri. .

Ki jan li ta dwe travay

Se konsa, jan mwen te pwomèt la - Magic Box. Nou deja konprann ke nou garanti nou ap deplase nan direksyon Linux. Se pou yo fòmile travay espesifik ki mande solisyon.

.NET Nwayo sou Linux, DevOps sou chwal

mannken manifeste. Pou delivre ak jere konfigirasyon sèvis la ak aplikasyon an, yo te dwe ekri resèt fre. Yon woulo kreyon montre avèk elokans kouman li te fè rapid ak efikasite.

Metòd livrezon. Estanda a se RPM. Tout moun konprann ke nan Linux ou pa ka fè san li, men pwojè a li menm, apre asanble, se te yon seri dosye ègzèkutabl DLL. Te gen apeprè 150 nan yo, pwojè a te byen difisil. Sèl solisyon an Harmony se pake binè sa a nan RPM epi deplwaye aplikasyon an soti nan li.

Versioning. Nou te oblije lage trè souvan, epi nou te oblije deside ki jan yo fòme non pake a. Sa a se yon kesyon de nivo entegrasyon ak TFS. Nou te gen yon ajan bati sou Linux. Lè TFS voye yon travay bay moun k ap okipe a - travayè - bay ajan Build la, li tou pase li yon pakèt varyab ki tonbe nan anviwònman an nan pwosesis la okipe. Varyab anviwònman sa yo genyen non Build, non vèsyon an, ak lòt varyab. Li plis sou sa nan seksyon "Konstwi yon pake RPM".

Mete kanpe TFS te desann nan mete kanpe Pipeline. Précédemment, nou te rasanble tout pwojè Windows sou ajan Windows yo, men kounye a yon ajan Linux parèt - yon ajan Build, ki bezwen enkli nan gwoup build la, anrichi ak kèk zafè, epi li di ki kalite pwojè yo pral rasanble sou ajan Build sa a. , ak yon jan kanmenm modifye Pipeline la.

IdentityServer. ADFS se pa wout nou, nou se pou Open Source.

Ann ale nan eleman yo.

Bwat majik

Konsiste de kat pati.

.NET Nwayo sou Linux, DevOps sou chwal

Linux Build ajan. Linux, paske nou bati pou li - li lojik. Pati sa a te fè nan twa etap.

  • Konfigirasyon travayè yo epi yo pa poukont li, depi travay distribye sou pwojè a te espere.
  • Enstale .NET Nwayo 1.x. Poukisa 1.x lè 2.0 deja disponib nan depo estanda a? Paske lè nou te kòmanse devlopman, vèsyon an ki estab te 1.09, epi li te deside fè pwojè a ki baze sou li.
  • Git 2.x.

RPM-repozitwa. Pakè RPM bezwen yo dwe estoke yon kote. Yo te sipoze ke nou ta sèvi ak menm depo RPM antrepriz ki disponib pou tout lame Linux. Se konsa yo te fè. Se sèvè depo a configuré zen entènèt ki telechaje pake RPM ki nesesè yo soti nan kote espesifye a. Ajan Build la te rapòte vèsyon pake a bay webhook la.

GitLab. Atansyon! GitLab isit la se pa devlopè yo itilize, men pa depatman operasyon yo kontwole vèsyon aplikasyon, vèsyon pake, kontwole eta a nan tout machin Linux, epi li magazen resèt la - tout manifeste Puppet.

Mannken — rezoud tout pwoblèm kontwovèsyal ak delivre egzakteman konfigirasyon nou vle soti nan Gitlab.

Nou kòmanse plonje. Ki jan livrezon DLL travay nan RPM?

Livrezon DDL a RPM

Ann di nou gen yon etwal devlopman .NET. Li itilize Visual Studio epi li kreye yon branch lage. Apre sa, li telechaje li nan Git, ak Git isit la se yon antite TFS, se sa ki, li se repozitwa aplikasyon an ke pwomotè a travay avèk yo.

.NET Nwayo sou Linux, DevOps sou chwal

Apre sa, TFS wè ke yon nouvo komite te rive. Ki aplikasyon? Nan paramèt TFS yo gen yon etikèt ki endike ki resous yon ajan Build patikilye genyen. Nan ka sa a, li wè ke nou ap bati yon pwojè .NET Core epi li chwazi yon ajan Linux Build nan pisin lan.

Ajan Build la resevwa sous yo epi telechaje sa ki nesesè yo Depandans yo c .NET depo, npm, elatriye. epi apre li fin bati aplikasyon an tèt li ak anbalaj ki vin apre, voye pake RPM a nan depo RPM la.

Nan lòt men an, sa ki annapre yo rive. Enjenyè depatman operasyon an patisipe dirèkteman nan deplwaye pwojè a: li chanje vèsyon pakè yo Hiera nan depo a kote resèt aplikasyon an estoke, apre sa Puppet deklannche Yum, rekipere nouvo pake a nan depo a, epi nouvo vèsyon aplikasyon an pare pou itilize.

.NET Nwayo sou Linux, DevOps sou chwal

Tout bagay se senp nan mo, men kisa k ap pase andedan sou ajan an Build tèt li?

DLL RPM anbalaj

Nou te resevwa sous pwojè yo ak travay asanble a nan men TFS. Bati ajan kòmanse bati pwojè a tèt li soti nan sous. Pwojè a reyini disponib kòm yon seri DLL fichye yo, ki pake nan yon achiv postal pou redwi chaj la sou sistèm dosye a.

Yo jete achiv postal la nan anyè a bati pake RPM. Apre sa, script Bash inisyalize varyab anviwònman yo, jwenn vèsyon an Bati, vèsyon pwojè a, chemen an nan anyè bati a, epi lanse RPM-build. Yon fwa bati a fini, pake a pibliye nan depo lokal yo, ki sitiye sou Build Agent la.

Apre sa, soti nan ajan Konstwi nan sèvè a nan depo RPM la Yo voye demann JSON ki endike non vèsyon an ak bati. Webhook, ke mwen te pale sou pi bonè, telechaje pake sa a soti nan repozitwa lokal la sou ajan an Konstwi epi fè nouvo asanble a disponib pou enstalasyon.

.NET Nwayo sou Linux, DevOps sou chwal

Poukisa konplo patikilye sa a pou delivre yon pake nan depo RPM la? Poukisa mwen pa ka imedyatman voye pake a rasanble nan depo a? Pwen an se ke sa a se yon kondisyon pou sekirite. Senaryo sa a limite posiblite pou moun ki pa otorize telechaje pakè RPM sou yon sèvè ki aksesib pou tout machin Linux.

Vèsyon baz done

Nan konsiltasyon an ak ekip devlopman an, li te tounen soti ke mesye yo te pi pre MS SQL, men nan pifò pwojè ki pa Windows nou te deja itilize PostgreSQL ak tout fòs nou. Depi nou te deja deside abandone tout bagay peye, nou te kòmanse sèvi ak PostgreSQL isit la tou.

.NET Nwayo sou Linux, DevOps sou chwal

Nan pati sa a mwen vle di w kijan nou te fè vèsyon baz done a ak ki jan nou te chwazi ant Flyway ak Entity Framework Core. Ann gade avantaj ak dezavantaj yo.

Kont

Flyway sèlman ale yon fason, nou nou pa ka woule tounen - sa a se yon dezavantaj enpòtan. Ou ka konpare li ak Entity Framework Core nan lòt fason - soti nan pwen de vi nan konvenyans pwomotè. Ou sonje ke nou mete sa a nan forefront, ak kritè prensipal la pa te chanje anyen pou devlopman Windows.

Pou Flyway nou yo te bezwen kèk kalite anbalajpou mesye yo pa ekri Rekèt SQL. Li pi pre pou yo opere an tèm OOP. Nou te ekri enstriksyon pou travay ak objè baz done, te pwodwi yon rechèch SQL epi egzekite li. Nouvo vèsyon baz done a pare, li te teste - tout bagay anfòm, tout bagay ap travay.

Entity Framework Nwayo gen yon mwens - anba chay lou li bati demann SQL ki pa pi bon, ak drawdown la nan baz done a ka enpòtan. Men, depi nou pa gen yon gwo chaj sèvis, nou pa kalkile chay la nan dè santèn de RPS, nou te aksepte risk sa yo ak delege pwoblèm nan pwochen nou.

Pou

Nwayo chapant antite travay soti nan bwat la epi li fasil pou devlope, ak Flyway Fasil entegre nan CI ki deja egziste. Men, nou fè li pratik pou devlopè :)

Pwosedi woule-up

Puppet wè ke yon chanjman nan vèsyon pake ap vini, ki gen ladan youn nan ki responsab pou migrasyon an. Premyèman, li enstale yon pake ki gen script migrasyon ak fonksyonalite ki gen rapò ak baz done a. Apre sa, aplikasyon an ki travay ak baz done a rekòmanse. Apre enstalasyon an nan eleman ki rete yo. Yo dekri lòd pakè yo enstale ak aplikasyon yo lanse nan manifest Puppet la.

Aplikasyon yo sèvi ak done sansib, tankou marqueur, modpas baz done, tout bagay sa yo rale nan konfigirasyon an soti nan Puppet mèt, kote yo estoke nan fòm chiffres.

Pwoblèm TFS

Apre nou te deside ak reyalize ke tout bagay vrèman ap travay pou nou, mwen te deside gade sa ki te pase ak asanble yo nan TFS an jeneral pou depatman an Win devlopman sou lòt pwojè - si nou te pral bati / pibliye byen vit oswa ou pa, ak dekouvri pwoblèm enpòtan ak vitès.

Youn nan pwojè prensipal yo pran 12-15 minit pou rasanble - sa se yon bon bout tan, ou pa ka viv konsa. Yon analiz rapid te montre yon drawdown terib nan I / O, ak sa a te sou etalaj yo.

Apre analize li eleman pa eleman, mwen idantifye twa fokis. Premye - "Kaspersky antivirus", ki analize sous sou tout ajan Windows Build. Dezyèm - Windows Indexer. Li pa t 'enfim, epi tout bagay nan pwosesis deplwaman an te endèks an tan reyèl sou ajan yo Build.

Twazyèm - Npm enstale. Li te tounen soti ke nan pifò Pipelines nou te itilize egzakteman senaryo sa a. Poukisa li move? Pwosedi enstalasyon Npm la kouri lè pye bwa a depandans fòme nan package-lock.json, kote vèsyon yo nan pakè yo pral itilize yo bati pwojè a yo anrejistre. Dezavantaj la se ke Npm enstale rale dènye vèsyon yo nan pakè soti nan entènèt la chak fwa, ak sa a pran anpil tan nan ka a nan yon gwo pwojè.

Devlopè pafwa fè eksperyans sou yon machin lokal yo teste kijan yon pati patikilye oswa tout pwojè travay. Pafwa li te tounen soti ke tout bagay te fre lokalman, men yo reyini li, woule li soti, e pa gen anyen ki te travay. Nou ap kòmanse kalkile ki pwoblèm nan - wi, diferan vèsyon pakè ak depandans.

desizyon

  • Sous nan eksepsyon AV.
  • Enfim Indexing.
  • Ale nan npmci.

Avantaj ki genyen nan npm ci se ke nou Nou kolekte pye bwa a depandans yon fwa, epi nou jwenn opòtinite pou bay pwomotè a aktyèl lis pakè yo, ak ki li ka fè eksperyans lokalman otan li renmen. Sa a ekonomize tan devlopè ki ekri kòd.

Konfigirasyon

Koulye a, yon ti kras sou konfigirasyon an depo. Istorikman nou te itilize Nexus pou jere depo, ki gen ladan REPO entèn. Repozitwa entèn sa a gen tout eleman ke nou itilize pou rezon entèn, pou egzanp, siveyans ekri pwòp tèt ou.

.NET Nwayo sou Linux, DevOps sou chwal

Nou itilize tou NuGet, depi li kachèt pi bon pase lòt administratè pake.

Rezilta

Apre nou te optimize Ajan Konstwi yo, tan an mwayèn konstriksyon te redwi soti nan 12 minit a 7.

Si nou konte tout machin yo ke nou te kapab itilize pou Windows, men chanje nan Linux nan pwojè sa a, nou sove sou $ 10, 000. Epi sa a se sèlman sou lisans, epi si nou pran an kont kontni an, plis.

Plan

Plan pou pwochen trimès la se travay sou optimize livrezon kòd.

Chanje nan yon imaj Docker pre-konstriksyon. TFS se yon bagay fre ak yon anpil nan grefon ki pèmèt ou entegre nan Pipeline, ki gen ladan bati ki baze sou deklanche nan, di, yon imaj Docker. Nou vle fè deklanche sa a sou yon sèl la menm package-lock.json. Si konpozisyon eleman yo itilize pou konstwi pwojè a chanje yon jan kanmenm, nou bati yon nouvo imaj Docker. Li se imedyatman itilize deplwaye yon veso ak aplikasyon an reyini. Sa a se pa ka a kounye a, men nou ap planifye chanje nan yon achitekti mikwosèvis nan Kubernetes, ki ap devlope aktivman nan konpayi nou an epi ki te sèvi solisyon pwodiksyon pou yon tan long.

Rezime

Mwen ankouraje tout moun jete Windows, men se pa paske mwen pa konnen ki jan yo kwit li. Rezon ki fè la se ke pifò solisyon Opensource yo Pile Linux. Ou bon? ekonomize sou resous yo. Nan opinyon mwen, lavni an manti nan solisyon Open Source sou Linux ak yon kominote pwisan.

Pwofil oratè Alexander Sinchinov sou GitHub.

DevOps Conf se yon konferans sou entegrasyon devlopman, tès ak operasyon pwosesis pou pwofesyonèl pa pwofesyonèl. Se poutèt sa pwojè Alexander te pale a? aplike ak kouri, ak de degaje siksè nan jou pèfòmans lan. Sou DevOps Conf nan RIT++ Sou 27 ak 28 me pral gen menm plis ka menm jan an nan men pratikan. Ou ka toujou vole nan dènye cha a ak soumèt yon rapò oswa pran tan ou nan liv tikè. Rankontre nou nan Skolkovo!

Sous: www.habr.com

Add nouvo kòmantè