Linuxలో .NET కోర్, గుర్రంపై DevOps

మేము సాధ్యమైనంత ఉత్తమంగా DevOpsని అభివృద్ధి చేసాము. మేము 8 మంది ఉన్నాము, మరియు వాస్య విండోస్‌లో చక్కనిది. అకస్మాత్తుగా వాస్య వెళ్లిపోయాడు మరియు విండోస్ డెవలప్‌మెంట్ ద్వారా సరఫరా చేయబడిన కొత్త ప్రాజెక్ట్‌ను ప్రారంభించే పని నాకు ఉంది. నేను మొత్తం విండోస్ డెవలప్‌మెంట్ స్టాక్‌ను టేబుల్‌పై పడేసినప్పుడు, పరిస్థితి బాధాకరంగా ఉందని నేను గ్రహించాను...

ఇలా కథ మొదలవుతుంది అలెగ్జాండ్రా సించినోవాDevOpsConf. ప్రముఖ విండోస్ స్పెషలిస్ట్ కంపెనీని విడిచిపెట్టినప్పుడు, అలెగ్జాండర్ ఇప్పుడు ఏమి చేయాలో ఆలోచించాడు. Linuxకి మారండి, అయితే! అలెగ్జాండర్ 100 తుది వినియోగదారుల కోసం పూర్తి చేసిన ప్రాజెక్ట్ యొక్క ఉదాహరణను ఉపయోగించి Windows డెవలప్‌మెంట్‌లో కొంత భాగాన్ని Linuxకి ఎలా పూర్వస్థితిని సృష్టించాలో మరియు బదిలీ చేయగలిగాడో మీకు తెలియజేస్తాడు.

Linuxలో .NET కోర్, గుర్రంపై DevOps

TFS, పప్పెట్, Linux .NET కోర్‌ని ఉపయోగించి RPMకి ప్రాజెక్ట్‌ను సులభంగా మరియు అప్రయత్నంగా ఎలా బట్వాడా చేయాలి? డెవలప్‌మెంట్ టీమ్ పోస్ట్‌గ్రెస్ మరియు ఫ్లైవే అనే పదాలను మొదటిసారిగా విని, మరియు గడువు రేపటి తర్వాత ఉంటే ప్రాజెక్ట్ డేటాబేస్ సంస్కరణకు మద్దతు ఇవ్వడం ఎలా? డాకర్‌తో ఎలా కలిసిపోవాలి? పప్పెట్ మరియు లైనక్స్‌కు అనుకూలంగా విండోస్ మరియు స్మూతీస్‌లను విడిచిపెట్టడానికి .NET డెవలపర్‌లను ఎలా ప్రేరేపించాలి? ఉత్పత్తిలో విండోస్‌ను నిర్వహించడానికి బలం, కోరిక లేదా వనరులు లేకుంటే సైద్ధాంతిక వైరుధ్యాలను ఎలా పరిష్కరించాలి? దీని గురించి, అలాగే వెబ్ డిప్లాయ్, టెస్టింగ్, CI, ఇప్పటికే ఉన్న ప్రాజెక్ట్‌లలో TFSని ఉపయోగించే అభ్యాసాల గురించి మరియు అలెగ్జాండర్ నివేదిక యొక్క ట్రాన్స్క్రిప్ట్లో విరిగిన క్రచెస్ మరియు పని పరిష్కారాల గురించి.


కాబట్టి, వాస్య వెళ్లిపోయాడు, పని నాపై ఉంది, డెవలపర్లు పిచ్‌ఫోర్క్స్‌తో అసహనంగా వేచి ఉన్నారు. వాస్యను తిరిగి ఇవ్వలేమని నేను గ్రహించినప్పుడు, నేను వ్యాపారానికి దిగాను. ప్రారంభించడానికి, నేను మా ఫ్లీట్‌లోని Win VMల శాతాన్ని అంచనా వేసాను. స్కోర్ విండోస్‌కు అనుకూలంగా లేదు.

Linuxలో .NET కోర్, గుర్రంపై DevOps

మేము DevOpsను చురుగ్గా అభివృద్ధి చేస్తున్నందున, కొత్త అప్లికేషన్‌ను బట్వాడా చేసే విధానంలో కొంత మార్పు అవసరమని నేను గ్రహించాను. ఒకే ఒక పరిష్కారం ఉంది - వీలైతే, ప్రతిదీ Linuxకి బదిలీ చేయండి. Google నాకు సహాయం చేసింది - ఆ సమయంలో .Net ఇప్పటికే Linuxకి పోర్ట్ చేయబడింది మరియు ఇదే పరిష్కారం అని నేను గ్రహించాను!

లైనక్స్‌తో .NET కోర్ ఎందుకు?

దీనికి అనేక కారణాలు ఉన్నాయి. “మనీ చెల్లించండి” మరియు “చెల్లించవద్దు” మధ్య, మెజారిటీ రెండవదాన్ని ఎంచుకుంటుంది - నా లాంటిది. MSDB కోసం లైసెన్స్ ధర సుమారు $1; Windows వర్చువల్ మిషన్ల సముదాయాన్ని నిర్వహించడానికి వందల డాలర్లు ఖర్చవుతాయి. పెద్ద కంపెనీకి ఇది పెద్ద ఖర్చు. అందుకే పొదుపు - మొదటి కారణం. చాలా ముఖ్యమైనది కాదు, కానీ ముఖ్యమైన వాటిలో ఒకటి.

Windows వర్చువల్ మిషన్లు వాటి Linux సోదరుల కంటే ఎక్కువ వనరులను తీసుకుంటాయి - అవి బరువుగా ఉంటాయి. పెద్ద కంపెనీ స్థాయిని బట్టి, మేము Linuxని ఎంచుకున్నాము.

సిస్టమ్ కేవలం ఇప్పటికే ఉన్న CIలో విలీనం చేయబడింది. మేము మమ్మల్ని ప్రగతిశీల DevOpsగా పరిగణిస్తాము, మేము వెదురు, జెంకిన్స్ మరియు GitLab CIలను ఉపయోగిస్తాము, కాబట్టి మా పని చాలావరకు Linuxలో నడుస్తుంది.

చివరి కారణం అనుకూలమైన తోడు. "ఎస్కార్ట్‌లు"-సాంకేతిక భాగాన్ని అర్థం చేసుకునే, అంతరాయం లేని సేవను నిర్ధారించే మరియు రెండవ పంక్తి నుండి సేవలను నిర్వహించే అబ్బాయిల ప్రవేశానికి మేము అడ్డంకిని తగ్గించాల్సిన అవసరం ఉంది. వారు ఇప్పటికే Linux స్టాక్‌తో సుపరిచితులు, కాబట్టి Windows ప్లాట్‌ఫారమ్ కోసం సాఫ్ట్‌వేర్ యొక్క అదే కార్యాచరణను అర్థం చేసుకోవడానికి అదనపు వనరులను ఖర్చు చేయడం కంటే కొత్త ఉత్పత్తిని అర్థం చేసుకోవడం, మద్దతు ఇవ్వడం మరియు నిర్వహించడం వారికి చాలా సులభం.

అవసరాలు

ప్రప్రదమముగా - డెవలపర్‌ల కోసం కొత్త పరిష్కారం యొక్క సౌలభ్యం. ముఖ్యంగా లైనక్స్ అనే పదం మాట్లాడిన తర్వాత వారందరూ మార్పుకు సిద్ధంగా లేరు. డెవలపర్‌లు తమకు ఇష్టమైన విజువల్ స్టూడియో, అసెంబ్లీలు మరియు స్మూతీల కోసం ఆటోటెస్ట్‌లతో కూడిన TFSని కోరుకుంటున్నారు. ఉత్పత్తికి డెలివరీ ఎలా జరుగుతుంది అనేది వారికి ముఖ్యం కాదు. అందువల్ల, మేము సాధారణ ప్రక్రియను మార్చకూడదని నిర్ణయించుకున్నాము మరియు విండోస్ డెవలప్మెంట్ కోసం ప్రతిదీ మార్చకుండా వదిలివేయండి.

కొత్త ప్రాజెక్ట్ అవసరం ఇప్పటికే ఉన్న CIలో విలీనం చేయండి. పట్టాలు ఇప్పటికే ఉన్నాయి మరియు కాన్ఫిగరేషన్ మేనేజ్‌మెంట్ సిస్టమ్, ఆమోదించబడిన డెలివరీ ప్రమాణాలు మరియు పర్యవేక్షణ వ్యవస్థల యొక్క పారామితులను పరిగణనలోకి తీసుకొని అన్ని పనులు చేయాల్సి ఉంది.

మద్దతు మరియు ఆపరేషన్ సౌలభ్యం, వివిధ విభాగాలు మరియు సపోర్ట్ డిపార్ట్‌మెంట్ నుండి కొత్తగా పాల్గొనే వారందరికీ కనీస ప్రవేశ థ్రెషోల్డ్ షరతుగా.

గడువు - నిన్న.

డెవలప్‌మెంట్ గ్రూప్‌ను గెలవండి

అప్పుడు విండోస్ బృందం దేనితో పని చేస్తోంది?

Linuxలో .NET కోర్, గుర్రంపై DevOps

ఇప్పుడు కాన్ఫిడెంట్‌గా చెప్పగలను ఐడెంటిటీ సర్వర్4 సారూప్య సామర్థ్యాలతో ADFSకి ఉచిత ప్రత్యామ్నాయం, లేదా ఏది ఎంటిటీ ఫ్రేమ్‌వర్క్ కోర్ - డెవలపర్‌కి స్వర్గం, ఇక్కడ మీరు SQL స్క్రిప్ట్‌లను వ్రాయడానికి ఇబ్బంది పడనవసరం లేదు, అయితే డేటాబేస్‌లోని ప్రశ్నలను OOP నిబంధనలలో వివరించండి. అయితే, యాక్షన్ ప్లాన్‌పై చర్చ జరుగుతున్నప్పుడు, పోస్ట్‌గ్రెస్‌ఎస్‌క్యూఎల్ మరియు జిట్‌లను మాత్రమే గుర్తించి, సుమేరియన్ క్యూనిఫారమ్ లాగా నేను ఈ స్టాక్‌ని చూశాను.

ఆ సమయంలో మేము చురుకుగా ఉపయోగించాము పప్పెట్ కాన్ఫిగరేషన్ మేనేజ్‌మెంట్ సిస్టమ్‌గా. మా చాలా ప్రాజెక్ట్‌లలో మేము ఉపయోగించాము గిట్‌ల్యాబ్ సిఐ, ఎలాస్టిక్, సంతులిత అధిక-లోడ్ సేవలు ఉపయోగించి HAProxy తో ప్రతిదీ పర్యవేక్షించారు Zabbix, స్నాయువులు గ్రాఫనా и ప్రోమేతియస్, జేగర్, మరియు ఇదంతా ఇనుప ముక్కలపై తిరుగుతోంది HPESXi న VMware. ప్రతి ఒక్కరికి ఇది తెలుసు - కళా ప్రక్రియ యొక్క క్లాసిక్.

Linuxలో .NET కోర్, గుర్రంపై DevOps

ఈ జోక్యాలన్నింటినీ ప్రారంభించడానికి ముందు ఏమి జరిగిందో చూద్దాం మరియు అర్థం చేసుకోవడానికి ప్రయత్నిద్దాం.

ఏమైంది

TFS అనేది చాలా శక్తివంతమైన వ్యవస్థ, ఇది డెవలపర్ నుండి తుది ఉత్పత్తి యంత్రానికి కోడ్‌ను అందించడమే కాకుండా, వివిధ సేవలతో చాలా సౌకర్యవంతమైన ఏకీకరణ కోసం ఒక సెట్‌ను కలిగి ఉంది - క్రాస్-ప్లాట్‌ఫారమ్ స్థాయిలో CIని అందించడానికి.

Linuxలో .NET కోర్, గుర్రంపై DevOps
గతంలో, ఇవి ఘన కిటికీలు. TFS అనేక బిల్డ్ ఏజెంట్లను ఉపయోగించింది, ఇవి అనేక ప్రాజెక్ట్‌లను అసెంబుల్ చేయడానికి ఉపయోగించబడ్డాయి. ప్రతి ఏజెంట్‌కు టాస్క్‌లను సమాంతరంగా చేయడానికి మరియు ప్రక్రియను ఆప్టిమైజ్ చేయడానికి 3-4 మంది కార్మికులు ఉంటారు. అప్పుడు, విడుదల ప్రణాళికల ప్రకారం, TFS తాజాగా కాల్చిన బిల్డ్‌ను విండోస్ అప్లికేషన్ సర్వర్‌కు పంపిణీ చేసింది.

మనం ఏమి సాధించాలనుకున్నాం?

మేము డెలివరీ మరియు డెవలప్‌మెంట్ కోసం TFSని ఉపయోగిస్తాము మరియు అప్లికేషన్‌ను Linux అప్లికేషన్ సర్వర్‌లో అమలు చేస్తాము మరియు వాటి మధ్య ఒక రకమైన మాయాజాలం ఉంది. ఈ మ్యాజిక్ బాక్స్ మరియు ముందుకు పని యొక్క ఉప్పు ఉంది. నేను దానిని వేరు చేయడానికి ముందు, నేను ఒక అడుగు పక్కన పెట్టి, అప్లికేషన్ గురించి కొన్ని మాటలు చెబుతాను.

ప్రాజెక్ట్

అప్లికేషన్ ప్రీపెయిడ్ కార్డ్‌లను నిర్వహించడానికి కార్యాచరణను అందిస్తుంది.

Linuxలో .NET కోర్, గుర్రంపై DevOps

క్లయింట్

రెండు రకాల వినియోగదారులు ఉండేవారు. మొదటిది SSL SHA-2 ప్రమాణపత్రాన్ని ఉపయోగించి లాగిన్ చేయడం ద్వారా ప్రాప్యతను పొందారు. యు రెండవది లాగిన్ మరియు పాస్‌వర్డ్ ఉపయోగించి యాక్సెస్ ఉంది.

HAProxy

అప్పుడు క్లయింట్ అభ్యర్థన HAProxyకి వెళ్లింది, ఇది క్రింది సమస్యలను పరిష్కరించింది:

  • ప్రాథమిక అధికారం;
  • SSL ముగింపు;
  • HTTP అభ్యర్థనలను ట్యూనింగ్ చేయడం;
  • ప్రసార అభ్యర్థనలు.

క్లయింట్ సర్టిఫికేట్ గొలుసుతో పాటు ధృవీకరించబడింది. మేము - అధికారం మరియు మేము దీన్ని కొనుగోలు చేయగలము, ఎందుకంటే మేము సేవా క్లయింట్‌లకు సర్టిఫికేట్‌లను జారీ చేస్తాము.

మూడవ అంశానికి శ్రద్ధ వహించండి, మేము కొంచెం తరువాత దానికి తిరిగి వస్తాము.

బ్యాకెండ్

వారు Linuxలో బ్యాకెండ్‌ను రూపొందించాలని ప్లాన్ చేశారు. బ్యాకెండ్ డేటాబేస్‌తో సంకర్షణ చెందుతుంది, అవసరమైన అధికారాల జాబితాను లోడ్ చేస్తుంది మరియు అధీకృత వినియోగదారు కలిగి ఉన్న అధికారాలను బట్టి, ఆర్థిక పత్రాలపై సంతకం చేయడానికి మరియు వాటిని అమలు చేయడానికి పంపడానికి లేదా ఒక రకమైన నివేదికను రూపొందించడానికి యాక్సెస్‌ను అందిస్తుంది.

HAProxyతో పొదుపులు

ప్రతి క్లయింట్ నావిగేట్ చేసిన రెండు సందర్భాలతో పాటు, ఒక గుర్తింపు సందర్భం కూడా ఉంది. ఐడెంటిటీ సర్వర్4 లాగిన్ అవ్వడానికి మిమ్మల్ని అనుమతిస్తుంది, ఇది ఉచిత మరియు శక్తివంతమైన అనలాగ్ ADFS - యాక్టివ్ డైరెక్టరీ ఫెడరేషన్ సేవలు.

గుర్తింపు అభ్యర్థన అనేక దశల్లో ప్రాసెస్ చేయబడింది. మొదటి అడుగు - కస్టమర్ బ్యాకెండ్ లోకి వచ్చింది, ఇది ఈ సర్వర్‌తో కమ్యూనికేట్ చేసింది మరియు క్లయింట్ కోసం టోకెన్ ఉనికిని తనిఖీ చేసింది. అది కనుగొనబడకపోతే, అభ్యర్థన తిరిగి వచ్చిన సందర్భానికి తిరిగి పంపబడుతుంది, కానీ దారిమార్పుతో మరియు దారిమార్పుతో అది గుర్తింపుకు వెళ్లింది.

రెండవ దశ - అభ్యర్థన స్వీకరించబడింది IdentityServerలోని అధికార పేజీకి, క్లయింట్ నమోదు చేసుకున్న చోట మరియు ఐడెంటిటీ సర్వర్ డేటాబేస్‌లో దీర్ఘకాలంగా ఎదురుచూస్తున్న టోకెన్ కనిపించింది.

మూడవ దశ - క్లయింట్ తిరిగి దారి మళ్లించబడ్డాడు వచ్చిన సందర్భానికి.

Linuxలో .NET కోర్, గుర్రంపై DevOps

IdentityServer4 ఒక ఫీచర్‌ని కలిగి ఉంది: ఇది HTTP ద్వారా రిటర్న్ అభ్యర్థనకు ప్రతిస్పందనను అందిస్తుంది. సర్వర్‌ని సెటప్ చేయడంలో మేము ఎంత కష్టపడినా, డాక్యుమెంటేషన్‌తో మనం ఎంతగా జ్ఞానోదయం చేసుకున్నా, ప్రతిసారీ మేము HTTPS ద్వారా వచ్చిన URLతో ప్రారంభ క్లయింట్ అభ్యర్థనను స్వీకరించాము మరియు IdentityServer అదే సందర్భాన్ని తిరిగి అందించింది, కానీ HTTPతో. మేము ఆశ్చర్యపోయాము! మరియు మేము ఇవన్నీ గుర్తింపు సందర్భం ద్వారా HAProxyకి బదిలీ చేసాము మరియు హెడర్‌లలో మేము HTTP ప్రోటోకాల్‌ను HTTPSకి సవరించాలి.

మెరుగుదల ఏమిటి మరియు మీరు ఎక్కడ సేవ్ చేసారు?

మేము IdentityServer4ని ప్రత్యేక విభాగంలో ప్రత్యేక నోడ్‌గా ఉంచలేదు, కానీ అప్లికేషన్ యొక్క బ్యాకెండ్ నడుస్తున్న అదే సర్వర్‌లోని బ్యాకెండ్‌తో కలిపి ఉపయోగించినందున, మేము వినియోగదారుల సమూహాన్ని, వనరులను ప్రామాణీకరించడానికి ఉచిత పరిష్కారాన్ని ఉపయోగించడం ద్వారా డబ్బును ఆదా చేసాము. .

ఇది ఎలా పని చేయాలి

కాబట్టి, నేను వాగ్దానం చేసినట్లు - మ్యాజిక్ బాక్స్. మేము Linux వైపు వెళ్లడానికి హామీ ఇస్తున్నామని మేము ఇప్పటికే అర్థం చేసుకున్నాము. పరిష్కారాలు అవసరమైన నిర్దిష్ట పనులను రూపొందిద్దాం.

Linuxలో .NET కోర్, గుర్రంపై DevOps

తోలుబొమ్మ మానిఫెస్ట్. సేవ మరియు అప్లికేషన్ కాన్ఫిగరేషన్‌ను అందించడానికి మరియు నిర్వహించడానికి, కూల్ వంటకాలను వ్రాయవలసి ఉంటుంది. పెన్సిల్ రోల్ అది ఎంత త్వరగా మరియు సమర్ధవంతంగా చేయబడిందో అనర్గళంగా చూపుతుంది.

డెలివరీ పద్ధతి. ప్రమాణం RPM. Linux లో మీరు అది లేకుండా చేయలేరని అందరూ అర్థం చేసుకుంటారు, అయితే ప్రాజెక్ట్ అసెంబ్లీ తర్వాత, ఎక్జిక్యూటబుల్ DLL ఫైల్‌ల సమితి. వాటిలో సుమారు 150 ఉన్నాయి, ప్రాజెక్ట్ చాలా కష్టం. ఈ బైనరీని RPMలోకి ప్యాక్ చేయడం మరియు దాని నుండి అప్లికేషన్‌ను అమలు చేయడం మాత్రమే సామరస్యపూర్వక పరిష్కారం.

సంస్కరణ. మేము చాలా తరచుగా విడుదల చేయాల్సి ఉంటుంది మరియు ప్యాకేజీ పేరును ఎలా రూపొందించాలో మేము నిర్ణయించుకోవాలి. ఇది TFSతో ఏకీకరణ స్థాయికి సంబంధించిన ప్రశ్న. మేము Linuxలో బిల్డ్ ఏజెంట్‌ని కలిగి ఉన్నాము. TFS ఒక పనిని హ్యాండ్లర్ - వర్కర్ - బిల్డ్ ఏజెంట్‌కి పంపినప్పుడు, అది హ్యాండ్లర్ ప్రక్రియ యొక్క వాతావరణంలో ముగిసే వేరియబుల్స్ సమూహాన్ని కూడా పంపుతుంది. ఈ ఎన్విరాన్మెంట్ వేరియబుల్స్ బిల్డ్ పేరు, వెర్షన్ పేరు మరియు ఇతర వేరియబుల్స్‌ను కలిగి ఉంటాయి. “RPM ప్యాకేజీని రూపొందించడం” విభాగంలో దీని గురించి మరింత చదవండి.

TFSని సెటప్ చేస్తోంది పైపులైన్ ఏర్పాటుకు దిగింది. ఇంతకుముందు, మేము Windows ఏజెంట్‌లలో అన్ని Windows ప్రాజెక్ట్‌లను సేకరించాము, కానీ ఇప్పుడు Linux ఏజెంట్ కనిపిస్తుంది - బిల్డ్ గ్రూప్‌లో చేర్చాల్సిన బిల్డ్ ఏజెంట్, కొన్ని కళాఖండాలతో సమృద్ధిగా మరియు ఈ బిల్డ్ ఏజెంట్‌లో ఏ రకమైన ప్రాజెక్ట్‌లు నిర్మించబడతాయో చెప్పండి , మరియు ఏదో విధంగా పైప్‌లైన్‌ను సవరించండి.

గుర్తింపు సర్వర్. ADFS మా మార్గం కాదు, మేము ఓపెన్ సోర్స్ కోసం వెళ్తున్నాము.

భాగాల ద్వారా వెళ్దాం.

మ్యాజిక్ బాక్స్

నాలుగు భాగాలను కలిగి ఉంటుంది.

Linuxలో .NET కోర్, గుర్రంపై DevOps

Linux బిల్డ్ ఏజెంట్. Linux, ఎందుకంటే మేము దాని కోసం నిర్మించాము - ఇది తార్కికం. ఈ భాగం మూడు దశల్లో జరిగింది.

  • కార్మికులను కాన్ఫిగర్ చేయండి మరియు ఒంటరిగా కాదు, ప్రాజెక్ట్‌లో పంపిణీ చేయబడిన పని ఊహించినందున.
  • .NET కోర్ 1.xని ఇన్‌స్టాల్ చేయండి. ప్రామాణిక రిపోజిటరీలో 1 ఇప్పటికే అందుబాటులో ఉన్నప్పుడు 2.0.x ఎందుకు? ఎందుకంటే మేము అభివృద్ధిని ప్రారంభించినప్పుడు, స్థిరమైన సంస్కరణ 1.09, మరియు దాని ఆధారంగా ప్రాజెక్ట్ను రూపొందించాలని నిర్ణయించబడింది.
  • Git 2.x.

RPM-రిపోజిటరీ. RPM ప్యాకేజీలు ఎక్కడైనా నిల్వ చేయబడాలి. మేము అన్ని Linux హోస్ట్‌లకు అందుబాటులో ఉన్న అదే కార్పొరేట్ RPM రిపోజిటరీని ఉపయోగిస్తామని భావించబడింది. వాళ్ళు చేసింది అదే. రిపోజిటరీ సర్వర్ కాన్ఫిగర్ చేయబడింది వెబ్‌హూక్ ఇది పేర్కొన్న స్థానం నుండి అవసరమైన RPM ప్యాకేజీని డౌన్‌లోడ్ చేసింది. బిల్డ్ ఏజెంట్ ద్వారా ప్యాకేజీ వెర్షన్ వెబ్‌హుక్‌కి నివేదించబడింది.

గిట్‌ల్యాబ్. శ్రద్ధ! ఇక్కడ GitLab డెవలపర్‌లచే కాదు, అప్లికేషన్ వెర్షన్‌లు, ప్యాకేజీ వెర్షన్‌లను నియంత్రించడానికి, అన్ని Linux మెషీన్‌ల స్థితిని పర్యవేక్షించడానికి ఆపరేషన్స్ డిపార్ట్‌మెంట్ ద్వారా ఉపయోగించబడుతుంది మరియు ఇది రెసిపీని నిల్వ చేస్తుంది - అన్ని పప్పెట్ మానిఫెస్ట్‌లు.

పప్పెట్ — అన్ని వివాదాస్పద సమస్యలను పరిష్కరిస్తుంది మరియు Gitlab నుండి మనకు కావలసిన కాన్ఫిగరేషన్‌ను ఖచ్చితంగా అందిస్తుంది.

మేము డైవ్ చేయడం ప్రారంభిస్తాము. RPMకి DLL డెలివరీ ఎలా పని చేస్తుంది?

RPMకి DDL డెలివరీ

మనకు .NET డెవలప్‌మెంట్ రాక్ స్టార్ ఉందని చెప్పండి. ఇది విజువల్ స్టూడియోని ఉపయోగిస్తుంది మరియు విడుదల శాఖను సృష్టిస్తుంది. ఆ తర్వాత, అది దానిని Gitకి అప్‌లోడ్ చేస్తుంది మరియు ఇక్కడ Git అనేది TFS ఎంటిటీ, అంటే డెవలపర్ పని చేసే అప్లికేషన్ రిపోజిటరీ.

Linuxలో .NET కోర్, గుర్రంపై DevOps

ఆ తర్వాత కొత్త కమిట్ వచ్చినట్లు TFS చూస్తుంది. ఏ యాప్? TFS సెట్టింగ్‌లలో నిర్దిష్ట బిల్డ్ ఏజెంట్ ఏ వనరులను కలిగి ఉన్నారో సూచించే లేబుల్ ఉంది. ఈ సందర్భంలో, అతను మేము .NET కోర్ ప్రాజెక్ట్‌ని నిర్మిస్తున్నామని చూసి, పూల్ నుండి Linux Build ఏజెంట్‌ని ఎంచుకుంటాడు.

బిల్డ్ ఏజెంట్ మూలాలను అందుకుంటారు మరియు అవసరమైన వాటిని డౌన్‌లోడ్ చేస్తారు సమన్వయాలు .NET రిపోజిటరీ, npm మొదలైన వాటి నుండి. మరియు అప్లికేషన్ మరియు తదుపరి ప్యాకేజింగ్‌ను రూపొందించిన తర్వాత, RPM ప్యాకేజీని RPM రిపోజిటరీకి పంపుతుంది.

మరోవైపు, ఈ క్రింది విధంగా జరుగుతుంది. ఆపరేషన్స్ డిపార్ట్‌మెంట్ ఇంజనీర్ ప్రాజెక్ట్ యొక్క రోల్ అవుట్‌లో నేరుగా పాల్గొంటాడు: అతను ప్యాకేజీల సంస్కరణలను మారుస్తాడు హీరా అప్లికేషన్ రెసిపీ నిల్వ చేయబడిన రిపోజిటరీలో, దాని తర్వాత పప్పెట్ ట్రిగ్గర్ అవుతుంది యమ్, రిపోజిటరీ నుండి కొత్త ప్యాకేజీని పొందుతుంది మరియు అప్లికేషన్ యొక్క కొత్త వెర్షన్ ఉపయోగించడానికి సిద్ధంగా ఉంది.

Linuxలో .NET కోర్, గుర్రంపై DevOps

పదాలలో ప్రతిదీ చాలా సులభం, కానీ బిల్డ్ ఏజెంట్ లోపల ఏమి జరుగుతుంది?

ప్యాకేజింగ్ DLL RPM

TFS నుండి ప్రాజెక్ట్ మూలాలు మరియు బిల్డ్ టాస్క్‌ని స్వీకరించారు. బిల్డ్ ఏజెంట్ మూలాల నుండి ప్రాజెక్ట్‌ను నిర్మించడం ప్రారంభిస్తుంది. సమీకరించబడిన ప్రాజెక్ట్ సెట్‌గా అందుబాటులో ఉంది DLL ఫైల్స్, ఫైల్ సిస్టమ్‌పై లోడ్‌ను తగ్గించడానికి జిప్ ఆర్కైవ్‌లో ప్యాక్ చేయబడతాయి.

జిప్ ఆర్కైవ్ విసిరివేయబడింది RPM ప్యాకేజీ బిల్డ్ డైరెక్టరీకి. తర్వాత, బాష్ స్క్రిప్ట్ ఎన్విరాన్మెంట్ వేరియబుల్స్‌ను ప్రారంభిస్తుంది, బిల్డ్ వెర్షన్, ప్రాజెక్ట్ వెర్షన్, బిల్డ్ డైరెక్టరీకి పాత్‌ను కనుగొంటుంది మరియు RPM-బిల్డ్‌ను రన్ చేస్తుంది. బిల్డ్ పూర్తయిన తర్వాత, ప్యాకేజీ ప్రచురించబడుతుంది స్థానిక రిపోజిటరీ, ఇది బిల్డ్ ఏజెంట్‌లో ఉంది.

తరువాత, బిల్డ్ ఏజెంట్ నుండి RPM రిపోజిటరీలోని సర్వర్‌కి JSON అభ్యర్థన పంపబడింది వెర్షన్ మరియు బిల్డ్ పేరును సూచిస్తుంది. నేను ఇంతకు ముందు మాట్లాడిన Webhook, బిల్డ్ ఏజెంట్‌లోని స్థానిక రిపోజిటరీ నుండి ఈ ప్యాకేజీని డౌన్‌లోడ్ చేస్తుంది మరియు ఇన్‌స్టాలేషన్ కోసం కొత్త అసెంబ్లీని అందుబాటులో ఉంచుతుంది.

Linuxలో .NET కోర్, గుర్రంపై DevOps

RPM రిపోజిటరీకి ఈ ప్రత్యేక ప్యాకేజీ డెలివరీ స్కీమ్ ఎందుకు? అసెంబుల్ చేసిన ప్యాకేజీని నేను వెంటనే రిపోజిటరీకి ఎందుకు పంపలేను? వాస్తవం ఏమిటంటే ఇది భద్రతను నిర్ధారించడానికి ఒక షరతు. ఈ దృశ్యం అన్ని Linux మెషీన్‌లకు అందుబాటులో ఉండే సర్వర్‌కు అనధికార వ్యక్తులు RPM ప్యాకేజీలను అప్‌లోడ్ చేసే అవకాశాన్ని పరిమితం చేస్తుంది.

డేటాబేస్ సంస్కరణ

డెవలప్‌మెంట్ టీమ్‌తో జరిపిన సంప్రదింపులో, అబ్బాయిలు MS SQLకి దగ్గరగా ఉన్నారని తేలింది, అయితే చాలా Windows కాని ప్రాజెక్ట్‌లలో మేము ఇప్పటికే వారి శక్తితో PostgreSQLని ఉపయోగిస్తున్నాము. మేము ఇప్పటికే చెల్లించిన ప్రతిదాన్ని విడిచిపెట్టాలని నిర్ణయించుకున్నందున, మేము ఇక్కడ కూడా PostgreSQLని ఉపయోగించడం ప్రారంభించాము.

Linuxలో .NET కోర్, గుర్రంపై DevOps

ఈ భాగంలో మేము డేటాబేస్‌ను ఎలా వెర్షన్ చేసాము మరియు ఫ్లైవే మరియు ఎంటిటీ ఫ్రేమ్‌వర్క్ కోర్ మధ్య ఎలా ఎంచుకున్నాము అని నేను మీకు చెప్పాలనుకుంటున్నాను. వాటి సాధకబాధకాలను పరిశీలిద్దాం.

Минусы

ఫ్లైవే ఒక మార్గం మాత్రమే వెళుతుంది, మేము మేము వెనక్కి వెళ్లలేము - ఇది ఒక ముఖ్యమైన ప్రతికూలత. డెవలపర్ సౌలభ్యం పరంగా - మీరు ఇతర మార్గాలలో ఎంటిటీ ఫ్రేమ్‌వర్క్ కోర్‌తో పోల్చవచ్చు. మేము దీన్ని ముందంజలో ఉంచామని మీరు గుర్తుంచుకోవాలి మరియు Windows డెవలప్‌మెంట్ కోసం ఏదైనా మార్చకూడదనేది ప్రధాన ప్రమాణం.

ఫ్లైవే మా కోసం ఒక రకమైన రేపర్ అవసరంకాబట్టి అబ్బాయిలు రాయరు SQL ప్రశ్నలు. అవి OOP నిబంధనలలో పనిచేయడానికి చాలా దగ్గరగా ఉన్నాయి. మేము డేటాబేస్ వస్తువులతో పని చేయడానికి సూచనలను వ్రాసాము, SQL ప్రశ్నను రూపొందించాము మరియు దానిని అమలు చేసాము. డేటాబేస్ యొక్క క్రొత్త సంస్కరణ సిద్ధంగా ఉంది, పరీక్షించబడింది - ప్రతిదీ బాగానే ఉంది, ప్రతిదీ పనిచేస్తుంది.

ఎంటిటీ ఫ్రేమ్‌వర్క్ కోర్ మైనస్‌ను కలిగి ఉంది - ఇది భారీ లోడ్‌ల క్రింద ఉంది ఉపశీర్షిక SQL ప్రశ్నలను నిర్మిస్తుంది, మరియు డేటాబేస్లో డ్రాడౌన్ ముఖ్యమైనది కావచ్చు. కానీ మాకు అధిక-లోడ్ సేవ లేనందున, మేము వందల కొద్దీ RPSలో లోడ్‌ను లెక్కించము, మేము ఈ ప్రమాదాలను అంగీకరించాము మరియు సమస్యను భవిష్యత్తులో మాకు అప్పగించాము.

Плюсы

ఎంటిటీ ఫ్రేమ్‌వర్క్ కోర్ బాక్స్ వెలుపల పని చేస్తుంది మరియు అభివృద్ధి చేయడం సులభం, మరియు ఫ్లైవే ఇప్పటికే ఉన్న CIకి సులభంగా కలిసిపోతుంది. కానీ మేము దీన్ని డెవలపర్‌లకు సౌకర్యవంతంగా చేస్తాము :)

రోల్-అప్ విధానం

పప్పెట్ ప్యాకేజీ వెర్షన్‌లో మార్పు వస్తున్నట్లు చూస్తుంది, వలసలకు బాధ్యత వహించే దానితో సహా. ముందుగా, ఇది మైగ్రేషన్ స్క్రిప్ట్‌లు మరియు డేటాబేస్-సంబంధిత కార్యాచరణను కలిగి ఉన్న ప్యాకేజీని ఇన్‌స్టాల్ చేస్తుంది. దీని తరువాత, డేటాబేస్తో పనిచేసే అప్లికేషన్ పునఃప్రారంభించబడుతుంది. తరువాత మిగిలిన భాగాల సంస్థాపన వస్తుంది. ప్యాకేజీలు ఇన్‌స్టాల్ చేయబడే మరియు అప్లికేషన్‌లు ప్రారంభించబడే క్రమం పప్పెట్ మానిఫెస్ట్‌లో వివరించబడింది.

అప్లికేషన్‌లు టోకెన్‌లు, డేటాబేస్ పాస్‌వర్డ్‌లు వంటి సున్నితమైన డేటాను ఉపయోగిస్తాయి, ఇవన్నీ పప్పెట్ మాస్టర్ నుండి కాన్ఫిగర్‌లోకి లాగబడతాయి, ఇక్కడ అవి ఎన్‌క్రిప్టెడ్ రూపంలో నిల్వ చేయబడతాయి.

TFS సమస్యలు

ప్రతిదీ నిజంగా మా కోసం పని చేస్తుందని మేము నిర్ణయించుకున్నాము మరియు గ్రహించిన తర్వాత, ఇతర ప్రాజెక్ట్‌లలో విన్ డెవలప్‌మెంట్ డిపార్ట్‌మెంట్ కోసం TFSలో అసెంబ్లీలు మొత్తంగా ఏమి జరుగుతోందో చూడాలని నిర్ణయించుకున్నాను - మేము త్వరగా నిర్మిస్తున్నామో/విడుదల చేస్తున్నామో లేదో, మరియు వేగంతో ముఖ్యమైన సమస్యలను కనుగొన్నారు.

ప్రధాన ప్రాజెక్ట్‌లలో ఒకటి సమీకరించటానికి 12-15 నిమిషాలు పడుతుంది - ఇది చాలా కాలం, మీరు అలా జీవించలేరు. త్వరిత విశ్లేషణ I/Oలో భయంకరమైన తగ్గుదలని చూపింది మరియు ఇది శ్రేణులలో ఉంది.

కాంపోనెంట్ వారీగా దానిని విశ్లేషించిన తర్వాత, నేను మూడు ఫోసిలను గుర్తించాను. ప్రధమ - "కాస్పెర్స్కీ యాంటీవైరస్", ఇది అన్ని విండోస్ బిల్డ్ ఏజెంట్లలోని మూలాలను స్కాన్ చేస్తుంది. రెండవ - విండోస్ సూచిక. ఇది నిలిపివేయబడలేదు మరియు విస్తరణ ప్రక్రియలో బిల్డ్ ఏజెంట్‌లలో ప్రతిదీ నిజ సమయంలో సూచిక చేయబడింది.

మూడవది - Npm ఇన్‌స్టాల్ చేయండి. చాలా పైప్‌లైన్‌లలో మేము ఈ ఖచ్చితమైన దృష్టాంతాన్ని ఉపయోగించామని తేలింది. అతను ఎందుకు చెడ్డవాడు? డిపెండెన్సీ ట్రీ ఏర్పడినప్పుడు Npm ఇన్‌స్టాల్ విధానం అమలు చేయబడుతుంది ప్యాకేజీ-lock.json, ప్రాజెక్ట్‌ను నిర్మించడానికి ఉపయోగించే ప్యాకేజీల వెర్షన్‌లు రికార్డ్ చేయబడతాయి. ప్రతికూలత ఏమిటంటే, Npm ఇన్‌స్టాల్ ప్రతిసారీ ఇంటర్నెట్ నుండి ప్యాకేజీల యొక్క తాజా వెర్షన్‌లను పైకి లాగుతుంది మరియు పెద్ద ప్రాజెక్ట్ విషయంలో దీనికి చాలా సమయం పడుతుంది.

డెవలపర్‌లు కొన్నిసార్లు ఒక నిర్దిష్ట భాగం లేదా మొత్తం ప్రాజెక్ట్ ఎలా పనిచేస్తుందో పరీక్షించడానికి స్థానిక మెషీన్‌పై ప్రయోగాలు చేస్తారు. కొన్నిసార్లు స్థానికంగా ప్రతిదీ చల్లగా ఉందని తేలింది, కానీ వారు దానిని సమీకరించారు, చుట్టారు మరియు ఏమీ పని చేయలేదు. మేము సమస్య ఏమిటో గుర్తించడం ప్రారంభించాము - అవును, డిపెండెన్సీలతో ప్యాకేజీల యొక్క విభిన్న సంస్కరణలు.

నిర్ణయం

  • AV మినహాయింపులలో మూలాలు.
  • ఇండెక్సింగ్‌ని నిలిపివేయండి.
  • వెళ్ళండి npm ci.

npm ci యొక్క ప్రయోజనాలు మనం మేము ఒకసారి డిపెండెన్సీ చెట్టును సేకరిస్తాము, మరియు డెవలపర్‌ను అందించే అవకాశాన్ని మేము పొందుతాము ప్యాకేజీల ప్రస్తుత జాబితా, దానితో అతను స్థానికంగా తనకు నచ్చినంత ప్రయోగాలు చేయవచ్చు. ఈ సమయాన్ని ఆదా చేస్తుంది కోడ్ వ్రాసే డెవలపర్లు.

ఆకృతీకరణ

ఇప్పుడు రిపోజిటరీ కాన్ఫిగరేషన్ గురించి కొంచెం. చారిత్రాత్మకంగా మనం ఉపయోగిస్తాము నెక్సస్ రిపోజిటరీల నిర్వహణ కోసం, సహా అంతర్గత REPO. ఈ అంతర్గత రిపోజిటరీ మేము అంతర్గత ప్రయోజనాల కోసం ఉపయోగించే అన్ని భాగాలను కలిగి ఉంటుంది, ఉదాహరణకు, స్వీయ-వ్రాతపూర్వక పర్యవేక్షణ.

Linuxలో .NET కోర్, గుర్రంపై DevOps

మేము కూడా ఉపయోగిస్తాము నుగెట్, ఇతర ప్యాకేజీ మేనేజర్‌లతో పోలిస్తే ఇది మెరుగైన కాషింగ్‌ను కలిగి ఉంది.

ఫలితంగా

మేము బిల్డ్ ఏజెంట్లను ఆప్టిమైజ్ చేసిన తర్వాత, సగటు బిల్డ్ సమయం 12 నిమిషాల నుండి 7కి తగ్గించబడింది.

మేము Windows కోసం ఉపయోగించగలిగిన అన్ని మెషీన్‌లను లెక్కించి, ఈ ప్రాజెక్ట్‌లో Linuxకి మారినట్లయితే, మేము సుమారు $10 ఆదా చేసాము. మరియు అది కేవలం లైసెన్స్‌లపై మాత్రమే మరియు మేము కంటెంట్‌ను పరిగణనలోకి తీసుకుంటే మరిన్ని.

ప్రణాళికలు

తదుపరి త్రైమాసికంలో, కోడ్ డెలివరీని ఆప్టిమైజ్ చేయడానికి మేము ప్లాన్ చేసాము.

ప్రీబిల్డ్ డాకర్ ఇమేజ్‌కి మారుతోంది. TFS అనేది అనేక ప్లగిన్‌లతో కూడిన చక్కని విషయం, ఇది మీరు పైప్‌లైన్‌లో ఇంటిగ్రేట్ చేయడానికి మిమ్మల్ని అనుమతిస్తుంది, ట్రిగ్గర్-ఆధారిత అసెంబ్లీ, చెప్పాలంటే, డాకర్ ఇమేజ్. మేము ఈ ట్రిగ్గర్‌ను అదే కోసం చేయాలనుకుంటున్నాము ప్యాకేజీ-lock.json. ప్రాజెక్ట్‌ను నిర్మించడానికి ఉపయోగించే భాగాల కూర్పు ఏదో ఒకవిధంగా మారితే, మేము కొత్త డాకర్ చిత్రాన్ని నిర్మిస్తాము. ఇది తరువాత సమావేశమైన అప్లికేషన్‌తో కంటైనర్‌ను అమర్చడానికి ఉపయోగించబడుతుంది. ఇది ఇప్పుడు అలా కాదు, కానీ మేము కుబెర్నెట్స్‌లోని మైక్రోసర్వీస్ ఆర్కిటెక్చర్‌కు మారాలని ప్లాన్ చేస్తున్నాము, ఇది మా కంపెనీలో చురుకుగా అభివృద్ధి చెందుతోంది మరియు చాలా కాలంగా ఉత్పత్తి పరిష్కారాలను అందిస్తోంది.

సారాంశం

నేను ప్రతి ఒక్కరినీ విండోస్‌ని విసిరేయమని ప్రోత్సహిస్తున్నాను, కానీ అది ఎలా ఉడికించాలో నాకు తెలియకపోవడం వల్ల కాదు. కారణం చాలా ఓపెన్‌సోర్స్ సొల్యూషన్స్ Linux స్టాక్. నువ్వు బాగున్నావా వనరులపై ఆదా చేయండి. నా అభిప్రాయం ప్రకారం, భవిష్యత్తు శక్తివంతమైన సంఘంతో Linuxలో ఓపెన్ సోర్స్ సొల్యూషన్స్‌కు చెందినది.

అలెగ్జాండర్ సించినోవ్ యొక్క స్పీకర్ ప్రొఫైల్ GitHubలో.

DevOps కాన్ఫ్ నిపుణులచే నిపుణుల కోసం అభివృద్ధి, పరీక్ష మరియు ఆపరేషన్ ప్రక్రియల ఏకీకరణపై సమావేశం. అందుకే అలెగ్జాండర్ మాట్లాడిన ప్రాజెక్ట్? అమలు మరియు పని, మరియు ప్రదర్శన రోజున రెండు విజయవంతమైన విడుదలలు ఉన్నాయి. పై RIT++ వద్ద DevOps కాన్ఫ్ మే 27 మరియు 28 తేదీలలో ప్రాక్టీషనర్‌ల నుండి ఇలాంటి కేసులు మరిన్ని ఉంటాయి. మీరు ఇప్పటికీ చివరి క్యారేజ్‌లోకి దూకవచ్చు మరియు నివేదన అందజేయు లేదా మీ సమయాన్ని వెచ్చించండి పుస్తకం టిక్కెట్టు. స్కోల్కోవోలో మమ్మల్ని కలవండి!

మూలం: www.habr.com

ఒక వ్యాఖ్యను జోడించండి