එක් Git ගබඩාවකින් ක්ෂුද්ර සේවා කට්ටලයක් පෙරළීම
යෙදුමක් වැඩි හෝ අඩු ස්වාධීන සේවාවන් වලට බෙදී ඇති විට තත්වයක් බොහෝ විට සිදු වේ. මෙම සේවාවන් නිකුත් කිරීම ස්වාධීනව සිදු විය හැක: එක් වරකට සේවා එකක් හෝ කිහිපයක් නිකුත් කළ හැකි අතර, ඉතිරිය කිසිදු වෙනසක් නොමැතිව දිගටම වැඩ කළ යුතුය. නමුත් කේත ගබඩා කිරීම සහ ව්යාපෘති කළමනාකරණය පිළිබඳ දෘෂ්ටි කෝණයෙන්, එවැනි යෙදුම් සේවාවන් තනි ගබඩාවක තබා ගැනීම වඩාත් පහසු වේ.
සේවාවන් සැබවින්ම ස්වාධීන වන අතර තනි යෙදුමක් සමඟ සම්බන්ධ නොවන අවස්ථා තිබේ. මෙම අවස්ථාවෙහිදී, ඒවා වෙනම ව්යාපෘතිවල ස්ථානගත කරනු ලබන අතර, එක් එක් ව්යාපෘතිවල වෙන වෙනම CI/CD ක්රියාවලීන් හරහා ඒවා මුදා හැරීම සිදු කෙරේ.
කෙසේ වෙතත්, යථාර්ථයේ දී, සංවර්ධකයින් බොහෝ විට තනි යෙදුමක් ක්ෂුද්ර සේවා කිහිපයකට බෙදා ඇත, නමුත් එක් එක් සඳහා වෙනම ගබඩාවක් සහ ව්යාපෘතියක් නිර්මාණය කිරීම ... පැහැදිලි අතිකි. මෙම තත්වය තවදුරටත් සාකච්ඡා කරනු ඇත: එවැනි ක්ෂුද්ර සේවා කිහිපයක් එක් ව්යාපෘති ගබඩාවක පිහිටා ඇති අතර නිකුත් කිරීම් CI/CD හි තනි ක්රියාවලියක් හරහා සිදු වේ.
Git ශාඛාව සහ Git ටැගය මගින් ටැග් කිරීම
වඩාත් පොදු ටැග් කිරීමේ උපාය මාර්ගය භාවිතා කරන බව කියමු - ටැග්-හෝ-ශාඛා. Git ශාඛා සඳහා, ශාඛාවේ නම සමඟ පින්තූර ටැග් කර ඇත, වරකට එක් ශාඛාවක් සඳහා එම ශාඛාවේ නමින් ප්රකාශිත පින්තූරයක් පමණක් ඇත. Git ටැග් සඳහා, ටැග් නාමයට අනුව පින්තූර ටැග් කර ඇත.
නව Git ටැගයක් සාදන විට-උදාහරණයක් ලෙස, නව අනුවාදයක් නිකුත් කළ විට-Docker Registry හි සියලුම ව්යාපෘති රූප සඳහා නව Docker ටැගයක් සාදනු ලැබේ:
-
myregistry.org/myproject/frontend:v1.1.10
-
myregistry.org/myproject/myservice1:v1.1.10
-
myregistry.org/myproject/myservice2:v1.1.10
-
myregistry.org/myproject/myservice3:v1.1.10
-
myregistry.org/myproject/myservice4:v1.1.10
-
myregistry.org/myproject/myservice5:v1.1.10
-
myregistry.org/myproject/database:v1.1.10
මෙම නව රූප නාමයන් Helm සැකිලි හරහා Kubernetes වින්යාසය වෙත යවනු ලැබේ. විධානය සමඟ යෙදවීම ආරම්භ කරන විට werf deploy
ක්ෂේත්රය යාවත්කාලීන වෙමින් පවතී image
Kubernetes සම්පතෙහි වෙනස් වූ රූපයේ නම හේතුවෙන් අනුරූප සම්පත් ප්රකාශ කිරීම සහ නැවත ආරම්භ කිරීම.
ප්රශ්නය: ඇත්ත වශයෙන්ම, රූපයේ අන්තර්ගතය පෙර පෙරළීමෙන් (Git ටැගය) වෙනස් වී නොමැති විට, නමුත් එහි ඩොකර් ටැගය පමණක් සිදු වේ. අමතර මෙම යෙදුම නැවත ආරම්භ කිරීම සහ, ඒ අනුව, යම් අක්රිය කාලයක් විය හැක. මෙම නැවත ආරම්භ කිරීමට සැබෑ හේතුවක් නොතිබුණද.
එහි ප්රතිඵලයක් වශයෙන්, දැනට පවතින ටැග් කිරීමේ ක්රමය සමඟින් වෙන වෙනම Git ගබඩා කිහිපයක් වැටක් බැඳීම අවශ්ය වන අතර මෙම නිධි කිහිපයක පෙරළිය සංවිධානය කිරීමේ ගැටලුව පැන නගී. පොදුවේ ගත් කල, එවැනි යෝජනා ක්රමයක් අධික ලෙස පටවා සංකීර්ණ වේ. අනවශ්ය නැවත පණ ගැන්වීම් සිදු නොවන පරිදි බොහෝ සේවාවන් එක් ගබඩාවකට ඒකාබද්ධ කර ඩොකර් ටැග් නිර්මාණය කිරීම වඩා හොඳය.
Git commit මගින් ටැග් කිරීම
werf සතුව Git commits හා සම්බන්ධ ටැග් කිරීමේ උපාය මාර්ගයක් ද ඇත.
Git-commit යනු Git ගබඩාවක අන්තර්ගතය සඳහා හඳුනාගැනීමක් වන අතර Git ගබඩාවේ ඇති ගොනු සංස්කරණ ඉතිහාසය මත රඳා පවතී, එබැවින් Docker Registry හි පින්තූර ටැග් කිරීම සඳහා එය භාවිතා කිරීම තර්කානුකූල බව පෙනේ.
කෙසේ වෙතත්, Git commit මගින් ටැග් කිරීම Git ශාඛා හෝ Git ටැග් මගින් ටැග් කිරීම හා සමාන අවාසි ඇත:
- කිසිදු ගොනුවක් වෙනස් නොකරන හිස් කැපවීමක් සෑදිය හැක, නමුත් රූපයේ Docker ටැගය වෙනස් වනු ඇත.
- ගොනු වෙනස් නොකරන ඒකාබද්ධ කැපවීමක් සෑදිය හැක, නමුත් රූපයේ ඩොකර් ටැගය වෙනස් වේ.
- රූපයට ආයාත නොකළ Git හි ඇති ගොනු වෙනස් කිරීමට කැපවීමක් කළ හැකි අතර, රූපයේ Docker ටැගය නැවත වෙනස් කරනු ඇත.
Git ශාඛාවේ නම ටැග් කිරීම රූප අනුවාදය පිළිබිඹු නොකරයි
Git ශාඛා සඳහා ටැග් කිරීමේ උපාය මාර්ගය හා සම්බන්ධ තවත් ගැටලුවක් තිබේ.
ශාඛා නාමයෙන් ටැග් කිරීම එම ශාඛාවේ කැපවීම් කාලානුක්රමික අනුපිළිවෙලට අනුපිළිවෙලින් එකතු කරන තාක් කල් ක්රියා කරයි.
වත්මන් යෝජනා ක්රමයේදී පරිශීලකයා යම් ශාඛාවක් හා සම්බන්ධ පැරණි කැපවීමක් නැවත ගොඩනැංවීමට පටන් ගන්නේ නම්, පැරණි කැපවීම සඳහා රූපයේ අලුතින් සාදන ලද අනුවාදයක් සමඟ අනුරූප ඩොකර් ටැගය භාවිතයෙන් werf රූපය නැවත ලියයි. මෙතැන් සිට මෙම ටැගය භාවිතා කරන යෙදවීම් කරල් නැවත ආරම්භ කිරීමේදී රූපයේ වෙනත් අනුවාදයක් ඇද ගැනීමේ අවදානමක් ඇත, එහි ප්රතිඵලයක් ලෙස අපගේ යෙදුම CI පද්ධතිය සමඟ සම්බන්ධතාව නැති වී සමමුහුර්තකරණයට ලක් වේ.
ඊට අමතරව, ඒවා අතර කෙටි කාලයක් සහිත එක් ශාඛාවකට අනුප්රාප්තික තල්ලු කිරීම් සමඟ, පැරණි කැපවීම නව එකට වඩා පසුව සම්පාදනය කළ හැකිය: රූපයේ පැරණි අනුවාදය Git ශාඛා ටැගය භාවිතයෙන් අලුත් එක උඩින් ලියයි. එවැනි ගැටළු CI/CD පද්ධතියක් මගින් විසඳා ගත හැක (උදාහරණයක් ලෙස, GitLab CI හි දෙවැන්නෙහි නල මාර්ගය කැපවීම් මාලාවක් සඳහා දියත් කෙරේ). කෙසේ වෙතත්, සියලුම පද්ධති මෙයට සහාය නොදක්වන අතර එවැනි මූලික ගැටළුවක් වැලැක්වීම සඳහා වඩාත් විශ්වාසදායක ක්රමයක් තිබිය යුතුය.
අන්තර්ගතය මත පදනම් වූ ටැග් කිරීම යනු කුමක්ද?
ඉතින්, අන්තර්ගතය මත පදනම් වූ ටැග් කිරීම යනු කුමක්ද - අන්තර්ගතය අනුව පින්තූර ටැග් කිරීම.
Docker tags නිර්මාණය කිරීම සඳහා, Git primitives (Git ශාඛාව, Git ටැගය...) භාවිතා කරන්නේ නොව, මෙයට සම්බන්ධ චෙක්සම් එකක්:
- රූපයේ අන්තර්ගතය. රූප ID ටැගය එහි අන්තර්ගතය පිළිබිඹු කරයි. නව අනුවාදයක් තැනීමේදී, රූපයේ ඇති ගොනු වෙනස් වී නොමැති නම්, මෙම හඳුනාගැනීම වෙනස් නොවේ;
- Git හි මෙම රූපය නිර්මාණය කිරීමේ ඉතිහාසය. විවිධ Git ශාඛා සමඟ සම්බන්ධිත පින්තූර සහ werf හරහා විවිධ ගොඩනැගීමේ ඉතිහාසය වෙනස් ID ටැග් ඇත.
එවැනි හඳුනාගැනීමේ ටැගය ඊනියා වේ රූප අදියර අත්සන.
සෑම රූපයක්ම අදියර කිහිපයකින් සමන්විත වේ: from
, before-install
, git-archive
, install
, imports-after-install
, before-setup
... git-latest-patch
ආදිය සෑම අදියරකටම එහි අන්තර්ගතය පිළිබිඹු කරන හඳුනාගැනීමක් ඇත - අදියර අත්සන (අදියර අත්සන).
මෙම අදියර වලින් සමන්විත අවසාන රූපය, මෙම අදියරවල කට්ටලයේ ඊනියා අත්සන සමඟ ටැග් කර ඇත - අදියර අත්සන, - රූපයේ සියලුම අදියර සඳහා සාමාන්යකරණය වේ.
වින්යාසයෙන් එක් එක් රූපය සඳහා werf.yaml
සාමාන්ය නඩුවේදී, එහිම අත්සනක් ඇති අතර, ඒ අනුව, ඩොකර් ටැග් එකක් ඇත.
වේදිකා අත්සන මෙම සියලු ගැටලු විසඳයි:
- හිස් Git කැපවීම් වලට ප්රතිරෝධී වේ.
- රූපයට අදාල නොවන ගොනු වෙනස් කරන Git වලට ප්රතිරෝධය කරයි.
- ශාඛාවක පැරණි Git කැපවීම් සඳහා ගොඩනැගීම් නැවත ආරම්භ කිරීමේදී රූපයේ වත්මන් අනුවාදය නැවත සකස් කිරීමේ ගැටලුවට මග පාදන්නේ නැත.
මෙය දැන් නිර්දේශිත ටැග් කිරීමේ උපාය මාර්ගය වන අතර සියලුම CI පද්ධති සඳහා werf හි පෙරනිමිය වේ.
verf සක්රීය කර භාවිතා කරන ආකාරය
විධානයට දැන් අනුරූප විකල්පයක් ඇත werf publish
: --tag-by-stages-signature=true|false
CI පද්ධතියක, ටැග් කිරීමේ උපාය මාර්ගය විධානය මගින් නියම කරනු ලැබේ werf ci-env
. මීට පෙර, එය සඳහා පරාමිතිය අර්ථ දක්වා ඇත werf ci-env --tagging-strategy=tag-or-branch
. දැන්, ඔබ සඳහන් කරන්නේ නම් werf ci-env --tagging-strategy=stages-signature
හෝ මෙම විකල්පය සඳහන් නොකරන්න, werf පෙරනිමියෙන් ටැග් කිරීමේ උපාය මාර්ගය භාවිතා කරයි stages-signature
. කණ්ඩායම werf ci-env
විධානය සඳහා අවශ්ය කොඩි ස්වයංක්රීයව සකසනු ඇත werf build-and-publish
(හෝ werf publish
), එබැවින් මෙම විධාන සඳහා අමතර විකල්ප සඳහන් කිරීම අවශ්ය නොවේ.
උදාහරණයක් ලෙස, විධානය:
werf publish --stages-storage :local --images-repo registry.hello.com/web/core/system --tag-by-stages-signature
...පහත රූප නිර්මාණය කළ හැක:
-
registry.hello.com/web/core/system/backend:4ef339f84ca22247f01fb335bb19f46c4434014d8daa3d5d6f0e386d
-
registry.hello.com/web/core/system/frontend:f44206457e0a4c8a54655543f749799d10a9fe945896dab1c16996c6
එය 4ef339f84ca22247f01fb335bb19f46c4434014d8daa3d5d6f0e386d
රූපයේ අදියරවල අත්සනක් වේ backend
හා f44206457e0a4c8a54655543f749799d10a9fe945896dab1c16996c6
- රූප අදියරවල අත්සන frontend
.
විශේෂ කාර්යයන් භාවිතා කරන විට werf_container_image
и werf_container_env
Helm සැකිලි තුළ කිසිවක් වෙනස් කිරීමට අවශ්ය නැත: මෙම කාර්යයන් ස්වයංක්රීයව නිවැරදි රූප නාම ජනනය කරයි.
CI පද්ධතියක උදාහරණ වින්යාසය:
type multiwerf && source <(multiwerf use 1.1 beta)
type werf && source <(werf ci-env gitlab)
werf build-and-publish|deploy
වින්යාසය පිළිබඳ වැඩි විස්තර ලේඛනවල ඇත:
-
නාමාවලිය → ප්රකාශනය (ප්රකාශනය) ; -
CI/CD සමඟ වැඩ කිරීම → සාමාන්ය තොරතුරු → අදියර-අත්සන ; -
GitLab CI/CD → .gitlab-ci.yml සමඟ ඒකාබද්ධ වීම .
එකතුව
- නව විකල්පය
werf publish --tag-by-stages-signature=true|false
. - නව විකල්ප අගය
werf ci-env --tagging-strategy=stages-signature|tag-or-branch
(නිශ්චිතව දක්වා නොමැති නම්, පෙරනිමිය වනු ඇතstages-signature
). - ඔබ මීට පෙර Git commits සඳහා ටැග් කිරීමේ විකල්ප භාවිතා කළේ නම් (
WERF_TAG_GIT_COMMIT
හෝ විකල්පයwerf publish --tag-git-commit COMMIT
), පසුව ටැග් කිරීමේ උපාය මාර්ගයට මාරු වීමට වග බලා ගන්න අදියර-අත්සන. - නව ව්යාපෘති වහාම නව ටැග් කිරීමේ ක්රමයට මාරු කිරීම වඩා හොඳය.
- werf 1.1 වෙත මාරු කිරීමේදී, පැරණි ව්යාපෘති නව ටැග් කිරීමේ ක්රමයට මාරු කිරීම සුදුසුය, නමුත් පැරණි ටැග්-හෝ-ශාඛා තවමත් සහය දක්වයි.
අන්තර්ගතය මත පදනම් වූ ටැග් කිරීම ලිපියේ ආවරණය කර ඇති සියලුම ගැටළු විසඳයි:
- හිස් Git කැපවීම් වලට ඩොකර් ටැග් නාම ප්රතිරෝධය.
- Git වෙත ඩොකර් ටැග් නාමයේ ප්රත්යාස්ථතාව මඟින් රූපයට අදාළ නොවන ගොනු වෙනස් කරයි.
- Git ශාඛා සඳහා පැරණි Git කැපවීම් සඳහා ගොඩනැගීම් නැවත ආරම්භ කිරීමේදී රූපයේ වත්මන් අනුවාදය නැවත සකස් කිරීමේ ගැටලුවට මග පාදන්නේ නැත.
එය භාවිතා කරන්න! ඒ වගේම අපිව බලන්න යන්න අමතක කරන්න එපා
ප්රාදේශීය සභා
අපගේ බ්ලොග් අඩවියේ ද කියවන්න:
- «
werf 1.1 නිකුතුව: අද තනන්නාට වැඩිදියුණු කිරීම් සහ අනාගතය සඳහා සැලසුම් » - «
werf 1.0 ස්ථායී හඳුන්වාදීම: GitOps එයට කුමක් කළ යුතුද, තත්ත්වය සහ සැලසුම් » - «
werf - Kubernetes හි CI / CD සඳහා අපගේ මෙවලම (දළ විශ්ලේෂණය සහ වීඩියෝ වාර්තාව) »; - werf හි නවෝත්පාදනයන් පිළිබඳ සටහන් මාලාවක්:
මූලාශ්රය: www.habr.com