ലിനക്സിൽ .NET കോർ, കുതിരപ്പുറത്ത് DevOps

ഞങ്ങൾക്ക് കഴിയുന്നത്ര മികച്ച രീതിയിൽ ഞങ്ങൾ DevOps വികസിപ്പിച്ചെടുത്തു. ഞങ്ങൾ 8 പേർ ഉണ്ടായിരുന്നു, വിൻഡോസിലെ ഏറ്റവും മികച്ചതായിരുന്നു വാസ്യ. പെട്ടെന്ന് വാസ്യ പോയി, വിൻഡോസ് ഡെവലപ്‌മെന്റ് നൽകിയ ഒരു പുതിയ പ്രോജക്റ്റ് സമാരംഭിക്കാനുള്ള ചുമതല എനിക്കുണ്ടായിരുന്നു. വിൻഡോസ് ഡെവലപ്‌മെന്റ് സ്റ്റാക്ക് മുഴുവനും മേശപ്പുറത്ത് വെച്ചപ്പോൾ, സ്ഥിതി വേദനാജനകമാണെന്ന് എനിക്ക് മനസ്സിലായി...

കഥ തുടങ്ങുന്നത് ഇങ്ങനെയാണ് അലക്സാണ്ട്ര സിഞ്ചിനോവ ഓൺ DevOpsConf. പ്രമുഖ വിൻഡോസ് സ്പെഷ്യലിസ്റ്റ് കമ്പനി വിട്ടപ്പോൾ, ഇപ്പോൾ എന്ത് ചെയ്യണമെന്ന് അലക്സാണ്ടർ ചിന്തിച്ചു. ലിനക്സിലേക്ക് മാറുക, തീർച്ചയായും! 100 അന്തിമ ഉപയോക്താക്കൾക്കായി പൂർത്തിയാക്കിയ പ്രോജക്റ്റിന്റെ ഉദാഹരണം ഉപയോഗിച്ച് വിൻഡോസ് ഡെവലപ്‌മെന്റിന്റെ ഒരു ഭാഗം ലിനക്സിലേക്ക് എങ്ങനെ ഒരു മുൻഗാമി സൃഷ്ടിക്കാനും കൈമാറാനും തനിക്ക് എങ്ങനെ കഴിഞ്ഞുവെന്ന് അലക്സാണ്ടർ നിങ്ങളോട് പറയും.

ലിനക്സിൽ .NET കോർ, കുതിരപ്പുറത്ത് DevOps

TFS, Puppet, Linux .NET കോർ എന്നിവ ഉപയോഗിച്ച് RPM-ലേക്ക് ഒരു പ്രൊജക്റ്റ് എങ്ങനെ എളുപ്പത്തിലും അനായാസമായും എത്തിക്കാം? ഡെവലപ്‌മെന്റ് ടീം ആദ്യമായി പോസ്റ്റ്‌ഗ്രെസ്, ഫ്ലൈവേ എന്നീ വാക്കുകൾ കേൾക്കുകയും സമയപരിധി നാളെ മറ്റന്നാൾ ആകുകയും ചെയ്യുന്നുവെങ്കിൽ ഒരു പ്രോജക്റ്റ് ഡാറ്റാബേസിന്റെ പതിപ്പിനെ എങ്ങനെ പിന്തുണയ്ക്കും? ഡോക്കറുമായി എങ്ങനെ സംയോജിപ്പിക്കാം? പപ്പറ്റിനും ലിനക്സിനും അനുകൂലമായി വിൻഡോസും സ്മൂത്തികളും ഉപേക്ഷിക്കാൻ .NET ഡെവലപ്പർമാരെ എങ്ങനെ പ്രേരിപ്പിക്കാം? നിർമ്മാണത്തിൽ വിൻഡോസ് നിലനിർത്താനുള്ള ശക്തിയോ ആഗ്രഹമോ വിഭവങ്ങളോ ഇല്ലെങ്കിൽ പ്രത്യയശാസ്ത്രപരമായ വൈരുദ്ധ്യങ്ങൾ എങ്ങനെ പരിഹരിക്കും? ഇതിനെക്കുറിച്ച്, അതുപോലെ തന്നെ വെബ് ഡിപ്ലോയ്, ടെസ്റ്റിംഗ്, സിഐ, നിലവിലുള്ള പ്രോജക്റ്റുകളിൽ ടിഎഫ്എസ് ഉപയോഗിക്കുന്ന രീതികളെക്കുറിച്ചും, തീർച്ചയായും, തകർന്ന ക്രച്ചുകളെക്കുറിച്ചും പ്രവർത്തന പരിഹാരങ്ങളെക്കുറിച്ചും, അലക്സാണ്ടറുടെ റിപ്പോർട്ടിന്റെ ട്രാൻസ്ക്രിപ്റ്റിൽ.


അതിനാൽ, വാസ്യ പോയി, ചുമതല എന്റെ പക്കലാണ്, ഡവലപ്പർമാർ പിച്ച്ഫോർക്കുകളുമായി അക്ഷമരായി കാത്തിരിക്കുന്നു. ഒടുവിൽ വാസ്യയെ തിരികെ നൽകാൻ കഴിയില്ലെന്ന് മനസ്സിലായപ്പോൾ, ഞാൻ കാര്യത്തിലേക്ക് ഇറങ്ങി. ആരംഭിക്കുന്നതിന്, ഞങ്ങളുടെ ഫ്ലീറ്റിലെ വിൻ വിഎമ്മുകളുടെ ശതമാനം ഞാൻ വിലയിരുത്തി. സ്കോർ വിൻഡോസിന് അനുകൂലമായിരുന്നില്ല.

ലിനക്സിൽ .NET കോർ, കുതിരപ്പുറത്ത് DevOps

ഞങ്ങൾ DevOps സജീവമായി വികസിപ്പിക്കുന്നതിനാൽ, ഒരു പുതിയ ആപ്ലിക്കേഷൻ ഡെലിവർ ചെയ്യുന്നതിനുള്ള സമീപനത്തിൽ എന്തെങ്കിലും മാറ്റം വരുത്തേണ്ടതുണ്ടെന്ന് ഞാൻ മനസ്സിലാക്കി. ഒരു പരിഹാരമേ ഉണ്ടായിരുന്നുള്ളൂ - സാധ്യമെങ്കിൽ, എല്ലാം ലിനക്സിലേക്ക് മാറ്റുക. ഗൂഗിൾ എന്നെ സഹായിച്ചു - ആ സമയത്ത് .നെറ്റ് ഇതിനകം ലിനക്സിലേക്ക് പോർട്ട് ചെയ്തിരുന്നു, ഇതാണ് പരിഹാരമെന്ന് ഞാൻ മനസ്സിലാക്കി!

എന്തുകൊണ്ട് ലിനക്സുമായി ചേർന്ന് .NET കോർ?

ഇതിന് നിരവധി കാരണങ്ങളുണ്ടായിരുന്നു. "പണം കൊടുക്കുക" എന്നതിനും "പണമടയ്ക്കരുത്" എന്നതിനും ഇടയിൽ, ഭൂരിപക്ഷവും രണ്ടാമത്തേത് തിരഞ്ഞെടുക്കും - എന്നെപ്പോലെ. MSDB-യുടെ ഒരു ലൈസൻസിന് ഏകദേശം $1 ചിലവാകും; വിൻഡോസ് വെർച്വൽ മെഷീനുകളുടെ ഒരു കൂട്ടം പരിപാലിക്കുന്നതിന് നൂറുകണക്കിന് ഡോളർ ചിലവാകും. ഒരു വലിയ കമ്പനിയെ സംബന്ധിച്ചിടത്തോളം ഇത് ഒരു വലിയ ചെലവാണ്. അതുകൊണ്ടാണ് സേവിംഗ്സ് - ആദ്യ കാരണം. ഏറ്റവും പ്രധാനപ്പെട്ടതല്ല, മറിച്ച് പ്രധാനപ്പെട്ട ഒന്നാണ്.

വിൻഡോസ് വെർച്വൽ മെഷീനുകൾ അവരുടെ ലിനക്സ് സഹോദരങ്ങളേക്കാൾ കൂടുതൽ വിഭവങ്ങൾ എടുക്കുന്നു - അവ ഭാരമുള്ളവയാണ്. വലിയ കമ്പനിയുടെ സ്കെയിൽ കണക്കിലെടുത്ത് ഞങ്ങൾ ലിനക്സ് തിരഞ്ഞെടുത്തു.

സിസ്റ്റം നിലവിലുള്ള CI-യിൽ സംയോജിപ്പിച്ചിരിക്കുന്നു. ഞങ്ങൾ സ്വയം പുരോഗമനപരമായ DevOps ആയി കണക്കാക്കുന്നു, ഞങ്ങൾ മുള, Jenkins, GitLab CI എന്നിവ ഉപയോഗിക്കുന്നു, അതിനാൽ ഞങ്ങളുടെ മിക്ക ജോലികളും Linux-ലാണ് പ്രവർത്തിക്കുന്നത്.

അവസാനത്തെ കാരണം സൗകര്യപ്രദമായ അകമ്പടി. "എസ്കോർട്ടുകൾ"-ന്റെ സാങ്കേതിക ഭാഗം മനസ്സിലാക്കുകയും തടസ്സമില്ലാത്ത സേവനം ഉറപ്പാക്കുകയും രണ്ടാമത്തെ വരിയിൽ നിന്നുള്ള സേവനങ്ങൾ നിലനിർത്തുകയും ചെയ്യുന്ന ആൺകുട്ടികൾക്കുള്ള പ്രവേശനത്തിനുള്ള തടസ്സം ഞങ്ങൾ കുറയ്ക്കേണ്ടതുണ്ട്. അവർക്ക് ലിനക്സ് സ്റ്റാക്ക് ഇതിനകം പരിചിതമായിരുന്നു, അതിനാൽ വിൻഡോസ് പ്ലാറ്റ്‌ഫോമിനായുള്ള സോഫ്റ്റ്‌വെയറിന്റെ അതേ പ്രവർത്തനക്ഷമത മനസിലാക്കാൻ അധിക വിഭവങ്ങൾ ചെലവഴിക്കുന്നതിനേക്കാൾ അവർക്ക് ഒരു പുതിയ ഉൽപ്പന്നം മനസിലാക്കാനും പിന്തുണയ്ക്കാനും പരിപാലിക്കാനും വളരെ എളുപ്പമാണ്.

ആവശ്യകതകൾ

സർവ്വപ്രധാനമായ - ഡവലപ്പർമാർക്കുള്ള പുതിയ പരിഹാരത്തിന്റെ സൗകര്യം. അവരെല്ലാം മാറ്റത്തിന് തയ്യാറായില്ല, പ്രത്യേകിച്ച് ലിനക്സ് എന്ന വാക്ക് പറഞ്ഞതിന് ശേഷം. ഡവലപ്പർമാർക്ക് അവരുടെ പ്രിയപ്പെട്ട വിഷ്വൽ സ്റ്റുഡിയോ, അസംബ്ലികൾക്കും സ്മൂത്തികൾക്കുമായി ഓട്ടോടെസ്റ്റുകളുള്ള TFS ആവശ്യമാണ്. ഉൽപ്പാദനത്തിലേക്കുള്ള ഡെലിവറി എങ്ങനെ സംഭവിക്കുന്നു എന്നത് അവർക്ക് പ്രധാനമല്ല. അതിനാൽ, സാധാരണ പ്രക്രിയ മാറ്റേണ്ടതില്ലെന്നും വിൻഡോസ് വികസനത്തിനായി എല്ലാം മാറ്റമില്ലാതെ വിടാനും ഞങ്ങൾ തീരുമാനിച്ചു.

പുതിയ പദ്ധതി ആവശ്യമാണ് നിലവിലുള്ള CI-യിലേക്ക് സംയോജിപ്പിക്കുക. റെയിലുകൾ ഇതിനകം തന്നെ ഉണ്ടായിരുന്നു, കോൺഫിഗറേഷൻ മാനേജുമെന്റ് സിസ്റ്റത്തിന്റെ പാരാമീറ്ററുകൾ, അംഗീകൃത ഡെലിവറി മാനദണ്ഡങ്ങൾ, മോണിറ്ററിംഗ് സിസ്റ്റങ്ങൾ എന്നിവ കണക്കിലെടുത്ത് എല്ലാ ജോലികളും ചെയ്യേണ്ടതുണ്ട്.

പിന്തുണയുടെയും പ്രവർത്തനത്തിന്റെയും എളുപ്പം, വിവിധ ഡിവിഷനുകളിൽ നിന്നും സപ്പോർട്ട് ഡിപ്പാർട്ട്‌മെന്റിൽ നിന്നുമുള്ള എല്ലാ പുതിയ പങ്കാളികൾക്കും മിനിമം എൻട്രി ത്രെഷോൾഡിനുള്ള ഒരു വ്യവസ്ഥയായി.

അവസാന തീയതി - ഇന്നലെ.

വികസന ഗ്രൂപ്പ് വിജയിക്കുക

എന്താണ് വിൻഡോസ് ടീം അപ്പോൾ പ്രവർത്തിക്കുന്നത്?

ലിനക്സിൽ .NET കോർ, കുതിരപ്പുറത്ത് DevOps

ഇപ്പോൾ എനിക്ക് അത് ആത്മവിശ്വാസത്തോടെ പറയാൻ കഴിയും ഐഡന്റിറ്റിസെർവർ4 സമാന കഴിവുകളുള്ള ADFS-നുള്ള ഒരു മികച്ച സൗജന്യ ബദലാണ്, അല്ലെങ്കിൽ എന്താണ് എന്റിറ്റി ഫ്രെയിംവർക്ക് കോർ - ഒരു ഡെവലപ്പർക്കുള്ള ഒരു പറുദീസ, അവിടെ നിങ്ങൾ SQL സ്ക്രിപ്റ്റുകൾ എഴുതുന്നതിൽ വിഷമിക്കേണ്ടതില്ല, എന്നാൽ ഡാറ്റാബേസിലെ ചോദ്യങ്ങൾ OOP നിബന്ധനകളിൽ വിവരിക്കുക. എന്നാൽ, ആക്ഷൻ പ്ലാനിന്റെ ചർച്ചയ്ക്കിടെ, PostgreSQL ഉം Git ഉം മാത്രം തിരിച്ചറിഞ്ഞുകൊണ്ട് ഞാൻ സുമേറിയൻ ക്യൂണിഫോം പോലെ ഈ സ്റ്റാക്കിലേക്ക് നോക്കി.

അക്കാലത്ത് ഞങ്ങൾ സജീവമായി ഉപയോഗിച്ചു പാവ ഒരു കോൺഫിഗറേഷൻ മാനേജ്മെന്റ് സിസ്റ്റമായി. ഞങ്ങളുടെ മിക്ക പ്രോജക്റ്റുകളിലും ഞങ്ങൾ ഉപയോഗിച്ചു ജിറ്റ്‌ലാബ് സി.ഐ, ഇലാസ്റ്റിക്, സമതുലിതമായ ഉയർന്ന ലോഡ് സേവനങ്ങൾ ഉപയോഗിക്കുന്നു ഹാപ്രോക്സി ഉപയോഗിച്ച് എല്ലാം നിരീക്ഷിച്ചു സബ്ബിക്സ്, ലിഗമെന്റുകൾ ഗ്രാഫാന и പ്രോമിത്തിയസ്, ജെയ്‌ഗർ, ഇതെല്ലാം ഇരുമ്പ് കഷണങ്ങളിൽ കറങ്ങുകയായിരുന്നു HPESXi ഓൺ വിഎംവെയർ. എല്ലാവർക്കും ഇത് അറിയാം - ഈ വിഭാഗത്തിന്റെ ഒരു ക്ലാസിക്.

ലിനക്സിൽ .NET കോർ, കുതിരപ്പുറത്ത് DevOps

ഈ ഇടപെടലുകളെല്ലാം ആരംഭിക്കുന്നതിന് മുമ്പ് എന്താണ് സംഭവിച്ചതെന്ന് നമുക്ക് നോക്കാം, മനസിലാക്കാൻ ശ്രമിക്കാം.

എന്താണ് സംഭവിച്ചത്

ക്രോസ്-പ്ലാറ്റ്ഫോം തലത്തിൽ CI നൽകുന്നതിന് - ഡെവലപ്പറിൽ നിന്ന് അന്തിമ ഉൽപ്പാദന യന്ത്രത്തിലേക്ക് കോഡ് എത്തിക്കുക മാത്രമല്ല, വിവിധ സേവനങ്ങളുമായി വളരെ വഴക്കമുള്ള സംയോജനത്തിനുള്ള ഒരു സെറ്റും ഉള്ള ഒരു ശക്തമായ സംവിധാനമാണ് TFS.

ലിനക്സിൽ .NET കോർ, കുതിരപ്പുറത്ത് DevOps
മുമ്പ്, ഇവ സോളിഡ് വിൻഡോകളായിരുന്നു. TFS നിരവധി ബിൽഡ് ഏജന്റുമാരെ ഉപയോഗിച്ചു, അവ നിരവധി പ്രോജക്റ്റുകൾ കൂട്ടിച്ചേർക്കാൻ ഉപയോഗിച്ചു. ടാസ്‌ക്കുകൾ സമാന്തരമാക്കാനും പ്രക്രിയ ഒപ്റ്റിമൈസ് ചെയ്യാനും ഓരോ ഏജന്റിനുമുണ്ട് 3-4 തൊഴിലാളികൾ. തുടർന്ന്, റിലീസ് പ്ലാനുകൾ അനുസരിച്ച്, TFS പുതുതായി ചുട്ടുപഴുപ്പിച്ച ബിൽഡ് വിൻഡോസ് ആപ്ലിക്കേഷൻ സെർവറിലേക്ക് എത്തിച്ചു.

ഞങ്ങൾ എന്താണ് നേടാൻ ആഗ്രഹിച്ചത്?

ഡെലിവറിക്കും വികസനത്തിനുമായി ഞങ്ങൾ TFS ഉപയോഗിക്കുന്നു, കൂടാതെ ഒരു Linux ആപ്ലിക്കേഷൻ സെർവറിൽ ആപ്ലിക്കേഷൻ റൺ ചെയ്യുന്നു, അവയ്ക്കിടയിൽ ഒരുതരം മാന്ത്രികതയുണ്ട്. ഈ മാജിക് ബോക്സ് മുന്നിലുള്ള ജോലിയുടെ ഉപ്പും ഉണ്ട്. ഞാൻ അത് വേർപെടുത്തുന്നതിന് മുമ്പ്, ഞാൻ ഒരു ചുവട് മാറ്റി പ്രയോഗത്തെക്കുറിച്ച് കുറച്ച് വാക്കുകൾ പറയും.

പദ്ധതി

പ്രീപെയ്ഡ് കാർഡുകൾ കൈകാര്യം ചെയ്യുന്നതിനുള്ള പ്രവർത്തനം ആപ്ലിക്കേഷൻ നൽകുന്നു.

ലിനക്സിൽ .NET കോർ, കുതിരപ്പുറത്ത് DevOps

ക്ലയന്റ്

രണ്ട് തരം ഉപയോക്താക്കൾ ഉണ്ടായിരുന്നു. ആദ്യത്തേത് ഒരു SSL SHA-2 സർട്ടിഫിക്കറ്റ് ഉപയോഗിച്ച് ലോഗിൻ ചെയ്തുകൊണ്ട് ആക്സസ് നേടി. യു രണ്ടാമത്തേത് ഒരു പ്രവേശനവും പാസ്‌വേഡും ഉപയോഗിച്ച് ആക്‌സസ് ഉണ്ടായിരുന്നു.

HAProxy

തുടർന്ന് ക്ലയന്റ് അഭ്യർത്ഥന HAProxy ലേക്ക് പോയി, അത് ഇനിപ്പറയുന്ന പ്രശ്നങ്ങൾ പരിഹരിച്ചു:

  • പ്രാഥമിക അംഗീകാരം;
  • SSL അവസാനിപ്പിക്കൽ;
  • HTTP അഭ്യർത്ഥനകൾ ട്യൂൺ ചെയ്യുന്നു;
  • പ്രക്ഷേപണ അഭ്യർത്ഥനകൾ.

ക്ലയന്റ് സർട്ടിഫിക്കറ്റ് ചെയിൻ സഹിതം പരിശോധിച്ചു. ഞങ്ങൾ - അധികാരം സേവന ക്ലയന്റുകൾക്ക് ഞങ്ങൾ സ്വയം സർട്ടിഫിക്കറ്റുകൾ നൽകുന്നതിനാൽ ഞങ്ങൾക്ക് ഇത് താങ്ങാനാകും.

മൂന്നാമത്തെ പോയിന്റ് ശ്രദ്ധിക്കുക, കുറച്ച് കഴിഞ്ഞ് ഞങ്ങൾ അതിലേക്ക് മടങ്ങും.

ബാക്കെൻഡ്

ലിനക്സിൽ ബാക്കെൻഡ് ഉണ്ടാക്കാൻ അവർ പദ്ധതിയിട്ടു. ബാക്കെൻഡ് ഡാറ്റാബേസുമായി ഇടപഴകുന്നു, ആവശ്യമായ പ്രത്യേകാവകാശങ്ങളുടെ ലിസ്റ്റ് ലോഡ് ചെയ്യുന്നു, തുടർന്ന്, അംഗീകൃത ഉപയോക്താവിന് എന്തെല്ലാം പ്രത്യേകാവകാശങ്ങൾ ഉണ്ട് എന്നതിനെ ആശ്രയിച്ച്, സാമ്പത്തിക രേഖകളിൽ ഒപ്പിടാനും അവ നടപ്പിലാക്കുന്നതിനായി അയയ്ക്കാനും അല്ലെങ്കിൽ ഏതെങ്കിലും തരത്തിലുള്ള റിപ്പോർട്ട് സൃഷ്ടിക്കാനും ആക്സസ് നൽകുന്നു.

HAProxy ഉപയോഗിച്ചുള്ള സമ്പാദ്യം

ഓരോ ക്ലയന്റും നാവിഗേറ്റ് ചെയ്ത രണ്ട് സന്ദർഭങ്ങൾക്ക് പുറമേ, ഒരു ഐഡന്റിറ്റി സന്ദർഭവും ഉണ്ടായിരുന്നു. ഐഡന്റിറ്റിസെർവർ4 ലോഗിൻ ചെയ്യാൻ നിങ്ങളെ അനുവദിക്കുന്നു, ഇത് സൗജന്യവും ശക്തവുമായ അനലോഗ് ആണ് എ.ഡി.എഫ്.എസ് - സജീവ ഡയറക്ടറി ഫെഡറേഷൻ സേവനങ്ങൾ.

ഐഡന്റിറ്റി അഭ്യർത്ഥന പല ഘട്ടങ്ങളിലായി പ്രോസസ്സ് ചെയ്തു. ആദ്യത്തെ പടി - ഉപഭോക്താവ് ബാക്കെൻഡിൽ കയറി, ഈ സെർവറുമായി ആശയവിനിമയം നടത്തുകയും ക്ലയന്റിനായി ഒരു ടോക്കണിന്റെ സാന്നിധ്യം പരിശോധിക്കുകയും ചെയ്തു. അത് കണ്ടെത്തിയില്ലെങ്കിൽ, അഭ്യർത്ഥന അത് വന്ന സന്ദർഭത്തിലേക്ക് തിരികെ നൽകി, പക്ഷേ ഒരു റീഡയറക്‌ട് ഉപയോഗിച്ച്, റീഡയറക്‌ടിനൊപ്പം അത് ഐഡന്റിറ്റിയിലേക്ക് പോയി.

രണ്ടാം ഘട്ടം - അഭ്യർത്ഥന ലഭിച്ചു ഐഡന്റിറ്റിസെർവറിലെ അംഗീകാര പേജിലേക്ക്, എവിടെയാണ് ക്ലയന്റ് രജിസ്റ്റർ ചെയ്തത്, ഐഡന്റിറ്റിസെർവർ ഡാറ്റാബേസിൽ ദീർഘകാലമായി കാത്തിരുന്ന ആ ടോക്കൺ പ്രത്യക്ഷപ്പെട്ടു.

മൂന്നാം ഘട്ടം - ഉപഭോക്താവിനെ തിരിച്ചുവിട്ടു അത് വന്ന സന്ദർഭത്തിലേക്ക്.

ലിനക്സിൽ .NET കോർ, കുതിരപ്പുറത്ത് DevOps

IdentityServer4-ന് ഒരു സവിശേഷതയുണ്ട്: ഇത് മടക്ക അഭ്യർത്ഥനയ്ക്കുള്ള പ്രതികരണം HTTP വഴി നൽകുന്നു. സെർവർ സജ്ജീകരിക്കുന്നതിൽ ഞങ്ങൾ എത്ര പാടുപെട്ടാലും, ഡോക്യുമെന്റേഷനിൽ നാം എത്രമാത്രം പ്രബുദ്ധരായാലും, ഓരോ തവണയും ഞങ്ങൾക്ക് HTTPS വഴി വന്ന URL ഉള്ള ഒരു പ്രാരംഭ ക്ലയന്റ് അഭ്യർത്ഥന ലഭിക്കുകയും, IdentityServer അതേ സന്ദർഭം തിരികെ നൽകുകയും ചെയ്തു, എന്നാൽ HTTP. ഞങ്ങൾ ഞെട്ടിപ്പോയി! ഞങ്ങൾ ഇതെല്ലാം ഐഡന്റിറ്റി സന്ദർഭത്തിലൂടെ HAProxy ലേക്ക് കൈമാറി, തലക്കെട്ടുകളിൽ ഞങ്ങൾക്ക് HTTP പ്രോട്ടോക്കോൾ HTTPS-ലേക്ക് പരിഷ്‌ക്കരിക്കേണ്ടതുണ്ട്.

എന്താണ് മെച്ചപ്പെടുത്തൽ, നിങ്ങൾ എവിടെയാണ് സംരക്ഷിച്ചത്?

ഒരു പ്രത്യേക സെഗ്‌മെന്റിൽ ഐഡന്റിറ്റിസെർവർ 4 ഒരു പ്രത്യേക നോഡായി ഞങ്ങൾ സ്ഥാപിച്ചിട്ടില്ലാത്തതിനാൽ, ആപ്ലിക്കേഷന്റെ ബാക്കെൻഡ് പ്രവർത്തിക്കുന്ന അതേ സെർവറിലെ ബാക്കെൻഡിനൊപ്പം ഉപയോഗിച്ചതിനാൽ, ഒരു കൂട്ടം ഉപയോക്താക്കൾക്കും ഉറവിടങ്ങൾക്കും അംഗീകാരം നൽകുന്നതിനുള്ള ഒരു സൗജന്യ പരിഹാരം ഉപയോഗിച്ച് ഞങ്ങൾ പണം ലാഭിച്ചു. .

അത് എങ്ങനെ പ്രവർത്തിക്കണം

അതിനാൽ, ഞാൻ വാഗ്ദാനം ചെയ്തതുപോലെ - മാജിക് ബോക്സ്. ലിനക്സിലേക്ക് നീങ്ങാൻ ഞങ്ങൾക്ക് ഉറപ്പുണ്ടെന്ന് ഞങ്ങൾ ഇതിനകം മനസ്സിലാക്കുന്നു. പരിഹാരങ്ങൾ ആവശ്യമായ പ്രത്യേക ജോലികൾ രൂപപ്പെടുത്താം.

ലിനക്സിൽ .NET കോർ, കുതിരപ്പുറത്ത് DevOps

പാവ പ്രകടമാക്കുന്നു. സേവനവും ആപ്ലിക്കേഷൻ കോൺഫിഗറേഷനും ഡെലിവർ ചെയ്യാനും നിയന്ത്രിക്കാനും, രസകരമായ പാചകക്കുറിപ്പുകൾ എഴുതേണ്ടതുണ്ട്. പെൻസിൽ ഒരു റോൾ അത് എത്ര വേഗത്തിലും കാര്യക്ഷമമായും ചെയ്തുവെന്ന് വാചാലമായി കാണിക്കുന്നു.

വിതരണ സംവിധാനം. RPM ആണ് സ്റ്റാൻഡേർഡ്. ലിനക്സിൽ നിങ്ങൾക്ക് ഇത് കൂടാതെ ചെയ്യാൻ കഴിയില്ലെന്ന് എല്ലാവരും മനസ്സിലാക്കുന്നു, എന്നാൽ പ്രോജക്റ്റ് തന്നെ, അസംബ്ലിക്ക് ശേഷം, എക്സിക്യൂട്ടബിൾ DLL ഫയലുകളുടെ ഒരു കൂട്ടമായിരുന്നു. അവരിൽ 150 ഓളം ഉണ്ടായിരുന്നു, പദ്ധതി വളരെ ബുദ്ധിമുട്ടായിരുന്നു. ഈ ബൈനറി RPM-ലേക്ക് പാക്കേജ് ചെയ്ത് അതിൽ നിന്ന് ആപ്ലിക്കേഷൻ വിന്യസിക്കുക എന്നതാണ് ഏക യോജിച്ച പരിഹാരം.

പതിപ്പ്. ഞങ്ങൾക്ക് പലപ്പോഴും റിലീസ് ചെയ്യേണ്ടിവന്നു, പാക്കേജിന്റെ പേര് എങ്ങനെ രൂപപ്പെടുത്തണമെന്ന് ഞങ്ങൾ തീരുമാനിക്കേണ്ടതുണ്ട്. ഇത് ടിഎഫ്എസുമായുള്ള സംയോജനത്തിന്റെ നിലവാരത്തെക്കുറിച്ചുള്ള ചോദ്യമാണ്. ലിനക്സിൽ ഞങ്ങൾക്ക് ഒരു ബിൽഡ് ഏജന്റ് ഉണ്ടായിരുന്നു. TFS ഒരു ഹാൻഡ്‌ലറിന് - തൊഴിലാളിക്ക് - ബിൽഡ് ഏജന്റിലേക്ക് ഒരു ടാസ്‌ക് അയയ്‌ക്കുമ്പോൾ, അത് ഹാൻഡ്‌ലർ പ്രക്രിയയുടെ പരിതസ്ഥിതിയിൽ അവസാനിക്കുന്ന ഒരു കൂട്ടം വേരിയബിളുകളും കൈമാറുന്നു. ഈ എൻവയോൺമെന്റ് വേരിയബിളുകളിൽ ബിൽഡ് നാമം, പതിപ്പിന്റെ പേര്, മറ്റ് വേരിയബിളുകൾ എന്നിവ അടങ്ങിയിരിക്കുന്നു. "ഒരു RPM പാക്കേജ് നിർമ്മിക്കുന്നു" എന്ന വിഭാഗത്തിൽ ഇതിനെക്കുറിച്ച് കൂടുതൽ വായിക്കുക.

TFS സജ്ജീകരിക്കുന്നു പൈപ്പ് ലൈൻ സ്ഥാപിക്കാൻ ഇറങ്ങി. മുമ്പ്, വിൻഡോസ് ഏജന്റുമാരിൽ ഞങ്ങൾ എല്ലാ വിൻഡോസ് പ്രോജക്റ്റുകളും ശേഖരിച്ചു, എന്നാൽ ഇപ്പോൾ ഒരു ലിനക്സ് ഏജന്റ് പ്രത്യക്ഷപ്പെടുന്നു - ബിൽഡ് ഗ്രൂപ്പിൽ ഉൾപ്പെടുത്തേണ്ട ഒരു ബിൽഡ് ഏജന്റ്, ചില പുരാവസ്തുക്കൾ കൊണ്ട് സമ്പുഷ്ടമാക്കുകയും ഈ ബിൽഡ് ഏജന്റിൽ ഏത് തരത്തിലുള്ള പ്രോജക്റ്റുകൾ നിർമ്മിക്കുമെന്ന് പറയുകയും ചെയ്യുന്നു. , പൈപ്പ് ലൈൻ എങ്ങനെയെങ്കിലും പരിഷ്കരിക്കുക.

ഐഡന്റിറ്റി സെർവർ. ADFS ഞങ്ങളുടെ വഴിയല്ല, ഞങ്ങൾ ഓപ്പൺ സോഴ്‌സിലേക്കാണ് പോകുന്നത്.

നമുക്ക് ഘടകങ്ങളിലൂടെ പോകാം.

മാജിക് ബോക്സ്

നാല് ഭാഗങ്ങൾ ഉൾക്കൊള്ളുന്നു.

ലിനക്സിൽ .NET കോർ, കുതിരപ്പുറത്ത് DevOps

Linux ബിൽഡ് ഏജന്റ്. ലിനക്സ്, കാരണം ഞങ്ങൾ അതിനായി നിർമ്മിക്കുന്നു - ഇത് യുക്തിസഹമാണ്. ഈ ഭാഗം മൂന്ന് ഘട്ടങ്ങളായി ചെയ്തു.

  • തൊഴിലാളികളെ കോൺഫിഗർ ചെയ്യുക പദ്ധതിയിൽ വിതരണം ചെയ്ത ജോലി പ്രതീക്ഷിച്ചിരുന്നതിനാൽ ഒറ്റയ്ക്കല്ല.
  • .NET കോർ 1.x ഇൻസ്റ്റാൾ ചെയ്യുക. സ്റ്റാൻഡേർഡ് റിപ്പോസിറ്ററിയിൽ 1 ഇതിനകം ലഭ്യമായിരിക്കുമ്പോൾ എന്തുകൊണ്ട് 2.0.x? കാരണം ഞങ്ങൾ വികസനം ആരംഭിച്ചപ്പോൾ, സ്ഥിരതയുള്ള പതിപ്പ് 1.09 ആയിരുന്നു, അതിന്റെ അടിസ്ഥാനത്തിൽ പ്രോജക്റ്റ് നിർമ്മിക്കാൻ തീരുമാനിച്ചു.
  • Git 2.x.

RPM-റിപ്പോസിറ്ററി. ആർപിഎം പാക്കേജുകൾ എവിടെയെങ്കിലും സൂക്ഷിക്കേണ്ടതുണ്ട്. എല്ലാ Linux ഹോസ്റ്റുകൾക്കും ലഭ്യമായ അതേ കോർപ്പറേറ്റ് RPM റിപ്പോസിറ്ററി ഞങ്ങൾ ഉപയോഗിക്കുമെന്ന് അനുമാനിച്ചു. അതാണ് അവർ ചെയ്തത്. റിപ്പോസിറ്ററി സെർവർ ക്രമീകരിച്ചു വെബ്‌ഹൂക്ക് നിർദ്ദിഷ്ട ലൊക്കേഷനിൽ നിന്ന് ആവശ്യമായ RPM പാക്കേജ് ഡൗൺലോഡ് ചെയ്തു. പാക്കേജ് പതിപ്പ് ബിൽഡ് ഏജന്റ് വെബ്‌ഹുക്കിന് റിപ്പോർട്ട് ചെയ്തു.

GitLab. ശ്രദ്ധ! ഇവിടെ GitLab ഉപയോഗിക്കുന്നത് ഡവലപ്പർമാരല്ല, മറിച്ച് ആപ്ലിക്കേഷൻ പതിപ്പുകൾ, പാക്കേജ് പതിപ്പുകൾ, എല്ലാ ലിനക്സ് മെഷീനുകളുടെയും സ്റ്റാറ്റസ് നിരീക്ഷിക്കാൻ ഓപ്പറേഷൻസ് ഡിപ്പാർട്ട്മെന്റാണ്, കൂടാതെ പാചകക്കുറിപ്പ് സംഭരിക്കുന്നു - എല്ലാ പപ്പറ്റ് മാനിഫെസ്റ്റുകളും.

പാവ - എല്ലാ വിവാദ പ്രശ്നങ്ങളും പരിഹരിക്കുകയും Gitlab-ൽ നിന്ന് നമുക്ക് ആവശ്യമുള്ള കോൺഫിഗറേഷൻ കൃത്യമായി നൽകുകയും ചെയ്യുന്നു.

ഞങ്ങൾ മുങ്ങാൻ തുടങ്ങുന്നു. RPM-ലേക്കുള്ള DLL ഡെലിവറി എങ്ങനെയാണ് പ്രവർത്തിക്കുന്നത്?

RPM-ലേക്ക് DDL ഡെലിവറി ചെയ്യുക

നമുക്ക് ഒരു .NET ഡെവലപ്മെന്റ് റോക്ക് സ്റ്റാർ ഉണ്ടെന്ന് പറയാം. ഇത് വിഷ്വൽ സ്റ്റുഡിയോ ഉപയോഗിക്കുകയും ഒരു റിലീസ് ബ്രാഞ്ച് സൃഷ്ടിക്കുകയും ചെയ്യുന്നു. അതിനുശേഷം, അത് Git-ലേക്ക് അപ്‌ലോഡ് ചെയ്യുന്നു, കൂടാതെ Git ഇവിടെ ഒരു TFS എന്റിറ്റിയാണ്, അതായത്, ഡെവലപ്പർ പ്രവർത്തിക്കുന്ന ആപ്ലിക്കേഷൻ റിപ്പോസിറ്ററിയാണിത്.

ലിനക്സിൽ .NET കോർ, കുതിരപ്പുറത്ത് DevOps

അതിനുശേഷം ഒരു പുതിയ കമ്മിറ്റ് വന്നതായി TFS കാണുന്നു. ഏത് ആപ്പ്? TFS ക്രമീകരണങ്ങളിൽ ഒരു പ്രത്യേക ബിൽഡ് ഏജന്റിന് എന്തെല്ലാം ഉറവിടങ്ങളാണ് ഉള്ളതെന്ന് സൂചിപ്പിക്കുന്ന ഒരു ലേബൽ ഉണ്ട്. ഈ സാഹചര്യത്തിൽ, ഞങ്ങൾ ഒരു .NET കോർ പ്രോജക്റ്റ് നിർമ്മിക്കുന്നത് അവൻ കാണുകയും പൂളിൽ നിന്ന് ഒരു Linux Build ഏജന്റിനെ തിരഞ്ഞെടുക്കുകയും ചെയ്യുന്നു.

ബിൽഡ് ഏജന്റ് ഉറവിടങ്ങൾ സ്വീകരിക്കുകയും ആവശ്യമായവ ഡൗൺലോഡ് ചെയ്യുകയും ചെയ്യുന്നു ഡിപൻഡൻസികൾ .NET റിപ്പോസിറ്ററി, npm മുതലായവയിൽ നിന്ന്. ആപ്ലിക്കേഷനും തുടർന്നുള്ള പാക്കേജിംഗും നിർമ്മിച്ച ശേഷം, RPM പാക്കേജ് RPM ശേഖരത്തിലേക്ക് അയയ്ക്കുന്നു.

മറുവശത്ത്, ഇനിപ്പറയുന്നവ സംഭവിക്കുന്നു. ഓപ്പറേഷൻസ് ഡിപ്പാർട്ട്‌മെന്റ് എഞ്ചിനീയർ പ്രോജക്റ്റിന്റെ റോളൗട്ടിൽ നേരിട്ട് പങ്കാളിയാണ്: അദ്ദേഹം പാക്കേജുകളുടെ പതിപ്പുകൾ മാറ്റുന്നു ഹിയറ ആപ്ലിക്കേഷൻ പാചകക്കുറിപ്പ് സംഭരിച്ചിരിക്കുന്ന ശേഖരത്തിൽ, അതിനുശേഷം പപ്പറ്റ് ട്രിഗർ ചെയ്യുന്നു അടിപൊളി, റിപ്പോസിറ്ററിയിൽ നിന്ന് പുതിയ പാക്കേജ് ലഭ്യമാക്കുന്നു, ആപ്ലിക്കേഷന്റെ പുതിയ പതിപ്പ് ഉപയോഗിക്കാൻ തയ്യാറാണ്.

ലിനക്സിൽ .NET കോർ, കുതിരപ്പുറത്ത് DevOps

വാക്കുകളിൽ എല്ലാം ലളിതമാണ്, എന്നാൽ ബിൽഡ് ഏജന്റിനുള്ളിൽ തന്നെ എന്താണ് സംഭവിക്കുന്നത്?

പാക്കേജിംഗ് DLL RPM

TFS-ൽ നിന്ന് പ്രോജക്ട് ഉറവിടങ്ങളും നിർമ്മാണ ചുമതലയും ലഭിച്ചു. ബിൽഡ് ഏജന്റ് ഉറവിടങ്ങളിൽ നിന്ന് തന്നെ പദ്ധതി നിർമ്മിക്കാൻ തുടങ്ങുന്നു. അസംബിൾ ചെയ്ത പ്രോജക്റ്റ് ഒരു സെറ്റായി ലഭ്യമാണ് DLL ഫയലുകൾ, ഫയൽ സിസ്റ്റത്തിലെ ലോഡ് കുറയ്ക്കുന്നതിന് ഒരു zip ആർക്കൈവിൽ പാക്കേജുചെയ്തിരിക്കുന്നു.

ZIP ആർക്കൈവ് വലിച്ചെറിഞ്ഞു RPM പാക്കേജ് ബിൽഡ് ഡയറക്ടറിയിലേക്ക്. അടുത്തതായി, ബാഷ് സ്ക്രിപ്റ്റ് എൻവയോൺമെന്റ് വേരിയബിളുകൾ ആരംഭിക്കുന്നു, ബിൽഡ് പതിപ്പ്, പ്രോജക്റ്റ് പതിപ്പ്, ബിൽഡ് ഡയറക്‌ടറിയിലേക്കുള്ള പാത എന്നിവ കണ്ടെത്തുന്നു, കൂടാതെ RPM-build പ്രവർത്തിപ്പിക്കുന്നു. ബിൽഡ് പൂർത്തിയായിക്കഴിഞ്ഞാൽ, പാക്കേജ് പ്രസിദ്ധീകരിക്കും പ്രാദേശിക ശേഖരം, ഇത് ബിൽഡ് ഏജന്റിൽ സ്ഥിതിചെയ്യുന്നു.

അടുത്തതായി, ബിൽഡ് ഏജന്റിൽ നിന്ന് RPM റിപ്പോസിറ്ററിയിലെ സെർവറിലേക്ക് JSON അഭ്യർത്ഥന അയച്ചു പതിപ്പിന്റെയും നിർമ്മാണത്തിന്റെയും പേര് സൂചിപ്പിക്കുന്നു. ഞാൻ നേരത്തെ സംസാരിച്ച Webhook, ബിൽഡ് ഏജന്റിലെ ലോക്കൽ ശേഖരത്തിൽ നിന്ന് ഈ പാക്കേജ് ഡൗൺലോഡ് ചെയ്യുകയും പുതിയ അസംബ്ലി ഇൻസ്റ്റാളേഷനായി ലഭ്യമാക്കുകയും ചെയ്യുന്നു.

ലിനക്സിൽ .NET കോർ, കുതിരപ്പുറത്ത് DevOps

RPM ശേഖരത്തിലേക്ക് ഈ പ്രത്യേക പാക്കേജ് ഡെലിവറി സ്കീം എന്തിനാണ്? എന്തുകൊണ്ടാണ് എനിക്ക് അസംബിൾ ചെയ്ത പാക്കേജ് ഉടനടി റിപ്പോസിറ്ററിയിലേക്ക് അയയ്ക്കാൻ കഴിയാത്തത്? സുരക്ഷ ഉറപ്പാക്കുന്നതിനുള്ള ഒരു വ്യവസ്ഥയാണ് ഇത് എന്നതാണ് വസ്തുത. എല്ലാ Linux മെഷീനുകൾക്കും ആക്സസ് ചെയ്യാവുന്ന ഒരു സെർവറിലേക്ക് അനധികൃത ആളുകൾ RPM പാക്കേജുകൾ അപ്‌ലോഡ് ചെയ്യുന്നതിനുള്ള സാധ്യത ഈ സാഹചര്യം പരിമിതപ്പെടുത്തുന്നു.

ഡാറ്റാബേസ് പതിപ്പ്

ഡെവലപ്‌മെന്റ് ടീമുമായുള്ള ഒരു കൂടിയാലോചനയിൽ, ആൺകുട്ടികൾ MS SQL-നോട് കൂടുതൽ അടുപ്പമുള്ളവരാണെന്ന് മനസ്സിലായി, എന്നാൽ മിക്ക വിൻഡോസ് ഇതര പ്രോജക്റ്റുകളിലും ഞങ്ങൾ ഇതിനകം തന്നെ അവരുടെ എല്ലാ ശക്തിയോടെയും PostgreSQL ഉപയോഗിക്കുന്നു. പണമടച്ചതെല്ലാം ഉപേക്ഷിക്കാൻ ഞങ്ങൾ ഇതിനകം തീരുമാനിച്ചതിനാൽ, ഞങ്ങൾ ഇവിടെയും PostgreSQL ഉപയോഗിക്കാൻ തുടങ്ങി.

ലിനക്സിൽ .NET കോർ, കുതിരപ്പുറത്ത് DevOps

ഈ ഭാഗത്ത് ഞങ്ങൾ എങ്ങനെയാണ് ഡാറ്റാബേസ് പതിപ്പിച്ചതെന്നും ഫ്ലൈവേയ്ക്കും എന്റിറ്റി ഫ്രെയിംവർക്ക് കോറിനും ഇടയിൽ ഞങ്ങൾ എങ്ങനെ തിരഞ്ഞെടുത്തുവെന്നും നിങ്ങളോട് പറയാൻ ഞാൻ ആഗ്രഹിക്കുന്നു. അവയുടെ ഗുണദോഷങ്ങൾ നോക്കാം.

Минусы

ഫ്ലൈവേ ഒരു വഴി മാത്രമേ പോകുന്നുള്ളൂ, ഞങ്ങൾ നമുക്ക് പിന്നോട്ട് പോകാൻ കഴിയില്ല - ഇത് ഒരു പ്രധാന പോരായ്മയാണ്. നിങ്ങൾക്ക് ഇത് എന്റിറ്റി ഫ്രെയിംവർക്ക് കോറുമായി മറ്റ് വഴികളിൽ താരതമ്യം ചെയ്യാം - ഡെവലപ്പർ സൗകര്യത്തിന്റെ അടിസ്ഥാനത്തിൽ. ഞങ്ങൾ ഇത് മുൻ‌ഗണനയിൽ വച്ചതായി നിങ്ങൾ ഓർക്കുന്നു, വിൻഡോസ് വികസനത്തിനായി ഒന്നും മാറ്റരുത് എന്നതായിരുന്നു പ്രധാന മാനദണ്ഡം.

ഫ്ലൈവേ ഞങ്ങൾക്കായി ഒരുതരം പൊതി ആവശ്യമായിരുന്നുഅതിനാൽ ആൺകുട്ടികൾ എഴുതുന്നില്ല SQL അന്വേഷണങ്ങൾ. OOP നിബന്ധനകളിൽ പ്രവർത്തിക്കുന്നതിന് അവ വളരെ അടുത്താണ്. ഡാറ്റാബേസ് ഒബ്‌ജക്‌റ്റുകൾക്കൊപ്പം പ്രവർത്തിക്കുന്നതിനുള്ള നിർദ്ദേശങ്ങൾ ഞങ്ങൾ എഴുതി, ഒരു SQL അന്വേഷണം സൃഷ്‌ടിച്ച് അത് എക്‌സിക്യൂട്ട് ചെയ്‌തു. ഡാറ്റാബേസിന്റെ പുതിയ പതിപ്പ് തയ്യാറാണ്, പരീക്ഷിച്ചു - എല്ലാം ശരിയാണ്, എല്ലാം പ്രവർത്തിക്കുന്നു.

എന്റിറ്റി ഫ്രെയിംവർക്ക് കോറിന് ഒരു മൈനസ് ഉണ്ട് - കനത്ത ലോഡുകളിൽ അത് ഉപാധിഷ്ഠിത SQL അന്വേഷണങ്ങൾ നിർമ്മിക്കുന്നു, കൂടാതെ ഡാറ്റാബേസിലെ ഡ്രോഡൗൺ പ്രാധാന്യമുള്ളതാണ്. എന്നാൽ ഞങ്ങൾക്ക് ഉയർന്ന-ലോഡ് സേവനം ഇല്ലാത്തതിനാൽ, നൂറുകണക്കിന് RPS-കളിൽ ഞങ്ങൾ ലോഡ് കണക്കാക്കുന്നില്ല, ഈ അപകടസാധ്യതകൾ ഞങ്ങൾ അംഗീകരിക്കുകയും പ്രശ്‌നം ഭാവിയിൽ ഞങ്ങൾക്ക് നൽകുകയും ചെയ്തു.

പുലി

എന്റിറ്റി ഫ്രെയിംവർക്ക് കോർ ബോക്‌സിന് പുറത്ത് പ്രവർത്തിക്കുകയും വികസിപ്പിക്കാൻ എളുപ്പവുമാണ്, ഒപ്പം ഫ്ലൈവേ നിലവിലുള്ള CI-യിലേക്ക് എളുപ്പത്തിൽ സംയോജിപ്പിക്കുന്നു. എന്നാൽ ഞങ്ങൾ ഇത് ഡവലപ്പർമാർക്ക് സൗകര്യപ്രദമാക്കുന്നു :)

റോൾ-അപ്പ് നടപടിക്രമം

കുടിയേറ്റത്തിന് ഉത്തരവാദിയായത് ഉൾപ്പെടെ പാക്കേജ് പതിപ്പിൽ ഒരു മാറ്റം വരുന്നതായി പപ്പറ്റ് കാണുന്നു. ആദ്യം, മൈഗ്രേഷൻ സ്ക്രിപ്റ്റുകളും ഡാറ്റാബേസുമായി ബന്ധപ്പെട്ട പ്രവർത്തനങ്ങളും അടങ്ങുന്ന ഒരു പാക്കേജ് ഇത് ഇൻസ്റ്റാൾ ചെയ്യുന്നു. ഇതിനുശേഷം, ഡാറ്റാബേസിൽ പ്രവർത്തിക്കുന്ന ആപ്ലിക്കേഷൻ പുനരാരംഭിക്കുന്നു. അടുത്തതായി ശേഷിക്കുന്ന ഘടകങ്ങളുടെ ഇൻസ്റ്റാളേഷൻ വരുന്നു. പാക്കേജുകൾ ഇൻസ്റ്റാൾ ചെയ്യുന്നതും ആപ്ലിക്കേഷനുകൾ സമാരംഭിക്കുന്നതുമായ ക്രമം പപ്പറ്റ് മാനിഫെസ്റ്റിൽ വിവരിച്ചിരിക്കുന്നു.

ആപ്ലിക്കേഷനുകൾ ടോക്കണുകൾ, ഡാറ്റാബേസ് പാസ്‌വേഡുകൾ പോലുള്ള സെൻസിറ്റീവ് ഡാറ്റ ഉപയോഗിക്കുന്നു, ഇവയെല്ലാം പപ്പറ്റ് മാസ്റ്ററിൽ നിന്നുള്ള കോൺഫിഗറിലേക്ക് വലിച്ചിടുന്നു, അവിടെ അവ എൻക്രിപ്റ്റ് ചെയ്ത രൂപത്തിൽ സംഭരിക്കുന്നു.

TFS പ്രശ്നങ്ങൾ

എല്ലാം ഞങ്ങൾക്ക് വേണ്ടി പ്രവർത്തിക്കുന്നുവെന്ന് ഞങ്ങൾ തീരുമാനിക്കുകയും മനസ്സിലാക്കുകയും ചെയ്‌ത ശേഷം, മറ്റ് പ്രോജക്‌ടുകളിൽ വിൻ ഡെവലപ്‌മെന്റ് ഡിപ്പാർട്ട്‌മെന്റിനായി ടിഎഫ്‌എസിലെ അസംബ്ലികളിൽ മൊത്തത്തിൽ എന്താണ് നടക്കുന്നതെന്ന് നോക്കാൻ ഞാൻ തീരുമാനിച്ചു - ഞങ്ങൾ വേഗത്തിൽ നിർമ്മിക്കുകയോ റിലീസ് ചെയ്യുകയോ ചെയ്യുക, കൂടാതെ വേഗതയിൽ കാര്യമായ പ്രശ്നങ്ങൾ കണ്ടെത്തി.

പ്രധാന പ്രോജക്റ്റുകളിലൊന്ന് കൂട്ടിച്ചേർക്കാൻ 12-15 മിനിറ്റ് എടുക്കും - അത് വളരെക്കാലമാണ്, നിങ്ങൾക്ക് അങ്ങനെ ജീവിക്കാൻ കഴിയില്ല. ഒരു ദ്രുത വിശകലനം I/O-യിൽ ഭയങ്കരമായ ഒരു കുറവ് കാണിച്ചു, ഇത് അറേകളിലായിരുന്നു.

ഘടകം അനുസരിച്ച് അതിന്റെ ഘടകം വിശകലനം ചെയ്ത ശേഷം, ഞാൻ മൂന്ന് കേന്ദ്രങ്ങളെ തിരിച്ചറിഞ്ഞു. ആദ്യം - "കാസ്‌പെർസ്‌കി ആന്റിവൈറസ്", ഇത് എല്ലാ വിൻഡോസ് ബിൽഡ് ഏജന്റുമാരുടെയും ഉറവിടങ്ങൾ സ്കാൻ ചെയ്യുന്നു. രണ്ടാമത്തേത് - വിൻഡോസ് സൂചിക. ഇത് പ്രവർത്തനരഹിതമാക്കിയിട്ടില്ല, വിന്യാസ പ്രക്രിയയിൽ ബിൽഡ് ഏജന്റുകളിൽ എല്ലാം തത്സമയം സൂചികയിലാക്കി.

മൂന്നാമത് - Npm ഇൻസ്റ്റാൾ ചെയ്യുക. മിക്ക പൈപ്പ് ലൈനുകളിലും ഞങ്ങൾ ഈ കൃത്യമായ സാഹചര്യം ഉപയോഗിച്ചതായി തെളിഞ്ഞു. എന്തുകൊണ്ടാണ് അവൻ മോശമായത്? ഡിപൻഡൻസി ട്രീ രൂപപ്പെടുമ്പോൾ Npm ഇൻസ്റ്റാളേഷൻ നടപടിക്രമം പ്രവർത്തിക്കുന്നു പാക്കേജ്-lock.json, പ്രൊജക്‌റ്റ് നിർമ്മിക്കാൻ ഉപയോഗിക്കുന്ന പാക്കേജുകളുടെ പതിപ്പുകൾ റെക്കോർഡ് ചെയ്‌തിരിക്കുന്നു. Npm ഇൻസ്റ്റാളേഷൻ ഓരോ തവണയും ഇന്റർനെറ്റിൽ നിന്നുള്ള പാക്കേജുകളുടെ ഏറ്റവും പുതിയ പതിപ്പുകൾ ഉയർത്തുന്നു എന്നതാണ് പോരായ്മ, ഒരു വലിയ പ്രോജക്റ്റിന്റെ കാര്യത്തിൽ ഇതിന് വളരെയധികം സമയമെടുക്കും.

ഒരു പ്രത്യേക ഭാഗമോ മുഴുവൻ പദ്ധതിയോ എങ്ങനെ പ്രവർത്തിക്കുന്നുവെന്ന് പരിശോധിക്കാൻ ഡെവലപ്പർമാർ ചിലപ്പോൾ ഒരു പ്രാദേശിക മെഷീനിൽ പരീക്ഷണം നടത്താറുണ്ട്. ചിലപ്പോൾ എല്ലാം പ്രാദേശികമായി തണുത്തതാണെന്ന് മനസ്സിലായി, പക്ഷേ അവർ അത് കൂട്ടിയോജിപ്പിച്ചു, ഉരുട്ടി, ഒന്നും പ്രവർത്തിച്ചില്ല. എന്താണ് പ്രശ്നം എന്ന് ഞങ്ങൾ കണ്ടുപിടിക്കാൻ തുടങ്ങുന്നു - അതെ, ഡിപൻഡൻസികളുള്ള പാക്കേജുകളുടെ വ്യത്യസ്ത പതിപ്പുകൾ.

തീരുമാനം

  • AV ഒഴിവാക്കലുകളിലെ ഉറവിടങ്ങൾ.
  • ഇൻഡെക്സിംഗ് പ്രവർത്തനരഹിതമാക്കുക.
  • എന്നതിലേക്കുള്ള പരിവർത്തനം എൻപിഎം സിഐ.

npm ci യുടെ ഗുണങ്ങൾ നമ്മൾ ആണ് ഞങ്ങൾ ഒരിക്കൽ ആശ്രിത വൃക്ഷം ശേഖരിക്കുന്നു, ഡെവലപ്പർക്ക് നൽകാനുള്ള അവസരം ഞങ്ങൾക്ക് ലഭിക്കുന്നു പാക്കേജുകളുടെ നിലവിലെ ലിസ്റ്റ്, അതുപയോഗിച്ച് അയാൾക്ക് ഇഷ്ടമുള്ളത്ര പ്രാദേശികമായി പരീക്ഷണം നടത്താം. ഈ സമയം ലാഭിക്കുന്നു കോഡ് എഴുതുന്ന ഡെവലപ്പർമാർ.

കോൺഫിഗറേഷൻ

ഇപ്പോൾ റിപ്പോസിറ്ററി കോൺഫിഗറേഷനെക്കുറിച്ച് കുറച്ച്. ചരിത്രപരമായി നമ്മൾ ഉപയോഗിക്കുന്നത് നെക്സസ് ഉൾപ്പെടെയുള്ള റിപ്പോസിറ്ററികൾ കൈകാര്യം ചെയ്യുന്നതിന് ആന്തരിക റിപ്പോ. ഈ ആന്തരിക ശേഖരത്തിൽ ഞങ്ങൾ ആന്തരിക ആവശ്യങ്ങൾക്കായി ഉപയോഗിക്കുന്ന എല്ലാ ഘടകങ്ങളും അടങ്ങിയിരിക്കുന്നു, ഉദാഹരണത്തിന്, സ്വയം എഴുതിയ നിരീക്ഷണം.

ലിനക്സിൽ .NET കോർ, കുതിരപ്പുറത്ത് DevOps

ഞങ്ങളും ഉപയോഗിക്കുന്നു ന്യൂജെറ്റ്, മറ്റ് പാക്കേജ് മാനേജർമാരുമായി താരതമ്യം ചെയ്യുമ്പോൾ മികച്ച കാഷിംഗ് ഉള്ളതിനാൽ.

ഫലം

ഞങ്ങൾ ബിൽഡ് ഏജന്റുകൾ ഒപ്റ്റിമൈസ് ചെയ്ത ശേഷം, ശരാശരി ബിൽഡ് സമയം 12 മിനിറ്റിൽ നിന്ന് 7 ആയി കുറച്ചു.

Windows-നായി ഉപയോഗിക്കാമായിരുന്ന എല്ലാ മെഷീനുകളും ഞങ്ങൾ കണക്കാക്കുകയും ഈ പ്രോജക്റ്റിൽ ലിനക്സിലേക്ക് മാറുകയും ചെയ്താൽ, ഞങ്ങൾ ഏകദേശം $10 ലാഭിച്ചു. അത് ലൈസൻസുകളിൽ മാത്രം, ഉള്ളടക്കം കണക്കിലെടുക്കുകയാണെങ്കിൽ അതിലേറെയും.

പദ്ധതികൾ

അടുത്ത പാദത്തിൽ, കോഡ് ഡെലിവറി ഒപ്റ്റിമൈസ് ചെയ്യാൻ ഞങ്ങൾ പദ്ധതിയിട്ടിരുന്നു.

ഒരു പ്രീബിൽഡ് ഡോക്കർ ചിത്രത്തിലേക്ക് മാറുന്നു. ഒരു ഡോക്കർ ഇമേജിന്റെ ട്രിഗർ അധിഷ്‌ഠിത അസംബ്ലി ഉൾപ്പെടെ, പൈപ്പ്‌ലൈനിലേക്ക് സംയോജിപ്പിക്കാൻ നിങ്ങളെ അനുവദിക്കുന്ന നിരവധി പ്ലഗിനുകളുള്ള ഒരു രസകരമായ കാര്യമാണ് TFS. ഈ ട്രിഗർ ഒരേ ഒന്നായി മാറ്റാൻ ഞങ്ങൾ ആഗ്രഹിക്കുന്നു പാക്കേജ്-lock.json. പ്രോജക്റ്റ് നിർമ്മിക്കാൻ ഉപയോഗിക്കുന്ന ഘടകങ്ങളുടെ ഘടന എങ്ങനെയെങ്കിലും മാറുകയാണെങ്കിൽ, ഞങ്ങൾ ഒരു പുതിയ ഡോക്കർ ഇമേജ് നിർമ്മിക്കുന്നു. ഇത് പിന്നീട് അസംബിൾ ചെയ്ത ആപ്ലിക്കേഷനുമായി കണ്ടെയ്നർ വിന്യസിക്കാൻ ഉപയോഗിക്കുന്നു. ഇത് ഇപ്പോൾ അങ്ങനെയല്ല, എന്നാൽ ഞങ്ങളുടെ കമ്പനിയിൽ സജീവമായി വികസിച്ചുകൊണ്ടിരിക്കുന്ന കുബർനെറ്റിലെ മൈക്രോ സർവീസ് ആർക്കിടെക്ചറിലേക്ക് മാറാൻ ഞങ്ങൾ പദ്ധതിയിടുകയാണ്.

സംഗ്രഹം

വിൻഡോസ് വലിച്ചെറിയാൻ ഞാൻ എല്ലാവരേയും പ്രോത്സാഹിപ്പിക്കുന്നു, പക്ഷേ അത് പാചകം ചെയ്യാൻ എനിക്ക് അറിയാത്തത് കൊണ്ടല്ല. കാരണം, മിക്ക ഓപ്പൺ സോഴ്‌സ് സൊല്യൂഷനുകളും ആകുന്നു ലിനക്സ് സ്റ്റാക്ക്. നിങ്ങൾ ഓകെയാണോ വിഭവങ്ങളിൽ സംരക്ഷിക്കുക. എന്റെ അഭിപ്രായത്തിൽ, ശക്തമായ ഒരു കമ്മ്യൂണിറ്റിയുള്ള ലിനക്സിലെ ഓപ്പൺ സോഴ്സ് സൊല്യൂഷനുകളുടേതാണ് ഭാവി.

അലക്സാണ്ടർ സിഞ്ചിനോവിന്റെ സ്പീക്കർ പ്രൊഫൈൽ GitHub-ൽ.

DevOps കോൺഫ് പ്രൊഫഷണലുകൾക്ക് വേണ്ടിയുള്ള വികസനം, ടെസ്റ്റിംഗ്, ഓപ്പറേഷൻ പ്രക്രിയകൾ എന്നിവയുടെ സംയോജനത്തെക്കുറിച്ചുള്ള ഒരു കോൺഫറൻസാണ്. അതുകൊണ്ടാണ് അലക്സാണ്ടർ സംസാരിച്ച പദ്ധതി? നടപ്പിലാക്കുകയും പ്രവർത്തിക്കുകയും ചെയ്തു, പ്രകടനത്തിന്റെ ദിവസം രണ്ട് വിജയകരമായ റിലീസുകൾ ഉണ്ടായിരുന്നു. ഓൺ RIT++-ൽ DevOps Conf മെയ് 27, 28 തീയതികളിൽ പ്രാക്ടീഷണർമാരിൽ നിന്ന് സമാനമായ കൂടുതൽ കേസുകൾ ഉണ്ടാകും. നിങ്ങൾക്ക് ഇപ്പോഴും അവസാന വണ്ടിയിൽ കയറാം ഒരു റിപ്പോർട്ട് സമർപ്പിക്കുക അല്ലെങ്കിൽ നിങ്ങളുടെ സമയം എടുക്കുക ബുക്ക് ചെയ്യാൻ ടിക്കറ്റ്. സ്കോൽകോവോയിൽ ഞങ്ങളെ കണ്ടുമുട്ടുക!

അവലംബം: www.habr.com

ഒരു അഭിപ്രായം ചേർക്കുക