NET Core በሊኑክስ፣ ዴቭኦፕስ በፈረስ ላይ

በተቻለን መጠን DevOpsን ገንብተናል። እኛ 8 ነበርን ፣ እና ቫስያ በዊንዶውስ ውስጥ በጣም ጥሩው ነበር። በድንገት ቫስያ ሄደ, እና በዊንዶውስ ልማት የቀረበውን አዲስ ፕሮጀክት የማስጀመር ስራ ነበረኝ. ሙሉውን የዊንዶው ልማት ቁልል በጠረጴዛው ላይ ስጥል ሁኔታው ​​ህመም እንደሆነ ተረዳሁ...

ታሪኩ እንዲህ ይጀምራል አሌክሳንድራ ሲንቺኖቫ ላይ DevOpsConf. ዋናው የዊንዶውስ ስፔሻሊስት ኩባንያውን ለቅቆ ሲወጣ አሌክሳንደር አሁን ምን ማድረግ እንዳለበት አሰበ. ወደ ሊኑክስ ቀይር፣ በእርግጥ! አሌክሳንደር ለ100 የመጨረሻ ተጠቃሚዎች የተጠናቀቀውን ፕሮጀክት ምሳሌ በመጠቀም የዊንዶውስ ልማትን ቅድመ ሁኔታ ለመፍጠር እና የዊንዶው ልማትን ክፍል ወደ ሊኑክስ እንዴት እንደሚያስተላልፍ ይነግርዎታል።

NET Core በሊኑክስ፣ ዴቭኦፕስ በፈረስ ላይ

TFS፣ Puppet፣ Linux .NET ኮርን በመጠቀም እንዴት በቀላሉ እና ያለልፋት ፕሮጀክትን ለ RPM ማድረስ ይቻላል? የልማት ቡድኑ Postgres እና Flyway የሚሉትን ቃላት ለመጀመሪያ ጊዜ ከሰማ እና የመጨረሻው ቀን ከነገ ወዲያ ከሆነ የፕሮጀክት ዳታቤዝ ስሪትን እንዴት መደገፍ እንደሚቻል? ከዶከር ጋር እንዴት እንደሚዋሃድ? የ NET ገንቢዎች ዊንዶውስ እና ለስላሳዎችን ለፓፕ እና ሊኑክስ በመደገፍ እንዲተዉ ማነሳሳት የሚቻለው እንዴት ነው? ዊንዶውን በምርት ውስጥ ለማቆየት ጥንካሬ ፣ ፍላጎት ፣ ወይም ሀብቶች ከሌሉ የርዕዮተ ዓለም ግጭቶችን እንዴት መፍታት ይቻላል? ስለዚህ ጉዳይ, እንዲሁም ስለ ዌብ ዲፕሊፕ, ሙከራ, CI, በነባር ፕሮጀክቶች ውስጥ TFS ን የመጠቀም ልምዶች, እና በእርግጥ, ስለ የተሰበረ ክራንች እና የስራ መፍትሄዎች, በአሌክሳንደር ዘገባ ግልባጭ ውስጥ.


ስለዚህ, ቫስያ ሄደ, ስራው በእኔ ላይ ነው, ገንቢዎቹ በትዕግስት በትዕግስት እየጠበቁ ናቸው. በመጨረሻ ቫስያ መመለስ እንደማይችል ሳውቅ ወደ ሥራ ገባሁ። ለመጀመር፣ በእኛ መርከቦች ውስጥ ያሉትን የWin VMs መቶኛ ገምግሜአለሁ። ውጤቱ ለዊንዶውስ የሚደግፍ አልነበረም።

NET Core በሊኑክስ፣ ዴቭኦፕስ በፈረስ ላይ

DevOpsን በንቃት እያዘጋጀን ስለሆንን አዲስ መተግበሪያን ለማድረስ አንድ ነገር መለወጥ እንዳለበት ተገነዘብኩ። አንድ መፍትሄ ብቻ ነበር - ከተቻለ ሁሉንም ነገር ወደ ሊኑክስ ያስተላልፉ። Google ረድቶኛል - በዚያን ጊዜ .ኔት አስቀድሞ ወደ ሊኑክስ ተልኳል ፣ እናም ይህ መፍትሄ እንደሆነ ተገነዘብኩ!

ለምን .NET ኮር ከሊኑክስ ጋር በጥምረት?

ለዚህ በርካታ ምክንያቶች ነበሩ. “ገንዘብ ክፈሉ” እና “አትክፈሉ” በሚለው መካከል አብዛኞቹ ሁለተኛውን ይመርጣሉ - እንደኔ። የ MSDB ፍቃድ 1 ዶላር ያህል ያስወጣል፤ የዊንዶውስ ቨርቹዋል ማሽኖችን ማቆየት በመቶዎች የሚቆጠር ዶላር ያስወጣል። ለትልቅ ኩባንያ ይህ ትልቅ ወጪ ነው. ለዛ ነው በማስቀመጥ ላይ - የመጀመሪያ ምክንያት. በጣም አስፈላጊ አይደለም, ነገር ግን ጉልህ ከሆኑት አንዱ.

የዊንዶውስ ቨርቹዋል ማሽኖች ከሊኑክስ ወንድሞቻቸው የበለጠ ሀብቶችን ይይዛሉ - እነሱ ከባድ ናቸው. ከትልቅ ኩባንያ ስፋት አንጻር ሊኑክስን መርጠናል.

ስርዓቱ በቀላሉ አሁን ባለው CI ውስጥ የተዋሃደ ነው. እኛ እራሳችንን እንደ ተራማጅ DevOps እንቆጥራለን፣ Bamboo፣ Jenkins እና GitLab CI እንጠቀማለን፣ ስለዚህ አብዛኛው ስራችን የሚሰራው በሊኑክስ ነው።

የመጨረሻው ምክንያት ምቹ አጃቢ. ለ "አጃቢዎች" የመግባት እንቅፋትን ዝቅ ማድረግ አለብን - ቴክኒካዊ ክፍሉን የሚረዱትን, ያልተቋረጠ አገልግሎትን የሚያረጋግጡ እና አገልግሎቶችን ከሁለተኛው መስመር ይጠብቁ. ከሊኑክስ ቁልል ጋር ቀድሞውንም ያውቁ ስለነበር አዲስ ምርትን መረዳት፣ መደገፍ እና ማቆየት ለዊንዶው ፕላትፎርም የሶፍትዌርን ተመሳሳይ ተግባር ለመረዳት ተጨማሪ ግብዓቶችን ከማውጣት የበለጠ ቀላል ይሆንላቸዋል።

መስፈርቶች

የመጀመሪያው እና ዋነኛው - ለገንቢዎች የአዲሱ መፍትሄ ምቾት. በተለይ ሊኑክስ የሚለው ቃል ከተነገረ በኋላ ሁሉም ለለውጥ ዝግጁ አልነበሩም። ገንቢዎች የእነርሱን ተወዳጅ ቪዥዋል ስቱዲዮ፣ TFS ለየጉባኤዎች እና ለስላሳዎች አውቶሞተሮች ይፈልጋሉ። ወደ ምርት ማድረስ እንዴት እንደሚከሰት ለእነሱ አስፈላጊ አይደለም. ስለዚህ, የተለመደውን ሂደት ላለመቀየር ወስነናል እና ሁሉንም ነገር ለዊንዶውስ እድገት ሳይለወጥ ለመተው ወሰንን.

አዲስ ፕሮጀክት ያስፈልጋል አሁን ካለው CI ጋር መቀላቀል. የባቡር ሀዲዶቹ ቀድሞውኑ ነበሩ እና ሁሉም ስራው መከናወን ያለበት የአወቃቀሩን የአስተዳደር ስርዓት መለኪያዎች, ተቀባይነት ያለው የመላኪያ ደረጃዎች እና የክትትል ስርዓቶችን ግምት ውስጥ በማስገባት ነው.

የድጋፍ እና የአሠራር ቀላልነት, ከተለያዩ ክፍሎች እና የድጋፍ ክፍል ለመጡ ሁሉም አዲስ ተሳታፊዎች ለዝቅተኛው የመግቢያ ገደብ እንደ ቅድመ ሁኔታ.

የመጨረሻ ቀን - ትላንትና.

አሸነፈ ልማት ቡድን

በዚያን ጊዜ የዊንዶውስ ቡድን ከምን ጋር ይሠራ ነበር?

NET Core በሊኑክስ፣ ዴቭኦፕስ በፈረስ ላይ

አሁን በልበ ሙሉነት እንዲህ ማለት እችላለሁ ማንነት አገልጋይ4 áŠ¨ ADFS ጋር ተመሳሳይ አቅም ያለው፣ ወይም ምን ጥሩ አማራጭ ነው። አካል ማዕቀፍ ኮር - ለገንቢ ገነት፣ የ SQL ስክሪፕቶችን ለመፃፍ የማይቸገሩበት፣ ነገር ግን በመረጃ ቋቱ ውስጥ ያሉ ጥያቄዎችን በኦኦፒ ያብራሩ። ነገር ግን በድርጊት መርሃ ግብሩ ውይይት ወቅት፣ PostgreSQL እና Gitን ብቻ በማወቄ የሱመሪያን ኩኒፎርም ይመስል ይህን ቁልል ተመለከትኩት።

በዛን ጊዜ እኛ በንቃት እንጠቀም ነበር አሻንጉሊት እንደ ውቅር አስተዳደር ስርዓት. በአብዛኛዎቹ ፕሮጄክቶቻችን ውስጥ እንጠቀማለን። GitLab CI, ኢላስቲክ፣ በመጠቀም ሚዛናዊ ከፍተኛ ጭነት አገልግሎቶች HAProxy ጋር ሁሉንም ነገር ተከታትሏል ዚብሊክስ, ጅማቶች ግራፋና и á•áˆŽáˆšá‰ľá‹¨áˆľ, ጀዋርይህ ሁሉ በብረት ቁርጥራጭ ላይ ይሽከረከር ነበር HPESXi ላይ VMware. ሁሉም ሰው ያውቃል - የዘውግ ክላሲክ።

NET Core በሊኑክስ፣ ዴቭኦፕስ በፈረስ ላይ

እነዚህን ሁሉ ጣልቃገብነቶች ከመጀመራችን በፊት የሆነውን ለማየት እና ለመረዳት እንሞክር።

ምንድን ነው የሆነው

TFS ከገንቢው እስከ መጨረሻው የማምረቻ ማሽን ኮድ ከማድረስ በተጨማሪ ከተለያዩ አገልግሎቶች ጋር በጣም ተለዋዋጭ የሆነ ውህደት ያለው ስብስብ ያለው - CI በመስቀል-መድረክ ደረጃ ለማቅረብ የሚያስችል ትክክለኛ ኃይለኛ ስርዓት ነው።

NET Core በሊኑክስ፣ ዴቭኦፕስ በፈረስ ላይ
ቀደም ሲል እነዚህ ጠንካራ መስኮቶች ነበሩ. TFS ብዙ ፕሮጀክቶችን ለመገጣጠም የሚያገለግሉ በርካታ የግንባታ ወኪሎችን ተጠቅሟል። እያንዳንዱ ወኪል ተግባራትን ለማመሳሰል እና ሂደቱን ለማመቻቸት 3-4 ሰራተኞች አሉት። ከዚያም፣ በተለቀቀው ዕቅዶች መሠረት፣ TFS አዲስ የተጋገረውን ግንባታ ለዊንዶውስ መተግበሪያ አገልጋይ አቀረበ።

ምን ለማሳካት ፈለግን?

እኛ ለማድረስ እና ለማዳበር TFS እንጠቀማለን እና አፕሊኬሽኑን በሊኑክስ አፕሊኬሽን አገልጋይ ላይ እናስኬዳለን እና በመካከላቸው የሆነ አስማት አለ። ይህ አስማት ሳጥን እና ወደፊት የሚሠራው ጨው አለ. ከመለየቴ በፊት፣ ወደ ጎን አንድ እርምጃ እወስዳለሁ እና ስለ ማመልከቻው ጥቂት ቃላት እናገራለሁ ።

ፕሮጀክቱ

አፕሊኬሽኑ የቅድመ ክፍያ ካርዶችን ለማስተናገድ ተግባራዊነትን ይሰጣል።

NET Core በሊኑክስ፣ ዴቭኦፕስ በፈረስ ላይ

ደምበኛ

ሁለት አይነት ተጠቃሚዎች ነበሩ። የመጀመሪያው የSSL SHA-2 ሰርተፍኬት በመጠቀም በመግባት መዳረሻ አግኝቷል። ዩ áˆáˆˆá‰°áŠ›á‹ መግቢያ እና የይለፍ ቃል በመጠቀም መዳረሻ ነበረ።

HAProxy

ከዚያ የደንበኛው ጥያቄ ወደ HAProxy ሄደ ፣ ይህም የሚከተሉትን ችግሮች ፈታ ።

  • የመጀመሪያ ደረጃ ፍቃድ;
  • SSL መቋረጥ;
  • የኤችቲቲፒ ጥያቄዎችን ማስተካከል;
  • የስርጭት ጥያቄዎች.

የደንበኛው የምስክር ወረቀት በሰንሰለቱ ላይ ተረጋግጧል. እኛ - ሥልጣን እኛ እራሳችን ለደንበኞች አገልግሎት የምስክር ወረቀት ስለሰጠን ይህንን አቅም ልንከፍል እንችላለን።

ለሦስተኛው ነጥብ ትኩረት ይስጡ, ትንሽ ቆይተው ወደ እሱ እንመለሳለን.

ደጀን

በሊኑክስ ላይ ጀርባውን ለመስራት አቅደዋል። የኋለኛው ክፍል ከመረጃ ቋቱ ጋር ይገናኛል ፣ አስፈላጊውን የልዩ መብቶች ዝርዝር ይጭናል እና ከዚያ የተፈቀደለት ተጠቃሚ በምን አይነት ልዩ መብቶች ላይ በመመስረት ፣የፋይናንሺያል ሰነዶችን የመፈረም እና ለአፈፃፀም መላክ ወይም የሆነ ሪፖርት ያመነጫል።

ቁጠባዎች በ HAProxy

እያንዳንዱ ደንበኛ ከዳሰሳቸው ሁለት አውዶች በተጨማሪ፣ የማንነት አውድም ነበር። ማንነት አገልጋይ4 እንዲገቡ ይፈቅድልዎታል ፣ ይህ ነፃ እና ኃይለኛ አናሎግ ነው። ADFS - ንቁ ማውጫ ፌዴሬሽን አገልግሎቶች.

የማንነት ጥያቄው በበርካታ ደረጃዎች ተካሂዷል። የመጀመሪያ ደረጃ - ደንበኛ ወደ ኋላ ገባ, ከዚህ አገልጋይ ጋር የተገናኘ እና ለደንበኛው ማስመሰያ መኖሩን ያጣራ. ካልተገኘ ጥያቄው ወደ መጣበት አውድ ተመልሷል፣ ነገር ግን በማዘዋወር እና በማዘዋወር ወደ ማንነት ሄደ።

ሁለተኛ ደረጃ - ጥያቄው ደርሷል በIdentityServer ውስጥ ወዳለው የፍቃድ ገጽ ፣ ደንበኛው የተመዘገበበት እና ለረጅም ጊዜ ሲጠበቅ የነበረው ማስመሰያ በIdentityServer ዳታቤዝ ውስጥ ታየ።

ሦስተኛው ደረጃ - ደንበኛው ወደ ኋላ ተዘዋውሯል ወደ መጣበት አውድ።

NET Core በሊኑክስ፣ ዴቭኦፕስ በፈረስ ላይ

IdentityServer4 ባህሪ አለው፡- ለጥያቄው መልስ በ HTTP በኩል ይመልሳል. ሰርቨሩን ለማዋቀር የቱንም ያህል ብንታገል፣ ምንም ያህል እራሳችንን በሰነዱ ብናውቀውም፣ በኤችቲቲፒኤስ በኩል ከመጣ URL ጋር የመጀመሪያ የደንበኛ ጥያቄ በደረሰን ቁጥር፣ እና IdentityServer ተመሳሳይ አውድ መለሰ፣ ግን በ HTTP። ደንግጠን ነበር! እና ይህን ሁሉ በማንነት አውድ ወደ HAProxy አስተላልፈናል፣ እና በአርእስቶች ውስጥ የኤችቲቲፒ ፕሮቶኮሉን ወደ HTTPS መቀየር ነበረብን።

ማሻሻያው ምንድን ነው እና የት ነው ያጠራቀሙት?

IdentityServer4 ን እንደ የተለየ መስቀለኛ መንገድ በተለየ ክፍል ውስጥ ስላላደረግነው ነገር ግን የመተግበሪያው የኋላ ክፍል በሚሰራበት አገልጋይ ላይ ከጀርባው ጋር ተጠቀምንበት ስለነበር ለተጠቃሚዎች ቡድን ፍቃድ ለመስጠት ነፃ መፍትሄን በመጠቀም ገንዘብ ቆጥበናል። .

እንዴት መሥራት እንዳለበት

ስለዚህ, ቃል እንደገባሁት - Magic Box. ወደ ሊኑክስ እንደምንሄድ ዋስትና እንደተሰጠን አስቀድመን ተረድተናል። መፍትሄዎችን የሚሹ ልዩ ስራዎችን እንፍጠር።

NET Core በሊኑክስ፣ ዴቭኦፕስ በፈረስ ላይ

አሻንጉሊት ይገለጣል. የአገልግሎት እና የመተግበሪያ ውቅረትን ለማዳረስ እና ለማስተዳደር፣ አሪፍ የምግብ አዘገጃጀት መፃፍ ነበረባቸው። አንድ ጥቅል እርሳስ ምን ያህል በፍጥነት እና በብቃት እንደተከናወነ በቅልጥፍና ያሳያል።

የማስረከቢያ ዘዴ. መስፈርቱ RPM ነው። በሊኑክስ ውስጥ ያለሱ ማድረግ እንደማይችሉ ሁሉም ሰው ይገነዘባል, ነገር ግን ፕሮጀክቱ ራሱ, ከተሰበሰበ በኋላ, ሊተገበሩ የሚችሉ የ DLL ፋይሎች ስብስብ ነበር. ከእነዚህ ውስጥ 150 ያህሉ ነበሩ, ፕሮጀክቱ በጣም አስቸጋሪ ነበር. ብቸኛው የሚስማማው መፍትሔ ይህንን ሁለትዮሽ ወደ RPM ማሸግ እና ማመልከቻውን ከእሱ ማሰማራት ነው።

ስሪት ማውጣት። ብዙ ጊዜ መልቀቅ ነበረብን፣ እና የጥቅል ስሙን እንዴት መፍጠር እንዳለብን መወሰን ነበረብን። ይህ ከ TFS ጋር የመዋሃድ ደረጃ ጥያቄ ነው. በሊኑክስ ላይ የግንባታ ወኪል ነበረን። TFS ስራን ወደ ተቆጣጣሪ - ሰራተኛ - ለግንባታ ኤጀንት ሲልክ፣ እንዲሁም በተቆጣጣሪው ሂደት አካባቢ ላይ የሚያልቁ ብዙ ተለዋዋጮችን ያስተላልፋል። እነዚህ የአካባቢ ተለዋዋጮች የግንባታ ስም፣ የስሪት ስም እና ሌሎች ተለዋዋጮችን ይይዛሉ። ስለዚህ ጉዳይ በ "የ RPM ጥቅል ግንባታ" ክፍል ውስጥ የበለጠ ያንብቡ።

TFS በማዘጋጀት ላይ የቧንቧ መስመር ለማዘጋጀት ወረደ. ከዚህ ቀደም ሁሉንም የዊንዶውስ ፕሮጄክቶችን በዊንዶውስ ወኪሎች ላይ ሰብስበናል ፣ አሁን ግን የሊኑክስ ወኪል ታየ - በግንባታ ቡድን ውስጥ መካተት ያለበት የግንባታ ወኪል ፣ በአንዳንድ ቅርሶች የበለፀገ እና በዚህ የግንባታ ወኪል ላይ ምን ዓይነት ፕሮጄክቶች እንደሚገነቡ ተነግሯል። , እና በሆነ መንገድ የቧንቧ መስመርን ያሻሽሉ.

ማንነት አገልጋይ ADFS የእኛ መንገድ አይደለም፣ የምንሄደው ለክፍት ምንጭ ነው።

ክፍሎቹን እንይ።

አስማት ሳጥን

አራት ክፍሎች አሉት.

NET Core በሊኑክስ፣ ዴቭኦፕስ በፈረስ ላይ

የሊኑክስ ግንባታ ወኪል። ሊኑክስ፣ ስለምንገነባው - ምክንያታዊ ነው። ይህ ክፍል በሦስት ደረጃዎች ተከናውኗል.

  • ሠራተኞችን አዋቅር እና ብቻውን አይደለም, በፕሮጀክቱ ላይ የተከፋፈለው ሾል ይጠበቅ ነበር.
  • .NET Core 1.x ን ይጫኑ. 1 አስቀድሞ በመደበኛ ማከማቻ ውስጥ ሲገኝ ለምን 2.0.x? ምክንያቱም ልማት ስንጀምር የተረጋጋው ስሪት 1.09 ነበር, እና ፕሮጀክቱን መሰረት አድርጎ እንዲሰራ ተወስኗል.
  • Git 2.x.

RPM-ማከማቻ. የ RPM ጥቅሎች የሆነ ቦታ መቀመጥ ነበረባቸው። ለሁሉም ሊኑክስ አስተናጋጆች የሚገኘውን ተመሳሳዩን የኮርፖሬት RPM ማከማቻ እንደምንጠቀም ታሳቢ ነበር። ያደረጉትም ይህንኑ ነው። የማከማቻ አገልጋዩ ተዋቅሯል። ድር መንጠቆ አስፈላጊውን የ RPM ጥቅል ከተጠቀሰው ቦታ ያወረደው. የጥቅል ሥሪት በግንባታ ወኪል ለድር መንጠቆው ሪፖርት ተደርጓል።

ጊታብ። ትኩረት! እዚህ GitLab ጥቅም ላይ የሚውለው በገንቢዎች አይደለም, ነገር ግን በኦፕሬሽኖች ዲፓርትመንት ውስጥ የመተግበሪያ ስሪቶችን, የጥቅል ስሪቶችን ለመቆጣጠር, ሁሉንም የሊኑክስ ማሽኖችን ሁኔታ ለመቆጣጠር እና የምግብ አዘገጃጀቱን ያከማቻል - ሁሉም አሻንጉሊት ይገለጣል.

አሻንጉሊት - ሁሉንም አወዛጋቢ ጉዳዮችን ይፈታል እና ከ Gitlab የምንፈልገውን ውቅር በትክክል ያቀርባል።

መስመጥ እንጀምራለን. DLL ወደ RPM ማድረስ እንዴት ይሰራል?

DDL ወደ RPM ማድረስ

የ NET ልማት ሮክ ኮከብ አለን እንበል። ቪዥዋል ስቱዲዮን ይጠቀማል እና የመልቀቂያ ቅርንጫፍ ይፈጥራል። ከዚያ በኋላ፣ ወደ Git ይሰቀልለታል፣ እና Git እዚህ TFS አካል ነው፣ ማለትም፣ ገንቢው የሚሰራበት የመተግበሪያ ማከማቻ ነው።

NET Core በሊኑክስ፣ ዴቭኦፕስ በፈረስ ላይ

ከዚያ በኋላ TFS አዲስ ቁርጠኝነት እንደደረሰ ይመለከታል። የትኛው መተግበሪያ? በTFS መቼቶች ውስጥ አንድ የተወሰነ የግንባታ ወኪል ምን ሀብቶች እንዳሉት የሚያመለክት መለያ አለ። በዚህ አጋጣሚ የ NET Core ፕሮጀክት እየገነባን መሆኑን አይቶ ከገንዳው ውስጥ የሊኑክስ ግንባታ ወኪልን ይመርጣል።

የግንባታ ወኪሉ ምንጮቹን ይቀበላል እና አስፈላጊውን ያውርዳል ጥገኛነት ከ NET ማከማቻ ፣ npm ፣ ወዘተ. እና አፕሊኬሽኑን እራሱ እና ተከታይ ማሸግ ከገነባ በኋላ የ RPM ጥቅሉን ወደ RPM ማከማቻ ይልካል።

በሌላ በኩል, የሚከተለው ይከሰታል. የኦፕሬሽን ዲፓርትመንት መሐንዲስ በፕሮጀክቱ መልቀቅ ላይ በቀጥታ ይሳተፋል፡ የጥቅሎችን ስሪቶች ይለውጣል áˆ‚áˆŤ የአፕሊኬሽኑ የምግብ አዘገጃጀት መመሪያ በሚከማችበት ማከማቻ ውስጥ, ከዚያ በኋላ ፑፕት ያነሳሳል ጣፋጭ፣ አዲሱን ፓኬጅ ከማጠራቀሚያው ያወጣል፣ እና አዲሱ የመተግበሪያው ስሪት ለመጠቀም ዝግጁ ነው።

NET Core በሊኑክስ፣ ዴቭኦፕስ በፈረስ ላይ

በቃላት ሁሉም ነገር ቀላል ነው፣ ግን በግንባታው ወኪል ውስጥ ምን ይሆናል?

ማሸግ DLL RPM

የተቀበሉት የፕሮጀክት ምንጮች እና የግንባታ ስራ ከTFS. ወኪል ይገንቡ ፕሮጀክቱን ራሱ ከምንጮች መገንባት ይጀምራል. የተሰበሰበው ፕሮጀክት እንደ ስብስብ ይገኛል DLL ፋይሎች, በፋይል ስርዓቱ ላይ ያለውን ጭነት ለመቀነስ በዚፕ መዝገብ ውስጥ የታሸጉ.

የዚፕ ማህደር ተጥሏል። ወደ RPM ጥቅል ግንባታ ማውጫ። በመቀጠል የ Bash ስክሪፕት የአካባቢ ተለዋዋጮችን ያስጀምራል፣የግንባታ ሥሪቱን፣የፕሮጀክት ሥሪቱን፣የግንባታ ማውጫውን መንገድ ያገኛል እና RPM-buildን ያካሂዳል። ግንባታው ከተጠናቀቀ በኋላ እሽጉ ወደ ላይ ታትሟል á‹¨áŠ áŠŤá‰Łá‰˘ ማከማቻበግንባታ ወኪል ላይ የሚገኘው።

በመቀጠል፣ ከግንባታ ወኪል ወደ RPM ማከማቻ ውስጥ ወዳለው አገልጋይ የJSON ጥያቄ ተልኳል። የስሪት እና የግንባታ ስም የሚያመለክት. ቀደም ብዬ የተናገርኩት ዌብሆክ ይህን ጥቅል ከግንባታ ኤጀንት ላይ ካለው የአካባቢ ማከማቻ አውርዶ አዲሱን ስብሰባ ለመጫን ምቹ ያደርገዋል።

NET Core በሊኑክስ፣ ዴቭኦፕስ በፈረስ ላይ

ለምንድነው ይህ የተለየ የጥቅል አቅርቦት እቅድ ወደ RPM ማከማቻ? የተሰበሰበውን ጥቅል ወዲያውኑ ወደ ማከማቻው ለምን መላክ አልችልም? እውነታው ይህ ደህንነትን ለማረጋገጥ ቅድመ ሁኔታ ነው. ይህ ሁኔታ ያልተፈቀዱ ሰዎች RPM ፓኬጆችን ለሁሉም ሊኑክስ ማሽኖች ተደራሽ ወደሆነ አገልጋይ የሚሰቅሉበትን እድል ይገድባል።

የውሂብ ጎታ ስሪት

ከልማት ቡድኑ ጋር ባደረገው ምክክር፣ ሰዎቹ ወደ MS SQL ቅርብ እንደነበሩ ታወቀ፣ ነገር ግን በአብዛኛዎቹ የዊንዶውስ ባልሆኑ ፕሮጀክቶች ውስጥ PostgreSQLን በሙሉ ኃይላቸው እየተጠቀምን ነበር። የተከፈለውን ሁሉ ለመተው ስለወሰንን፣ እዚህም PostgreSQL መጠቀም ጀመርን።

NET Core በሊኑክስ፣ ዴቭኦፕስ በፈረስ ላይ

በዚህ ክፍል የመረጃ ቋቱን እንዴት እንደገለበጥን እና በFlyway እና Entity Framework Core መካከል እንዴት እንደመረጥን ልነግርዎ እፈልጋለሁ። ጥቅሞቻቸውን እና ጉዳቶቻቸውን እንመልከት።

Минусы

ፍሊዌይ በአንድ መንገድ ብቻ ነው የሚሄደው, እኛ á‹ˆá‹° ኋላ መመለሾ አንችልም። - ይህ ትልቅ ኪሳራ ነው. ከEntity Framework Core ጋር በሌላ መንገድ ማወዳደር ይችላሉ - ከገንቢ ምቾት አንፃር። ይህንን በግንባር ቀደምትነት ላይ እንዳስቀመጥነው ያስታውሱታል, እና ዋናው መስፈርት ለዊንዶውስ ልማት ምንም ነገር መለወጥ አልነበረም.

ለFlyway እኛን አንድ ዓይነት መጠቅለያ ያስፈልግ ነበርወንዶቹ እንዳይጽፉ የ SQL ጥያቄዎች. በOOP ውሎች ለመስራት በጣም ይቀራረባሉ። ከመረጃ ቋት ነገሮች ጋር ለመስራት መመሪያዎችን ጽፈናል፣ የ SQL ጥያቄን አምጥተናል እና ተፈጽመናል። አዲሱ የውሂብ ጎታው ስሪት ዝግጁ ነው, ተፈትኗል - ሁሉም ነገር ጥሩ ነው, ሁሉም ነገር ይሰራል.

የEntity Framework Core ተቀንሶ አለው - ከከባድ ጭነቶች በታች áŠĽáŒ…ግ በጣም ጥሩ የ SQL መጠይቆችን ይገነባል።፣ እና በመረጃ ቋቱ ውስጥ ያለው መጥፋት ጉልህ ሊሆን ይችላል። ነገር ግን ከፍተኛ ጭነት ያለው አገልግሎት ስለሌለን, ጭነቱን በመቶዎች በሚቆጠሩ RPS ውስጥ አናሰላም, እነዚህን አደጋዎች ተቀብለናል እና ችግሩን ለወደፊቱ ለእኛ አሳልፈናል.

ደማቅ

አካል ማዕቀፍ ኮር ከሳጥኑ ውጭ ይሰራል እና ለማዳበር ቀላል ነውእና ፍሊዌይ በቀላሉ አሁን ካለው CI ጋር ይዋሃዳል. ግን ለገንቢዎች ምቹ እናደርጋለን :)

የመጠቅለል ሂደት

አሻንጉሊት ለስደት ተጠያቂ የሆነውን ጨምሮ የጥቅል ስሪት ለውጥ እየመጣ መሆኑን ይመለከታል። በመጀመሪያ፣ የፍልሰት ስክሪፕቶችን እና የውሂብ ጎታ-ነክ ተግባራትን የያዘ ጥቅል ይጭናል። ከዚህ በኋላ ከመረጃ ቋቱ ጋር የሚሰራው መተግበሪያ እንደገና ይጀመራል። በመቀጠል የተቀሩትን አካላት መትከል ይመጣል. ጥቅሎች የተጫኑበት እና አፕሊኬሽኖች የሚጀመሩበት ቅደም ተከተል በአሻንጉሊት መግለጫ ውስጥ ተገልጿል.

አፕሊኬሽኖች እንደ ቶከኖች፣ የመረጃ ቋቶች ይለፍ ቃል ያሉ ስሱ መረጃዎችን ይጠቀማሉ፣ ይህ ሁሉ ከፑፕት ማስተር ወደ ውቅሩ ይሳባል፣ እነሱም በተመሰጠረ መልኩ ይቀመጣሉ።

TFS ችግሮች

ከወሰንን እና ሁሉም ነገር በእውነት ለእኛ እየሰራ መሆኑን ከተረዳን በኋላ በ TFS ውስጥ በአጠቃላይ ለዊን ልማት ዲፓርትመንት በሌሎች ፕሮጀክቶች ላይ ከጉባኤዎች ጋር ምን እየተደረገ እንዳለ ለማየት ወሰንኩ - በፍጥነት እየገነባን ወይም እየለቀቅን ነው ፣ እና ከፍጥነት ጋር የተያያዙ ጉልህ ችግሮች ተገኝተዋል .

ከዋና ዋናዎቹ ፕሮጄክቶች ውስጥ አንዱ ለመሰብሰብ ከ12-15 ደቂቃዎች ይወስዳል - ይህ ረጅም ጊዜ ነው, እንደዛ መኖር አይችሉም. ፈጣን ትንታኔ በI/O ውስጥ አስከፊ ውድቀትን አሳይቷል፣ እና ይህ በድርድር ላይ ነበር።

ክፍላተ-ነገርን ከመረመርኩት በኋላ፣ ሶስት ፎሲዎችን ለይቻለሁ። አንደኛ - "Kaspersky ጸረ-ቫይረስ"በሁሉም የዊንዶውስ ግንባታ ወኪሎች ላይ ምንጮችን የሚቃኝ. ሁለተኛ - የ Windows መረጃ ጠቋሚ አልተሰናከለም እና ሁሉም ነገር በቅጽበት በግንባታ ወኪሎች ላይ በማሰማራት ሂደት ውስጥ ተጠቁሟል።

ሶስተኛ - Npm ጫን በአብዛኛዎቹ የቧንቧ መስመሮች ውስጥ ይህንን ትክክለኛ ሁኔታ ተጠቅመንበታል. ለምንድን ነው እሱ መጥፎ የሆነው? የ Npm የመትከል ሂደት የሚካሄደው የጥገኛ ዛፉ ሲፈጠር ነው። áŒĽá‰…ል-መቆለፊያ.json, ፕሮጀክቱን ለመገንባት የሚያገለግሉ የጥቅሎች ስሪቶች የተመዘገቡበት. ጉዳቱ የ Npm ጫኝ የቅርብ ጊዜዎቹን የጥቅሎች ስሪቶች ከበይነመረቡ በእያንዳንዱ ጊዜ ይጎትታል ፣ እና ይህ በትልቅ ፕሮጀክት ጉዳይ ላይ ብዙ ጊዜ ይወስዳል።

አንዳንድ ጊዜ ገንቢዎች አንድ የተወሰነ ክፍል ወይም አጠቃላይ ፕሮጀክት እንዴት እንደሚሰራ ለመፈተሽ በአካባቢያዊ ማሽን ላይ ሙከራ ያደርጋሉ። አንዳንድ ጊዜ ሁሉም ነገር በአካባቢው አሪፍ ነበር, ነገር ግን ተሰብስበው, ተንከባለሉት, እና ምንም አልሰራም. ችግሩ ምን እንደሆነ ለማወቅ እንጀምራለን - አዎ, ከጥገኛዎች ጋር የተለያዩ የፓኬጆች ስሪቶች.

ዉሳኔ

  • በAV የማይካተቱ ምንጮች።
  • መረጃ ጠቋሚን አሰናክል።
  • መሄድ npm ci.

የ npm ci ጥቅሞች እኛ ነን á‹¨áŒĽáŒˆáŠ›á‹áŠ• ዛፍ አንድ ጊዜ እንሰበስባለን, እና ገንቢውን ለማቅረብ እድሉን እናገኛለን የአሁኑ የጥቅሎች ዝርዝርእሱ የፈለገውን ያህል በአካባቢው መሞከር የሚችልበት። ይህ ጊዜ ይቆጥባል ኮድ የሚጽፉ ገንቢዎች.

ውቅር

አሁን ስለ ማጠራቀሚያ ውቅር ትንሽ። በታሪክ እንጠቀማለን። የ Nexus ጨምሮ ማከማቻዎችን ለማስተዳደር የውስጥ REPO. ይህ የውስጥ ማከማቻ ለውስጣዊ ዓላማ የምንጠቀምባቸውን ሁሉንም ክፍሎች ይዟል፣ ለምሳሌ በራስ የተጻፈ ክትትል።

NET Core በሊኑክስ፣ ዴቭኦፕስ በፈረስ ላይ

እኛ ደግሞ እንጠቀማለን ኑጌትከሌሎች የጥቅል አስተዳዳሪዎች ጋር ሲነጻጸር የተሻለ መሸጎጫ ስላለው።

ውጤት

የግንባታ ወኪሎችን ካመቻቸን በኋላ፣ አማካይ የግንባታ ጊዜ ከ12 ደቂቃ ወደ 7 ቀንሷል።

ለዊንዶውስ ልንጠቀምባቸው የምንችላቸውን ማሽኖች በሙሉ ብንቆጥር ግን በዚህ ፕሮጀክት ወደ ሊኑክስ ከቀየርን 10 ዶላር ያህል ቆጥበናል ይህ ደግሞ በፍቃዶች ላይ ብቻ ነው፣ እና ይዘቱን ከግምት ውስጥ ካስገባን ተጨማሪ።

ዕቅዶች

ለቀጣዩ ሩብ አመት የኮድ አቅርቦትን በማመቻቸት ለመስራት አቅደናል።

ወደ ቅድመ-ግንባታ Docker ምስል በመቀየር ላይ. TFS በፓይፕላይን ውስጥ እንድትዋሃድ የሚያስችሉህ ብዙ ፕለጊኖች ያሉት ጥሩ ነገር ነው፣ በነቃጭ ላይ የተመሰረተ የዶክተር ምስልን ጨምሮ። ይህንን ቀስቅሴ ለተመሳሳይ ሰው ማድረግ እንፈልጋለን ጥቅል-መቆለፊያ.json. ፕሮጀክቱን ለመገንባት የሚያገለግሉት ክፍሎች ስብጥር በሆነ መንገድ ከተቀየረ, አዲስ Docker ምስል እንገነባለን. በኋላ ላይ መያዣውን ከተሰበሰበው ማመልከቻ ጋር ለመዘርጋት ይጠቅማል. ይህ አሁን አይደለም, ነገር ግን በኩበርኔትስ ውስጥ ወደ ማይክሮ ሰርቪስ አርክቴክቸር ለመቀየር እያቀድን ነው, ይህም በኩባንያችን ውስጥ በንቃት እያደገ እና ለረጅም ጊዜ የምርት መፍትሄዎችን ሲያገለግል ቆይቷል.

ማጠቃለያ

ሁሉም ሰው ዊንዶውስ እንዲጥል አበረታታለሁ, ግን እንዴት ማብሰል እንዳለብኝ ስለማላውቅ አይደለም. ምክንያቱ አብዛኛው የOpensource መፍትሄዎች ናቸው። የሊኑክስ ቁልል. ሰላም ነህ? በንብረቶች ላይ መቆጠብ. በእኔ አስተያየት መጪው ጊዜ ከኃይለኛ ማህበረሰብ ጋር በሊኑክስ ላይ የክፍት ምንጭ መፍትሄዎች ነው።

የአሌክሳንደር ሲንቺኖቭ ተናጋሪ መገለጫ በ GitHub ላይ.

DevOps Conf á‰ á‰Łáˆˆáˆ™á‹Ťá‹Žá‰˝ ለባለሙያዎች የልማት, የፈተና እና የአሠራር ሂደቶች ውህደት ኮንፈረንስ ነው. ለዚህ ነው እስክንድር የተናገረው ፕሮጀክት? ተተግብሯል እና በመስራት ላይ, እና በአፈፃፀሙ ቀን ሁለት የተሳካ ልቀቶች ነበሩ. በርቷል DevOps Conf በRIT++ ላይ በግንቦት 27 እና 28 ከባለሙያዎች የበለጠ ተመሳሳይ ጉዳዮች ይኖራሉ። አሁንም ወደ መጨረሻው ሰረገላ እና መዝለል ይችላሉ። ሪፖርት አቅርቡ ወይም ጊዜዎን ይውሰዱ ለማስያዝ ትኬት. በ Skolkovo ውስጥ ያግኙን!

ምንጭ: hab.com

አስተያየት ያክሉ