පාරිභෝගිකයාගේ වේදිකාව මත අඛණ්ඩව යෙදවීම අපගේ ක්‍රියාත්මක කිරීම

True Engineering හි අපි පාරිභෝගික සේවාදායක වෙත යාවත්කාලීන අඛණ්ඩව ලබා දීම සඳහා ක්‍රියාවලියක් සකසා ඇති අතර මෙම අත්දැකීම බෙදා ගැනීමට අවශ්‍ය වේ.

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

මෙම ලිපියෙන් අපි අඛණ්ඩ යෙදවීමේ (CD) ක්‍රියාවලියේ හෝ පාරිභෝගිකයාගේ වේදිකාවට යාවත්කාලීන කිරීම් ලබා දීමේ සියලුම අදියර ගැන කතා කරමු:

  1. මෙම ක්රියාවලිය ආරම්භ වන්නේ කෙසේද?
  2. පාරිභෝගිකයාගේ Git ගබඩාව සමඟ සමමුහුර්ත කිරීම,
  3. පසුපෙළ සහ ඉදිරිපස එකලස් කිරීම,
  4. පරීක්ෂණ පරිසරයක ස්වයංක්‍රීය යෙදුම් යෙදවීම,
  5. නිෂ්පාදනයට ස්වයංක්‍රීයව යෙදවීම.

අපි අතරමගදී පිහිටුවීම් විස්තර බෙදා ගන්නෙමු.

පාරිභෝගිකයාගේ වේදිකාව මත අඛණ්ඩව යෙදවීම අපගේ ක්‍රියාත්මක කිරීම

1. CD තැටිය ආරම්භ කරන්න

අඛණ්ඩ යෙදවීම ආරම්භ වන්නේ සංවර්ධකයා අපගේ Git ගබඩාවේ මුදා හැරීමේ ශාඛාව වෙත වෙනස්කම් තල්ලු කිරීමෙනි.

අපගේ යෙදුම ක්ෂුද්‍ර සේවා ගෘහ නිර්මාණ ශිල්පයක් මත ක්‍රියාත්මක වන අතර එහි සියලුම සංරචක එක් ගබඩාවක ගබඩා කර ඇත. මෙයට ස්තූතියි, ඒවායින් එකක් වෙනස් වුවද, සියලුම ක්ෂුද්‍ර සේවා එකතු කර ස්ථාපනය කර ඇත.

අපි හේතු කිහිපයක් සඳහා එක් ගබඩාවක් හරහා වැඩ සංවිධානය කළෙමු:

  • සංවර්ධනයේ පහසුව - යෙදුම සක්‍රියව සංවර්ධනය වෙමින් පවතී, එබැවින් ඔබට සියලුම කේතයන් සමඟ එකවර වැඩ කළ හැකිය.
  • තනි පද්ධතියක් ලෙස යෙදුම සියලු පරීක්ෂණ සමත් වන අතර පාරිභෝගිකයාගේ නිෂ්පාදන පරිසරය වෙත ලබා දෙන බව සහතික කරන තනි CI/CD නල මාර්ගයක්.
  • අපි අනුවාදවල ව්‍යාකූලත්වය ඉවත් කරන්නෙමු - අපට ක්ෂුද්‍ර සේවා අනුවාදවල සිතියමක් ගබඩා කිරීමට සහ හෙල්ම් ස්ක්‍රිප්ට් වල එක් එක් ක්ෂුද්‍ර සේවා සඳහා එහි වින්‍යාසය විස්තර කිරීමට අවශ්‍ය නොවේ.

2. පාරිභෝගිකයාගේ මූල කේතයේ Git ගබඩාව සමඟ සමමුහුර්ත කිරීම

සිදු කරන ලද වෙනස්කම් පාරිභෝගිකයාගේ Git ගබඩාව සමඟ ස්වයංක්‍රීයව සමමුහුර්ත වේ. එහි යෙදුම් එකලස් කිරීම වින්‍යාස කර ඇති අතර, එය ශාඛාව යාවත්කාලීන කිරීමෙන් පසුව දියත් කරනු ලබන අතර අඛණ්ඩව යෙදවීම. ක්‍රියාවලි දෙකම ඔවුන්ගේ පරිසරයේ Git ගබඩාවකින් ආරම්භ වේ.

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

පාරිභෝගිකයාගේ වේදිකාව මත අඛණ්ඩව යෙදවීම අපගේ ක්‍රියාත්මක කිරීම

මෙයින් පසු, ඔබ එකලස් කිරීම සිදු කළ යුතුය. එය අදියර කිහිපයකින් සමන්විත වේ: පසුපෙළ සහ ඉදිරිපස එකලස් කිරීම, පරීක්ෂා කිරීම සහ නිෂ්පාදනයට බෙදා හැරීම.

3. පසුපෙළ සහ ඉදිරිපස එකලස් කිරීම

පසුපෙළ සහ ඉදිරිපස ගොඩනැගීම GitLab Runner පද්ධතිය තුළ සිදු කෙරෙන සමාන්තර කාර්යයන් දෙකකි. එහි මුල් එකලස් කිරීමේ වින්‍යාසය එකම ගබඩාවේ පිහිටා ඇත.

GitLab හි ගොඩනැගීම සඳහා YAML ස්ක්‍රිප්ට් ලිවීම සඳහා නිබන්ධනය.

GitLab Runner විසින් අවශ්‍ය ගබඩාවෙන් කේතය ලබාගෙන එය Java යෙදුම් ගොඩනැගීමේ විධානය සමඟින් එකලස් කර Docker registry වෙත යවයි. මෙහිදී අපි පසුපෙළ සහ ඉදිරිපස එකලස් කර, ඩොකර් රූප ලබා ගනිමු, එය අපි පාරිභෝගිකයාගේ පැත්තේ ගබඩාවකට තබමු. අපි භාවිතා කරන Docker පින්තූර කළමනාකරණය කිරීමට Gradle ප්ලගිනය.

අපි අපගේ පින්තූරවල අනුවාද Docker හි ප්‍රකාශයට පත් කෙරෙන නිකුතු අනුවාදය සමඟ සමමුහුර්ත කරමු. සුමට ක්‍රියාකාරිත්වය සඳහා අපි වෙනස්කම් කිහිපයක් සිදු කර ඇත:

1. පරීක්ෂණ පරිසරය සහ නිෂ්පාදන පරිසරය අතර බහාලුම් නැවත ගොඩනඟා නැත. අපි පරාමිතිකරණයන් සිදු කළේ එකම බහාලුමක් නැවත ගොඩනැගීමකින් තොරව පරීක්ෂණ පරිසරයේ සහ නිෂ්පාදනයේදී සියලු සැකසුම්, පරිසර විචල්‍යයන් සහ සේවා සමඟ ක්‍රියා කළ හැකි වන පරිදිය.

2. හෙල්ම් හරහා යෙදුමක් යාවත්කාලීන කිරීමට, ඔබ එහි අනුවාදය සඳහන් කළ යුතුය. අපි පසුබිම, ඉදිරිපස සහ යාවත්කාලීන කිරීම ගොඩනඟමු - මේවා විවිධ කාර්යයන් තුනකි, එබැවින් යෙදුමේ එකම අනුවාදය සෑම තැනකම භාවිතා කිරීම වැදගත් වේ. මෙම කාර්යය සඳහා, අපගේ K8S පොකුරු වින්‍යාසය සහ යෙදුම් එකම Git ගබඩාවේ ඇති බැවින්, අපි Git ඉතිහාසයෙන් දත්ත භාවිතා කරමු.

විධාන ක්රියාත්මක කිරීමේ ප්රතිඵල වලින් අපි යෙදුම් අනුවාදය ලබා ගනිමු
git describe --tags --abbrev=7.

4. පරීක්ෂණ පරිසරයට (UAT) සියලු වෙනස්කම් ස්වයංක්‍රීයව යෙදවීම

මෙම ගොඩනැගීමේ ස්ක්‍රිප්ටයේ ඊළඟ පියවර වන්නේ K8S පොකුර ස්වයංක්‍රීයව යාවත්කාලීන කිරීමයි. මෙය සිදු වන්නේ සම්පූර්ණ යෙදුම ගොඩනඟා ඇති අතර සියලු පුරාවස්තු ඩොකර් රෙජිස්ට්‍රි වෙත ප්‍රකාශයට පත් කර ඇත. මෙයින් පසු, පරීක්ෂණ පරිසරය යාවත්කාලීන කිරීම ආරම්භ වේ.

පොකුරු යාවත්කාලීන කිරීම ආරම්භ කර ඇත හෙල්ම් යාවත්කාලීන කිරීම. එහි ප්‍රතිඵලයක් වශයෙන්, යම් දෙයක් සැලැස්මට අනුව සිදු නොවූයේ නම්, හෙල්ම් ස්වයංක්‍රීයව සහ ස්වාධීනව එහි සියලු වෙනස්කම් ආපසු හරවනු ඇත. ඔහුගේ කාර්යය පාලනය කිරීම අවශ්ය නොවේ.

අපි එකලස් කිරීම සමඟ K8S පොකුරු වින්‍යාසය සපයන්නෙමු. එබැවින්, ඊළඟ පියවර වන්නේ එය යාවත්කාලීන කිරීමයි: configMaps, යෙදවුම්, සේවා, රහස් සහ අප වෙනස් කර ඇති වෙනත් K8S වින්‍යාසයන්.

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

5. නිෂ්පාදන වෙත සියලු වෙනස්කම් ස්වයංක්‍රීයව යෙදවීම

නිෂ්පාදන පරිසරයට යාවත්කාලීනයක් යෙදවීමට, ඔබ GitLab හි එක් බොත්තමක් ක්ලික් කළ යුතුය - සහ බහාලුම් වහාම නිෂ්පාදන පරිසරයට ලබා දෙනු ලැබේ.

එකම යෙදුම නැවත ගොඩනැඟීමකින් තොරව විවිධ පරිසරවල-පරීක්ෂණ සහ නිෂ්පාදනයේ-ක්‍රියා කළ හැක. යෙදුමේ කිසිවක් වෙනස් නොකර අපි එකම පුරාවස්තු භාවිතා කරන අතර, අපි බාහිරව පරාමිතීන් සකස් කරමු.

යෙදුම් සැකසුම් වල නම්‍යශීලී පරාමිතිකරණය යෙදුම ක්‍රියාත්මක වන පරිසරය මත රඳා පවතී. අපි සියලුම පරිසර සැකසුම් බාහිරව ගෙන ගොස් ඇත: සියල්ල K8S වින්‍යාසය සහ හෙල්ම් පරාමිති හරහා පරාමිතිකරණය කර ඇත. Helm එකලස් කිරීමක් පරීක්ෂණ පරිසරයට යොදවන විට, පරීක්ෂණ සැකසුම් එයට යොදන අතර නිෂ්පාදන සැකසුම් නිෂ්පාදන පරිසරයට යොදනු ලැබේ.

වඩාත්ම දුෂ්කර දෙය වූයේ පරිසරය මත රඳා පවතින සියලුම භාවිතා කරන ලද සේවාවන් සහ විචල්‍යයන් පරාමිතිකරණය කිරීම සහ ඒවා පාරිසරික විචල්‍යයන් සහ හෙල්ම් සඳහා පාරිසරික පරාමිතීන්ගේ විස්තර-වින්‍යාසයන් බවට පරිවර්තනය කිරීමයි.

යෙදුම් සැකසුම් පරිසර විචල්‍ය භාවිතා කරයි. ඒවායේ අගයන් Go සැකිලි භාවිතයෙන් සැකසෙන K8S configmap භාවිතා කරන බහාලුම්වල සකසා ඇත. උදාහරණයක් ලෙස, ඩොමේන් නාමයට පරිසර විචල්‍යයක් සැකසීම මේ ආකාරයට කළ හැකිය:

APP_EXTERNAL_DOMAIN: {{ (pluck .Values.global.env .Values.app.properties.app_external_domain | first) }}

.Values.global.env - මෙම විචල්‍යය පරිසරයේ නම ගබඩා කරයි (prod, stage, UAT).
.Values.app.properties.app_external_domain – මෙම විචල්‍යය තුළ අපි .Values.yaml ගොනුව තුළ අවශ්‍ය වසම සකසමු

යෙදුමක් යාවත්කාලීන කරන විට, Helm විසින් සැකිලි වලින් configmap.yaml ගොනුවක් සාදන අතර යෙදුම් යාවත්කාලීනය ආරම්භ වන පරිසරය අනුව APP_EXTERNAL_DOMAIN අගය අපේක්ෂිත අගයෙන් පුරවයි. මෙම විචල්‍යය දැනටමත් කන්ටේනරය තුළ සකසා ඇත. එය යෙදුමෙන් ප්‍රවේශ විය හැක, එබැවින් එක් එක් යෙදුම් පරිසරයට මෙම විචල්‍යය සඳහා වෙනස් අගයක් ඇත.

සාපේක්ෂව මෑතකදී, configMaps සමඟ වැඩ කිරීම ඇතුළුව, වසන්ත වලාකුළෙහි K8S සහාය දර්ශනය විය: වසන්ත වලාකුළ Kubernetes. ව්‍යාපෘතිය ක්‍රියාකාරීව සංවර්ධනය වෙමින් පවතින අතර රැඩිකල් ලෙස වෙනස් වෙමින් පවතින අතර, අපට එය නිෂ්පාදනයේදී භාවිතා කළ නොහැක. නමුත් අපි එහි තත්ත්වය සක්‍රියව නිරීක්ෂණය කර DEV වින්‍යාසය තුළ එය භාවිතා කරමු. එය ස්ථාවර වූ වහාම, අපි පරිසර විචල්‍ය භාවිතයෙන් එයට මාරු වන්නෙමු.

එකතුව

එබැවින්, අඛණ්ඩ යෙදවීම වින්‍යාස කර ක්‍රියා කරයි. සියලුම යාවත්කාලීන කිරීම් එක් යතුරු පහරකින් සිදු වේ. නිෂ්පාදන පරිසරයට වෙනස්කම් ලබා දීම ස්වයංක්‍රීය වේ. තවද, වැදගත් වන්නේ, යාවත්කාලීන කිරීම් පද්ධතිය නතර නොකරයි.

පාරිභෝගිකයාගේ වේදිකාව මත අඛණ්ඩව යෙදවීම අපගේ ක්‍රියාත්මක කිරීම

අනාගත සැලසුම්: ස්වයංක්‍රීය දත්ත සමුදා සංක්‍රමණය

දත්ත සමුදාය යාවත්කාලීන කිරීම සහ මෙම වෙනස්කම් ආපසු හැරවීමේ හැකියාව ගැන අපි සිතුවෙමු. සියල්ලට පසු, යෙදුමේ විවිධ අනුවාද දෙකක් එකවර ක්‍රියාත්මක වේ: පැරණි එක ක්‍රියාත්මක වන අතර නව එක ක්‍රියාත්මක වේ. නව අනුවාදය ක්‍රියාත්මක වන බව අපට විශ්වාස වූ විට පමණක් අපි පැරණි එක අක්‍රිය කරන්නෙමු. දත්ත සමුදා සංක්‍රමණය ඔබට යෙදුමේ අනුවාද දෙකම සමඟ වැඩ කිරීමට ඉඩ දිය යුතුය.

එමනිසා, අපට තීරු නාමය හෝ වෙනත් දත්ත සරලව වෙනස් කළ නොහැක. නමුත් අපට නව තීරුවක් සාදා, පැරණි තීරුවේ දත්ත එයට පිටපත් කර, දත්ත යාවත්කාලීන කිරීමේදී එකවරම එය වෙනත් තීරුවකට පිටපත් කර යාවත්කාලීන කරන ප්‍රේරක ලියන්න. යෙදුමේ නව අනුවාදය සාර්ථකව යෙදවීමෙන් පසු, පශ්චාත් දියත් කිරීමේ සහාය කාලයෙන් පසුව, අපට අනවශ්‍ය වී ඇති පැරණි තීරුව සහ ප්‍රේරකය මකා දැමීමට හැකි වනු ඇත.

යෙදුමේ නව අනුවාදය නිවැරදිව ක්‍රියා නොකරන්නේ නම්, අපට දත්ත සමුදායේ පෙර අනුවාදය ඇතුළුව පෙර අනුවාදයට ආපසු යා හැක. කෙටියෙන් කිවහොත්, අපගේ වෙනස්කම් ඔබට යෙදුමේ අනුවාද කිහිපයක් සමඟ එකවර වැඩ කිරීමට ඉඩ සලසයි.

අපි K8S ජොබ් හරහා දත්ත සමුදා සංක්‍රමණය ස්වයංක්‍රීය කිරීමට සැලසුම් කර එය CD ක්‍රියාවලියට අනුකලනය කරමු. අපි අනිවාර්යයෙන්ම මෙම අත්දැකීම Habré මත බෙදා ගන්නෙමු.

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

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