.NET Core on Linux, DevOps on horseback

අපි අපට හැකි උපරිමයෙන් DevOps දියුණු කළෙමු. අපෙන් 8 දෙනෙක් සිටි අතර, වාස්යා වින්ඩෝස් හි සිසිල්ම විය. හදිසියේම වාස්යා පිටත්ව ගිය අතර, වින්ඩෝස් සංවර්ධනය මගින් සපයන ලද නව ව්යාපෘතියක් දියත් කිරීමේ කාර්යය මා සතු විය. මම සම්පූර්ණ වින්ඩෝස් සංවර්ධන තොගයම මේසය මත දැමූ විට, තත්වය වේදනාවක් බව මට වැටහුණි ...

කතාව පටන් ගන්නේ මෙහෙමයි ඇලෙක්සැන්ඩ්රා සින්චිනෝවා මත DevOpsConf. ප්‍රමුඛ වින්ඩෝස් විශේෂඥයා සමාගමෙන් ඉවත් වූ විට, දැන් කුමක් කළ යුතු දැයි ඇලෙක්සැන්ඩර් කල්පනා කළේය. ලිනක්ස් වෙත මාරු වන්න, ඇත්තෙන්ම! අවසාන පරිශීලකයින් 100 ක් සඳහා සම්පූර්ණ කරන ලද ව්‍යාපෘතියක උදාහරණය භාවිතා කරමින් පූර්වාදර්ශයක් නිර්මාණය කිරීමට සහ වින්ඩෝස් සංවර්ධනයේ කොටසක් ලිනක්ස් වෙත මාරු කිරීමට ඔහු සමත් වූයේ කෙසේදැයි ඇලෙක්සැන්ඩර් ඔබට කියනු ඇත.

.NET Core on Linux, DevOps on horseback

TFS, Puppet, Linux .NET core භාවිතයෙන් පහසුවෙන් සහ වෙහෙසකින් තොරව ව්‍යාපෘතියක් RPM වෙත ලබා දෙන්නේ කෙසේද? සංවර්ධන කණ්ඩායමට පළමු වරට Postgres සහ Flyway යන වචන ඇසෙන්නේ නම් සහ නියමිත කාලය හෙට අනිද්දා නම් ව්‍යාපෘති දත්ත සමුදාය අනුවාදනය කිරීමට සහාය වන්නේ කෙසේද? ඩොකර් සමඟ ඒකාබද්ධ වන්නේ කෙසේද? Puppet සහ Linux සඳහා Windows සහ smoothies අත්හැරීමට .NET සංවර්ධකයින් පොළඹවන්නේ කෙසේද? වින්ඩෝස් නිෂ්පාදනයේ දී නඩත්තු කිරීමට ශක්තියක්, ආශාවක් හෝ සම්පත් නොමැති නම් මතවාදී ගැටුම් විසඳන්නේ කෙසේද? ඇලෙක්සැන්ඩර්ගේ වාර්තාවේ පිටපතෙහි දැනට පවතින ව්‍යාපෘතිවල TFS භාවිතා කිරීමේ භාවිතයන් පිළිබඳව මෙන්ම, ඇත්ත වශයෙන්ම, කැඩුණු කිහිලිකරු සහ වැඩ කරන විසඳුම් පිළිබඳව, Web Deploy, testing, CI ගැන.


ඉතින්, Vasya පිටව ගියේය, කාර්යය මා මත ය, සංවර්ධකයින් පිච්ෆෝර්ක් සමඟ නොඉවසිලිමත්ව බලා සිටිති. අවසානයේ Vasya ආපසු ලබා දිය නොහැකි බව මට වැටහුණු විට, මම ව්යාපාරයට බැස්සෙමි. ආරම්භ කිරීම සඳහා, මම අපගේ බලඇණියේ Win VM ප්‍රතිශතය තක්සේරු කළෙමි. ලකුණු වින්ඩෝස් සඳහා පක්ෂව නොවීය.

.NET Core on Linux, DevOps on horseback

අපි DevOps ක්‍රියාකාරීව සංවර්ධනය කරන බැවින්, නව යෙදුමක් ලබා දීමේ ප්‍රවේශයේ යමක් වෙනස් කළ යුතු බව මට වැටහුණි. එකම විසඳුම තිබුනේ - හැකි නම්, සියල්ල ලිනක්ස් වෙත මාරු කරන්න. Google මට උදව් කළා - ඒ වන විට .Net දැනටමත් Linux වෙත ගෙන ගොස් ඇති අතර, විසඳුම මෙය බව මට වැටහුණි!

ලිනක්ස් සමඟ .NET core එකට සම්බන්ධ වන්නේ ඇයි?

මෙයට හේතු කිහිපයක් විය. "මුදල් ගෙවන්න" සහ "නොගෙවීම" අතර, බහුතරය මා වැනි දෙවැන්න තෝරා ගනු ඇත. MSDB සඳහා බලපත්‍රයක් සඳහා ඩොලර් 1 ක් පමණ වැය වේ; වින්ඩෝස් අතථ්‍ය යන්ත්‍ර සමූහයක් නඩත්තු කිරීම සඳහා ඩොලර් සිය ගණනක් වැය වේ. විශාල සමාගමකට මෙය විශාල වියදමක්. ඒක තමයි ඉතිරි කිරීම - පළමු හේතුව. වඩාත්ම වැදගත් නොවේ, නමුත් සැලකිය යුතු එකක්.

වින්ඩෝස් අතථ්‍ය යන්ත්‍ර ඔවුන්ගේ ලිනක්ස් සහෝදරයන්ට වඩා වැඩි සම්පත් ලබා ගනී - ඒවා බරයි. විශාල සමාගමේ පරිමාණය අනුව, අපි ලිනක්ස් තෝරා ගත්තෙමු.

පද්ධතිය සරලව පවතින CI වෙත ඒකාබද්ධ කර ඇත. අපි ප්‍රගතිශීලී DevOps ලෙස සලකමු, අපි Bamboo, Jenkins සහ GitLab CI භාවිතා කරමු, එබැවින් අපගේ බොහෝ වැඩ කටයුතු Linux මත ධාවනය වේ.

අන්තිම හේතුව තමයි පහසු සහකාරිය. අපට "පරිවාර" සඳහා ඇතුළු වීමට ඇති බාධකය අඩු කිරීමට අවශ්‍ය විය - තාක්ෂණික කොටස තේරුම් ගන්නා, අඛණ්ඩ සේවාවක් සහතික කරන සහ දෙවන පේළියේ සිට සේවා පවත්වාගෙන යන අය. ඔවුන් දැනටමත් ලිනක්ස් තොගය ගැන හුරුපුරුදු වූ අතර, එබැවින් වින්ඩෝස් වේදිකාව සඳහා මෘදුකාංගයේ එකම ක්‍රියාකාරීත්වය තේරුම් ගැනීමට අමතර සම්පත් වියදම් කිරීමට වඩා නව නිෂ්පාදනයක් තේරුම් ගැනීමට, සහාය වීමට සහ නඩත්තු කිරීමට ඔවුන්ට පහසු වේ.

අවශ්යතා

පළමු හා ප්රධාන වශයෙන් - සංවර්ධකයින් සඳහා නව විසඳුමේ පහසුව. විශේෂයෙන්ම ලිනක්ස් කියන වචනය කතා කළාට පස්සේ ඒ හැමෝම වෙනස් වෙන්න සූදානම් වුණේ නැහැ. සංවර්ධකයින්ට ඔවුන්ගේ ප්‍රියතම විෂුවල් ස්ටුඩියෝ, එකලස් කිරීම් සහ ස්මූති සඳහා ස්වයංක්‍රීය පරීක්ෂණ සහිත TFS අවශ්‍ය වේ. නිෂ්පාදනයට බෙදා හැරීම සිදුවන්නේ කෙසේද යන්න ඔවුන්ට වැදගත් නොවේ. එමනිසා, අපි සුපුරුදු ක්රියාවලිය වෙනස් නොකිරීමට තීරණය කළ අතර වින්ඩෝස් සංවර්ධනය සඳහා සෑම දෙයක්ම නොවෙනස්ව තබන්න.

නව ව්‍යාපෘතියක් අවශ්‍යයි පවතින CI වෙත ඒකාබද්ධ කරන්න. රේල් පීලි දැනටමත් තිබී ඇති අතර වින්‍යාස කළමනාකරණ පද්ධතියේ පරාමිතීන්, පිළිගත් බෙදා හැරීමේ ප්‍රමිතීන් සහ අධීක්ෂණ පද්ධති සැලකිල්ලට ගනිමින් සියලු කටයුතු සිදු කළ යුතුය.

සහාය සහ ක්‍රියාකාරිත්වයේ පහසුව, විවිධ අංශ සහ උපකාරක දෙපාර්තමේන්තුවේ සියලුම නව සහභාගිවන්නන් සඳහා අවම ඇතුල්වීමේ සීමාව සඳහා කොන්දේසියක් ලෙස.

අවසාන දිනය - ඊයේ.

සංවර්ධන කණ්ඩායම ජය ගන්න

එතකොට Windows කණ්ඩායම වැඩ කළේ මොකක්ද?

.NET Core on Linux, DevOps on horseback

දැන් මට ඒක විශ්වාසයෙන් කියන්න පුළුවන් IdentityServer4 සමාන හැකියාවන් සහිත ADFS සඳහා සිසිල් නිදහස් විකල්පයකි ආයතන රාමු හරය - සංවර්ධකයෙකු සඳහා පාරාදීසයක්, ඔබට SQL ස්ක්‍රිප්ට් ලිවීමට කරදර විය යුතු නැත, නමුත් දත්ත සමුදායේ විමසුම් OOP කොන්දේසි වලින් විස්තර කරන්න. නමුත් පසුව, ක්‍රියාකාරී සැලැස්ම පිළිබඳ සාකච්ඡාවේදී, මම PostgreSQL සහ Git පමණක් හඳුනාගෙන, එය සුමේරියානු කියුනිෆෝම් එකක් මෙන් මෙම තොගය දෙස බැලුවෙමි.

ඒ කාලේ අපි සක්‍රියව පාවිච්චි කළා රූකඩ වින්‍යාස කළමනාකරණ පද්ධතියක් ලෙස. අපගේ බොහෝ ව්යාපෘති වලදී අපි භාවිතා කළෙමු ගිට්ලැබ් සීඅයි, ප්රත්යාස්ථතා, භාවිතා කරමින් සමතුලිත අධි බර සේවා HAProxy සමඟ සියල්ල නිරීක්ෂණය කළේය සර්බික්ස්, බන්ධන ග්‍රැෆනා и Prometheus, ඊයෙගර්, මේ සියල්ල යකඩ කෑලි මත කැරකෙමින් තිබිණි HPඊඑස්එක්ස්අයි මත VMware. හැමෝම එය දන්නවා - ප්‍රභේදයේ සම්භාව්‍යයකි.

.NET Core on Linux, DevOps on horseback

අපි මේ සියලු මැදිහත්වීම් ආරම්භ කිරීමට පෙර සිදුවූයේ කුමක්දැයි සොයා බලා තේරුම් ගැනීමට උත්සාහ කරමු.

සිදුවුයේ කුමක් ද

TFS යනු සංවර්ධකයාගේ සිට අවසාන නිෂ්පාදන යන්ත්‍රය දක්වා කේතය ලබා දීම පමණක් නොව, විවිධ සේවාවන් සමඟ ඉතා නම්‍යශීලී ඒකාබද්ධ කිරීම සඳහා කට්ටලයක් ඇති තරමක් බලවත් පද්ධතියකි - හරස් වේදිකා මට්ටමින් CI සැපයීම.

.NET Core on Linux, DevOps on horseback
මීට පෙර, මේවා ඝන කවුළු විය. TFS බොහෝ ව්‍යාපෘති එකලස් කිරීම සඳහා භාවිතා කරන ලද බිල්ඩ් ඒජන්ත කිහිපයක් භාවිතා කළේය. කාර්යයන් සමාන්තර කිරීමට සහ ක්‍රියාවලිය ප්‍රශස්ත කිරීමට සෑම නියෝජිතයෙකුටම කම්කරුවන් 3-4 ක් ඇත. පසුව, නිකුත් කිරීමේ සැලසුම් වලට අනුව, TFS විසින් අලුතින් බේක් කරන ලද Build එක Windows යෙදුම් සේවාදායකය වෙත ලබා දෙන ලදී.

අපට සාක්ෂාත් කර ගැනීමට අවශ්‍ය වූයේ කුමක්ද?

අපි බෙදා හැරීම සහ සංවර්ධනය සඳහා TFS භාවිතා කරන අතර, Linux යෙදුම් සේවාදායකයක් මත යෙදුම ධාවනය කරන අතර, ඔවුන් අතර යම් ආකාරයක මැජික් ඇත. මෙය මැජික් කොටුව ඉදිරි කාර්යයේ ලුණු තිබේ. මම එය වෙන් කිරීමට පෙර, මම පියවරක් පසෙකට දමා යෙදුම ගැන වචන කිහිපයක් කියන්නම්.

ව්යාපෘති

යෙදුම පෙරගෙවුම් කාඩ්පත් හැසිරවීම සඳහා ක්රියාකාරිත්වය සපයයි.

.NET Core on Linux, DevOps on horseback

සේවාලාභියා

භාවිතා කරන්නන් වර්ග දෙකක් විය. පළමුවෙනි SSL SHA-2 සහතිකයක් භාවිතයෙන් ලොග් වීමෙන් ප්‍රවේශය ලබා ඇත. යූ දෙවෙනි එක පිවිසුම් සහ මුරපදය භාවිතයෙන් ප්‍රවේශ විය.

HAProxy

එවිට සේවාලාභී ඉල්ලීම HAProxy වෙත ගිය අතර එය පහත ගැටළු විසඳීය:

  • ප්රාථමික අවසරය;
  • SSL අවසන් කිරීම;
  • HTTP ඉල්ලීම් සුසර කිරීම;
  • විකාශන ඉල්ලීම්.

සේවාදායක සහතිකය දාමය ඔස්සේ සත්‍යාපනය කරන ලදී. අප - අධිකාරිය සහ අප විසින්ම සේවාලාභීන්ට සහතික නිකුත් කරන බැවින් අපට මෙය දැරිය හැකිය.

තුන්වන කරුණ කෙරෙහි අවධානය යොමු කරන්න, අපි එය ටිකක් පසුව ආපසු යන්නෙමු.

පසුබිම

ඔවුන් Linux මත පසුබිම සකස් කිරීමට සැලසුම් කර ඇත. පසුපෙළ දත්ත සමුදාය සමඟ අන්තර්ක්‍රියා කරයි, අවශ්‍ය වරප්‍රසාද ලැයිස්තුව පූරණය කරයි, පසුව බලයලත් පරිශීලකයාට ඇති වරප්‍රසාද මත පදනම්ව, මූල්‍ය ලේඛන අත්සන් කිරීමට සහ ඒවා ක්‍රියාත්මක කිරීම සඳහා යැවීමට හෝ යම් ආකාරයක වාර්තාවක් ජනනය කිරීමට ප්‍රවේශය සපයයි.

HAProxy සමඟ ඉතුරුම්

එක් එක් සේවාදායකයා සැරිසැරූ සන්දර්භ දෙකට අමතරව අනන්‍යතා සන්දර්භයක් ද විය. IdentityServer4 ඔබට පුරනය වීමට ඉඩ සලසයි, මෙය නොමිලේ සහ බලවත් ප්‍රතිසමයකි ඒඩීඑෆ්එස් - සක්‍රීය නාමාවලි සම්මේලන සේවා.

හැඳුනුම්පත ඉල්ලීම පියවර කිහිපයකින් සකස් කරන ලදී. පළමු පියවර - පාරිභෝගිකයා වේ පසුපෙළට ඇතුල් විය, මෙම සේවාදායකය සමඟ සන්නිවේදනය කර සේවාලාභියා සඳහා ටෝකනයක් තිබේදැයි පරීක්ෂා කරන ලදී. එය සොයාගත නොහැකි නම්, ඉල්ලීම නැවත එය පැමිණි සන්දර්භය වෙත ආපසු යවනු ලැබේ, නමුත් යළි-යොමුවීමක් සමඟ, සහ යළි-යොමුවීමත් සමඟ එය අනන්යතාවයට ගියේය.

දෙවන පියවර - ඉල්ලීම ලැබුණි IdentityServer හි අවසර පිටුවට, සේවාලාභියා ලියාපදිංචි වූ තැන, සහ දිගුකාලීන අපේක්ෂිත ටෝකනය IdentityServer දත්ත ගබඩාවේ දිස් විය.

තුන්වන පියවර - සේවාදායකයා ආපසු හරවා යවන ලදී එය පැමිණි සන්දර්භයට.

.NET Core on Linux, DevOps on horseback

IdentityServer4 හි විශේෂාංගයක් ඇත: එය HTTP හරහා ආපසු ඉල්ලීමට ප්‍රතිචාරය ලබා දෙයි. සේවාදායකය පිහිටුවීමට අප කෙතරම් අරගල කළත්, ලියකියවිලි සමඟ අප කෙතරම් දැනුවත් වුවත්, අපට HTTPS හරහා පැමිණි URL සමඟ මූලික සේවාදායක ඉල්ලීමක් ලැබුණු සෑම අවස්ථාවකම, සහ IdentityServer විසින් එම සන්දර්භයම, නමුත් HTTP සමඟ ආපසු ලබා දුන්නේය. අපි කම්පනයට පත් වුණා! තවද අපි මේ සියල්ල හැඳුනුම් සන්දර්භය හරහා HAProxy වෙත මාරු කළ අතර, ශීර්ෂය තුළ අපට HTTP ප්‍රොටෝකෝලය HTTPS වෙත වෙනස් කිරීමට සිදු විය.

වැඩිදියුණු කිරීම කුමක්ද සහ ඔබ ඉතිරි කළේ කොහේද?

අපි IdentityServer4 වෙනම කොටසක වෙනම නෝඩයක් ලෙස නොතැබූ නමුත් යෙදුමේ පසුබිම ක්‍රියාත්මක වන එකම සේවාදායකයේ පසුබිම සමඟ එය භාවිතා කළ බැවින් පරිශීලකයින් සමූහයකට, සම්පත් සඳහා අවසර දීම සඳහා නොමිලේ විසඳුමක් භාවිතා කිරීමෙන් අපි මුදල් ඉතිරි කළෙමු. .

එය ක්රියා කළ යුතු ආකාරය

ඉතින්, මම පොරොන්දු වූ පරිදි - මැජික් පෙට්ටිය. අපි ලිනක්ස් දෙසට ගමන් කිරීමට සහතික වන බව අපි දැනටමත් තේරුම් ගෙන ඇත. විසඳුම් අවශ්‍ය නිශ්චිත කාර්යයන් සකස් කරමු.

.NET Core on Linux, DevOps on horseback

රූකඩ විදහා දක්වයි. සේවා සහ යෙදුම් වින්‍යාසය ලබා දීමට සහ කළමනාකරණය කිරීමට, සිසිල් වට්ටෝරු ලිවීමට සිදු විය. පැන්සල් රෝලයක් එය කෙතරම් ඉක්මනින් හා කාර්යක්ෂමව සිදු කර ඇත්ද යන්න දක්ෂ ලෙස පෙන්වයි.

බෙදා හැරීමේ ක්රමය. සම්මතය RPM වේ. ලිනක්ස් හි ඔබට එය නොමැතිව කළ නොහැකි බව සෑම දෙනාම තේරුම් ගනී, නමුත් එකලස් කිරීමෙන් පසු ව්‍යාපෘතියම ක්‍රියාත්මක කළ හැකි ඩීඑල්එල් ගොනු කට්ටලයක් විය. ඔවුන්ගෙන් 150 ක් පමණ සිටියහ, ව්යාපෘතිය තරමක් දුෂ්කර විය. එකම සුසංයෝගී විසඳුම වන්නේ මෙම ද්විමය RPM වෙත ඇසුරුම් කර එයින් යෙදුම යෙදවීමයි.

අනුවාදනය කිරීම. අපට බොහෝ විට මුදා හැරීමට සිදු වූ අතර, පැකේජයේ නම සෑදිය යුතු ආකාරය තීරණය කිරීමට අපට සිදු විය. මෙය TFS සමඟ ඒකාබද්ධ වීමේ මට්ටම පිළිබඳ ප්රශ්නයකි. අපිට Linux එකේ build agent කෙනෙක් හිටියා. TFS විසින් කාර්යයක් හසුරුවන්නෙකුට - සේවකයෙකුට - Build නියෝජිතයාට යවන විට, එය හසුරුවන්න ක්‍රියාවලියේ පරිසරය තුළ අවසන් වන විචල්‍ය සමූහයක් ද එය සම්මත කරයි. මෙම පරිසර විචල්‍යවල ගොඩනැගීමේ නම, අනුවාද නාමය සහ වෙනත් විචල්‍යයන් අඩංගු වේ. "RPM පැකේජයක් ගොඩනැගීම" කොටසේ මේ ගැන වැඩිදුර කියවන්න.

TFS පිහිටුවීම නල මාර්ගය සැකසීමට බැස්සේය. මීට පෙර, අපි වින්ඩෝස් නියෝජිතයින් මත සියලුම වින්ඩෝස් ව්‍යාපෘති එකතු කළෙමු, නමුත් දැන් ලිනක්ස් නියෝජිතයෙකු දිස්වේ - ගොඩනැගීමේ කණ්ඩායමට ඇතුළත් කළ යුතු, සමහර කෞතුක වස්තු වලින් පොහොසත්, සහ මෙම බිල්ඩ් ඒජන්තය මත කුමන ආකාරයේ ව්‍යාපෘති ගොඩනඟන්නේද යන්න පැවසිය යුතුය. , සහ කෙසේ හෝ නල මාර්ගය වෙනස් කරන්න.

අනන්යතා සේවාදායකය. ADFS අපේ ක්‍රමය නෙවෙයි, අපි Open Source වලට යනවා.

අපි සංරචක හරහා යමු.

මැජික් කොටුව

කොටස් හතරකින් සමන්විත වේ.

.NET Core on Linux, DevOps on horseback

Linux Build නියෝජිතයා. ලිනක්ස්, අපි ඒ සඳහා ගොඩනඟන නිසා - එය තාර්කික ය. මෙම කොටස පියවර තුනකින් සිදු කරන ලදී.

  • කම්කරුවන් වින්‍යාස කරන්න ව්‍යාපෘතියේ බෙදා හැරීමේ වැඩ බලාපොරොත්තු වූ බැවින් තනිවම නොවේ.
  • .NET Core 1.x ස්ථාපනය කරන්න. සම්මත ගබඩාවේ 1 දැනටමත් පවතින විට 2.0.x ඇයි? මොකද අපි develop කරන්න පටන් ගත්තම stable version එක 1.09, ඒ යටතේ project එක හදන්න තීරණය කලා.
  • Git 2.x.

RPM - ගබඩාව. RPM පැකේජ කොහේ හරි ගබඩා කිරීමට අවශ්‍ය විය. සියලුම Linux ධාරක සඳහා ලබා ගත හැකි එකම ආයතනික RPM ගබඩාව අපි භාවිතා කරනු ඇතැයි උපකල්පනය කරන ලදී. ඔවුන් කළේ එයයි. ගබඩා සේවාදායකය වින්‍යාස කර ඇත වෙබ්හුක් නියමිත ස්ථානයෙන් අවශ්‍ය RPM පැකේජය බාගත කර ඇත. පැකේජ අනුවාදය Build නියෝජිතයා විසින් webhook වෙත වාර්තා කරන ලදී.

ගිට්ලැබ්. අවධානය! GitLab මෙහි භාවිතා කරන්නේ සංවර්ධකයින් විසින් නොව, යෙදුම් අනුවාද, පැකේජ අනුවාද පාලනය කිරීම, සියලුම Linux යන්ත්‍රවල තත්ත්වය නිරීක්ෂණය කිරීම සහ එය වට්ටෝරුව ගබඩා කිරීම සඳහා මෙහෙයුම් දෙපාර්තමේන්තුව විසිනි - සියලුම Puppet මැනිෆෙස්ට්.

රූකඩ - සියලුම මතභේදාත්මක ගැටළු නිරාකරණය කර Gitlab වෙතින් අපට අවශ්‍ය වින්‍යාසය හරියටම ලබා දෙයි.

අපි කිමිදීමට පටන් ගනිමු. RPM වෙත DLL බෙදා හැරීම ක්‍රියා කරන්නේ කෙසේද?

DDL RPM වෙත බෙදා හැරීම

අපි හිතමු අපිට .NET සංවර්ධන රොක් ස්ටාර් එකක් තියෙනවා කියලා. එය Visual Studio භාවිතා කරන අතර නිකුත් කිරීමේ ශාඛාවක් නිර්මාණය කරයි. ඊට පසු, එය එය Git වෙත උඩුගත කරයි, සහ මෙහි Git යනු TFS ආයතනයකි, එනම් එය සංවර්ධකයා ක්‍රියා කරන යෙදුම් ගබඩාවයි.

.NET Core on Linux, DevOps on horseback

ඊට පස්සේ TFS දකිනවා අලුත් කැපවීමක් ඇවිත් කියලා. කුමන යෙදුමද? TFS සිටුවම් තුළ විශේෂිත Build නියෝජිතයෙකු සතු සම්පත් මොනවාද යන්න දැක්වෙන ලේබලයක් ඇත. මේකෙදි අපි .NET Core ප් රොජෙක්ට් එකක් හදනවා දැකලා එයා පූල් එකෙන් ලිනක්ස් බිල්ඩ් ඒජන්ට් කෙනෙක් තෝරනවා.

Build නියෝජිතයා මූලාශ්‍ර ලබාගෙන අවශ්‍ය දේ බාගත කරයි පරායත්තතා .NET ගබඩාවෙන්, npm, ආදිය. සහ යෙදුමම සහ පසුව ඇසුරුම් කිරීමෙන් පසුව, RPM පැකේජය RPM ගබඩාව වෙත යවයි.

අනෙක් අතට, පහත සඳහන් දේ සිදු වේ. මෙහෙයුම් දෙපාර්තමේන්තු ඉංජිනේරුවරයා ව්‍යාපෘතිය දියත් කිරීමට සෘජුවම සම්බන්ධ වේ: ඔහු පැකේජවල අනුවාද වෙනස් කරයි හීරා යෙදුම් වට්ටෝරුව ගබඩා කර ඇති ගබඩාවේ, පසුව රූකඩ අවුලුවයි yum, ගබඩාවෙන් නව පැකේජය ලබා ගන්නා අතර, යෙදුමේ නව අනුවාදය භාවිතයට සූදානම්ය.

.NET Core on Linux, DevOps on horseback

සෑම දෙයක්ම වචන වලින් සරලයි, නමුත් බිල්ඩ් නියෝජිතයා තුළම සිදුවන්නේ කුමක්ද?

DLL RPM ඇසුරුම් කිරීම

TFS වෙතින් ව්‍යාපෘති මූලාශ්‍ර සහ ගොඩනැගීමේ කාර්යය ලබා ගන්නා ලදී. ගොඩනැගීමේ නියෝජිතයා මූලාශ්ර වලින්ම ව්යාපෘතිය ගොඩනැගීම ආරම්භ කරයි. එකලස් කරන ලද ව්යාපෘතිය කට්ටලයක් ලෙස ලබා ගත හැකිය DLL ගොනු, ගොනු පද්ධතියේ බර අඩු කිරීම සඳහා zip සංරක්ෂිතයක ඇසුරුම් කර ඇත.

ZIP සංරක්ෂිතය ඉවත දමනු ලැබේ RPM පැකේජ ගොඩනැගීමේ නාමාවලිය වෙත. මීලඟට, Bash ස්ක්‍රිප්ට් මඟින් පරිසර විචල්‍යයන් ආරම්භ කරයි, Build අනුවාදය, ව්‍යාපෘති අනුවාදය, ගොඩනැගීමේ නාමාවලියට මාර්ගය සොයා ගනී, සහ RPM-build ධාවනය කරයි. ගොඩනැගීම අවසන් වූ පසු, පැකේජය ප්‍රකාශයට පත් කෙරේ දේශීය ගබඩාව, ගොඩනැගීමේ නියෝජිතයා මත පිහිටා ඇත.

ඊළඟට, Build agent වෙතින් RPM ගබඩාවේ සේවාදායකය වෙත JSON ඉල්ලීම යවා ඇත අනුවාදය සහ ගොඩනැගීමේ නම දක්වයි. මම කලින් කතා කළ Webhook, මෙම පැකේජයම බිල්ඩ් නියෝජිතයාගේ දේශීය ගබඩාවෙන් බාගත කර ස්ථාපනය සඳහා නව එකලස් කිරීම ලබා දෙයි.

.NET Core on Linux, DevOps on horseback

RPM ගබඩාවට මෙම විශේෂිත පැකේජ බෙදා හැරීමේ ක්‍රමය ඇයි? මට එකලස් කළ පැකේජය වහාම ගබඩාවට යැවිය නොහැක්කේ ඇයි? කාරණය නම් මෙය ආරක්ෂාව සහතික කිරීම සඳහා කොන්දේසියකි. මෙම අවස්ථාව අනවසර පුද්ගලයින් විසින් සියලුම Linux යන්ත්‍ර සඳහා ප්‍රවේශ විය හැකි සේවාදායකයකට RPM පැකේජ උඩුගත කිරීමේ හැකියාව සීමා කරයි.

දත්ත සමුදා අනුවාදනය

සංවර්ධන කණ්ඩායම සමඟ කළ උපදේශනයකදී, පිරිමි ළමයින් MS SQL වෙත සමීප බව පෙනී ගියේය, නමුත් බොහෝ වින්ඩෝස් නොවන ව්‍යාපෘති වලදී අපි දැනටමත් ඔවුන්ගේ සියලු ශක්තියෙන් PostgreSQL භාවිතා කරමින් සිටිමු. ගෙවූ සියල්ල අත්හැරීමට අප දැනටමත් තීරණය කර තිබූ බැවින්, අපි මෙහිද PostgreSQL භාවිතා කිරීමට පටන් ගත්තෙමු.

.NET Core on Linux, DevOps on horseback

මෙම කොටසේදී මට කියන්නට අවශ්‍ය වන්නේ අපි දත්ත සමුදාය අනුවාදය කළ ආකාරය සහ අපි Flyway සහ Entity Framework Core අතර තෝරා ගත් ආකාරයයි. ඔවුන්ගේ වාසි සහ අවාසි බලමු.

මිනිසු

පියාසර මාර්ගය යන්නේ එක් මාර්ගයක් පමණි, අපි අපට ආපසු හැරවිය නොහැක - මෙය සැලකිය යුතු අවාසියකි. සංවර්ධකයාගේ පහසුව අනුව ඔබට එය වෙනත් ආකාරවලින් Entity Framework Core සමඟ සැසඳිය හැක. අපි මෙය මුල් තැනට තැබුවා ඔබට මතක ඇති අතර ප්‍රධාන නිර්ණායකය වූයේ වින්ඩෝස් සංවර්ධනය සඳහා කිසිවක් වෙනස් නොකිරීමයි.

Flyway අප වෙනුවෙන් යම් ආකාරයක දවටනයක් අවශ්‍ය වියකොල්ලො ලියන්නෙ නැති වෙන්න SQL විමසුම්. ඒවා OOP නියමයන් අනුව ක්‍රියාත්මක වීමට වඩා සමීප වේ. අපි දත්ත සමුදා වස්තු සමඟ වැඩ කිරීම සඳහා උපදෙස් ලියා, SQL විමසුමක් ජනනය කර එය ක්‍රියාත්මක කළෙමු. දත්ත සමුදායේ නව අනුවාදය සූදානම්, පරීක්ෂා කර ඇත - සියල්ල හොඳයි, සියල්ල ක්රියා කරයි.

entity Framework Core හි අඩුපාඩුවක් ඇත - එය අධික බරක් යටතේ පවතී උපප්‍රශස්ත SQL විමසුම් ගොඩනඟයි, සහ දත්ත සමුදායේ ඇති ඇඳීම සැලකිය යුතු විය හැක. නමුත් අපට ඉහළ බරක් සහිත සේවාවක් නොමැති නිසා, අපි RPS සිය ගණනකින් බර ගණනය නොකරමු, අපි මෙම අවදානම් පිළිගෙන ගැටලුව අනාගතයට අප වෙත පැවරුවෙමු.

ප්ලස්

ආයතන රාමු හරය කොටුවෙන් පිටත ක්‍රියා කරන අතර සංවර්ධනය කිරීමට පහසුය, සහ ෆ්ලයිවේ පවතින CI වෙත පහසුවෙන් ඒකාබද්ධ වේ. නමුත් අපි එය සංවර්ධකයින්ට පහසු කරමු :)

පෙරළීමේ ක්රියා පටිපාටිය

සංක්‍රමණයට වගකිව යුතු එක ඇතුළුව පැකේජ අනුවාදයේ වෙනසක් පැමිණෙන බව රූකඩ දකී. පළමුව, එය සංක්‍රමණ ස්ක්‍රිප්ට් සහ දත්ත සමුදාය ආශ්‍රිත ක්‍රියාකාරීත්වය අඩංගු පැකේජයක් ස්ථාපනය කරයි. මෙයින් පසු, දත්ත සමුදාය සමඟ වැඩ කරන යෙදුම නැවත ආරම්භ වේ. ඊළඟට ඉතිරි සංරචක ස්ථාපනය කිරීම පැමිණේ. පැකේජ ස්ථාපනය කරන සහ යෙදුම් දියත් කරන අනුපිළිවෙල රූකඩ මැනිෆෙස්ටයේ විස්තර කර ඇත.

යෙදුම් ටෝකන, දත්ත සමුදා මුරපද වැනි සංවේදී දත්ත භාවිතා කරයි, මේ සියල්ල Puppet master වෙතින් වින්‍යාසය තුළට ඇද දමනු ලැබේ, එහිදී ඒවා සංකේතාත්මක ආකාරයෙන් ගබඩා කර ඇත.

TFS ගැටළු

සෑම දෙයක්ම සැබවින්ම අප වෙනුවෙන් ක්‍රියාත්මක වන බව අප තීරණය කර අවබෝධ කරගත් පසු, අනෙකුත් ව්‍යාපෘති සඳහා Win සංවර්ධන දෙපාර්තමේන්තුව සඳහා සමස්තයක් ලෙස TFS හි එක්රැස්වීම් සමඟ සිදුවෙමින් පවතින දේ බැලීමට මම තීරණය කළෙමි - අපි ඉක්මනින් ගොඩනඟනවාද / මුදා හරිනවාද, සහ වේගය සමඟ සැලකිය යුතු ගැටළු සොයා ගන්නා ලදී.

ප්‍රධාන ව්‍යාපෘති වලින් එකක් එකලස් කිරීමට මිනිත්තු 12-15 ක් ගතවේ - එය දිගු කාලයක්, ඔබට එසේ ජීවත් විය නොහැක. ඉක්මන් විශ්ලේෂණයක් I/O හි භයානක අඩුවීමක් පෙන්නුම් කළ අතර, මෙය අරා මත විය.

සංරචකය අනුව එය සංරචක විශ්ලේෂණය කිරීමෙන් පසුව, මම foci තුනක් හඳුනා ගත්තා. පලමු - "Kaspersky antivirus", සියලුම Windows Build නියෝජිතයන් මත මූලාශ්‍ර පරිලෝකනය කරයි. දෙවැනි - හි Windows සඳහා දර්ශක. එය අක්‍රිය කර නොතිබූ අතර, යෙදවීමේ ක්‍රියාවලියේදී බිල්ඩ් ඒජන්තයින් මත සියල්ල තථ්‍ය කාලය තුළ සුචිගත කර ඇත.

තුන්වන - Npm ස්ථාපනය. බොහෝ නල මාර්ගවල අපි මෙම නිශ්චිත අවස්ථාව භාවිතා කළ බව පෙනී ගියේය. ඔහු නරක ඇයි? යැපුම් ගස සෑදූ විට Npm ස්ථාපනය කිරීමේ ක්‍රියා පටිපාටිය ක්‍රියාත්මක වේ pack-lock.json, ව්‍යාපෘතිය තැනීමට භාවිතා කරන පැකේජවල අනුවාද සටහන් කර ඇත. අවාසිය නම් Npm ස්ථාපනය සෑම විටම අන්තර්ජාලයෙන් පැකේජවල නවතම අනුවාද ලබා ගන්නා අතර විශාල ව්‍යාපෘතියක දී මෙයට බොහෝ කාලයක් ගත වේ.

යම් කොටසක් හෝ සම්පූර්ණ ව්‍යාපෘතියක් ක්‍රියා කරන ආකාරය පරීක්ෂා කිරීමට සංවර්ධකයින් සමහර විට දේශීය යන්ත්‍රයක් මත අත්හදා බලයි. සමහර විට සෑම දෙයක්ම දේශීයව සිසිල් බව පෙනී ගිය නමුත් ඔවුන් එය එකලස් කර, එය පෙරළා, කිසිවක් වැඩ කළේ නැත. අපි ගැටලුව කුමක්දැයි සොයා ගැනීමට පටන් ගනිමු - ඔව්, පරායත්තතා සහිත පැකේජවල විවිධ අනුවාද.

තීරණය

  • AV ව්‍යතිරේකවල මූලාශ්‍ර.
  • සුචිගත කිරීම අබල කරන්න.
  • යන්න npm ci.

npm ci හි ඇති වාසි වන්නේ අපයි අපි එක් වරක් පරායත්ත ගස එකතු කරමු, සහ සංවර්ධකයා ලබා දීමට අපට අවස්ථාව ලැබේ වත්මන් පැකේජ ලැයිස්තුව, ඔහු කැමති පරිදි දේශීයව අත්හදා බැලීම් කළ හැකිය. මෙය කාලය ඉතිරි කරයි කේතය ලියන සංවර්ධකයින්.

වින්‍යාසය

දැන් repository configuration ගැන ටිකක්. ඓතිහාසික වශයෙන් අපි භාවිතා කරමු නෙක්සස් ඇතුළුව ගබඩා කළමනාකරණය සඳහා අභ්‍යන්තර REPO. මෙම අභ්‍යන්තර ගබඩාවේ අභ්‍යන්තර අරමුණු සඳහා අප භාවිතා කරන සියලුම සංරචක අඩංගු වේ, උදාහරණයක් ලෙස, ස්වයං-ලිඛිත අධීක්ෂණය.

.NET Core on Linux, DevOps on horseback

අපිත් පාවිච්චි කරනවා නුජෙට්, අනෙකුත් පැකේජ කළමණාකරුවන්ට සාපේක්ෂව වඩා හොඳ හැඹිලියක් ඇති බැවින්.

ප්රතිඵලය

අපි Build Agents ප්‍රශස්ත කළ පසු, සාමාන්‍ය ගොඩනැගීමේ කාලය මිනිත්තු 12 සිට 7 දක්වා අඩු විය.

අපි වින්ඩෝස් සඳහා භාවිතා කළ හැකි සියලුම යන්ත්‍ර ගණනය කළහොත්, නමුත් මෙම ව්‍යාපෘතියේ දී ලිනක්ස් වෙත මාරු වූ විට, අපි ඩොලර් 10 ක් පමණ ඉතිරි කර ගත්තෙමු. එය බලපත්‍ර මත පමණක් වන අතර, අපි අන්තර්ගතය සැලකිල්ලට ගන්නේ නම්.

සැලසුම්

ඊළඟ කාර්තුව සඳහා, අපි කේත බෙදා හැරීම ප්‍රශස්ත කිරීම සඳහා වැඩ කිරීමට සැලසුම් කළෙමු.

Prebuild Docker පින්තුරයකට මාරු වෙමින්. TFS යනු ප්‍රේරක පාදක එකලස් කිරීම, ඩොකර් රූපයක් ඇතුළුව, නල මාර්ගයට ඒකාබද්ධ වීමට ඔබට ඉඩ සලසන බොහෝ ප්ලගීන සහිත සිසිල් දෙයකි. අපට මෙම ප්‍රේරකය එකම එකක් සඳහා කිරීමට අවශ්‍යයි pack-lock.json. ප්‍රොජෙක්ට් එක හදන්න භාවිතා කරන සංරචක වල සංයුතිය යම් ආකාරයකින් වෙනස් වුවහොත්, අපි නව ඩොකර් රූපයක් ගොඩනඟමු. එය පසුව එකලස් කරන ලද යෙදුම සමඟ කන්ටේනරය යෙදවීමට භාවිතා කරයි. මෙය දැන් එසේ නොවේ, නමුත් අපි අපගේ සමාගම තුළ ක්‍රියාකාරීව සංවර්ධනය වෙමින් පවතින සහ දිගු කලක් තිස්සේ නිෂ්පාදන විසඳුම් සපයන Kubernetes හි ක්ෂුද්‍ර සේවා ගෘහ නිර්මාණ ශිල්පයකට මාරු වීමට සැලසුම් කරමු.

සාරාංශය

මම හැමෝම වින්ඩෝස් විසි කරන්න කියලා දිරිමත් කරනවා, නමුත් මම එය පිසීමට නොදන්නා නිසා නොවේ. හේතුව බොහෝ Opensource විසඳුම් වේ ලිනක්ස් තොගය. ඔයාට හරි ද සම්පත් මත ඉතිරි කරන්න. මගේ මතය අනුව, අනාගතය අයත් වන්නේ බලවත් ප්‍රජාවක් සමඟ ලිනක්ස් හි විවෘත මූලාශ්‍ර විසඳුම් වෙත ය.

ඇලෙක්සැන්ඩර් සින්චිනොව්ගේ කථානායක පැතිකඩ GitHub මත.

DevOps Conf වෘත්තිකයන් විසින් වෘත්තිකයන් සඳහා සංවර්ධන, පරීක්ෂණ සහ මෙහෙයුම් ක්‍රියාවලීන් ඒකාබද්ධ කිරීම පිළිබඳ සම්මන්ත්‍රණයකි. ඇලෙක්සැන්ඩර් කතා කළ ව්‍යාපෘතිය ඒ නිසාද? ක්රියාත්මක කර වැඩ කරන අතර, කාර්ය සාධනය දිනයේ සාර්ථක නිකුතු දෙකක් විය. මත RIT++ හි DevOps Conf මැයි 27 සහ 28 යන දිනවල වෘත්තිකයන්ගෙන් ඊටත් වඩා සමාන අවස්ථා තිබේ. ඔබට තවමත් අවසාන කරත්තයට පනින්න පුළුවන් වාර්තාවක් ඉදිරිපත් කරන්න නැත්නම් ඔබේ කාලය ගන්න පොතට ටිකට් Skolkovo හි අපව හමුවන්න!

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න