በደንበኛው መድረክ ላይ ያለማቋረጥ የማሰማራት አተገባበር

እኛ እውነተኛ ምህንድስና ለደንበኛ አገልጋዮች ማሻሻያዎችን ያለማቋረጥ የማድረስ ሂደት አዘጋጅተናል እና ይህን ተሞክሮ ማካፈል እንፈልጋለን።

ሲጀመር ለደንበኛው የኦንላይን ሲስተም አዘጋጅተን በራሳችን የኩበርኔትስ ክላስተር ውስጥ አሰማርተናል። አሁን የእኛ ከፍተኛ ጭነት መፍትሄ ወደ ደንበኛው መድረክ ተንቀሳቅሷል, ለዚህም ሙሉ በሙሉ በራስ-ሰር ቀጣይነት ያለው የማሰማራት ሂደት አዘጋጅተናል. ለዚህም ምስጋና ይግባውና ለገበያ የሚሆን ጊዜን አፋጥን - በምርት አካባቢ ላይ ለውጦችን ማድረስ.

በዚህ ጽሑፍ ውስጥ ስለ ሁሉም ተከታታይ ማሰማራት (ሲዲ) ሂደት ወይም ለደንበኛው መድረክ ማሻሻያዎችን ስለማድረስ እንነጋገራለን-

  1. ይህ ሂደት እንዴት ይጀምራል?
  2. ከደንበኛው የጂት ማከማቻ ጋር ማመሳሰል ፣
  3. የኋላ እና የፊት ለፊት ስብስብ ፣
  4. በሙከራ አካባቢ ውስጥ አውቶማቲክ መተግበሪያ ማሰማራት ፣
  5. ወደ Prod አውቶማቲክ ማሰማራት.

የማዋቀር ዝርዝሮችን በመንገዱ ላይ እናካፍላለን።

በደንበኛው መድረክ ላይ ያለማቋረጥ የማሰማራት አተገባበር

1. ሲዲ ጀምር

ቀጣይነት ያለው ማሰማራት የሚጀምረው ገንቢው ወደ Git ማከማቻችን የሚለቀቅበት ቅርንጫፍ ላይ ለውጦችን በመግፋት ነው።

የእኛ መተግበሪያ በማይክሮ ሰርቪስ አርክቴክቸር የሚሰራ ሲሆን ሁሉም ክፍሎቹ በአንድ ማከማቻ ውስጥ ይቀመጣሉ። ለዚህም ምስጋና ይግባውና ሁሉም ጥቃቅን አገልግሎቶች ተሰብስበው ተጭነዋል, ምንም እንኳን አንዳቸው ቢቀየሩም.

በተለያዩ ምክንያቶች ሥራን በአንድ ማከማቻ አደራጅተናል፡-

  • የእድገት ቀላልነት - አፕሊኬሽኑ በንቃት እያደገ ነው, ስለዚህ ሁሉንም ኮድ በአንድ ጊዜ መስራት ይችላሉ.
  • አፕሊኬሽኑ እንደ አንድ ስርዓት ሁሉንም ፈተናዎች እንደሚያልፍ እና ለደንበኛው የምርት አካባቢ እንደሚሰጥ የሚያረጋግጥ አንድ ነጠላ CI / ሲዲ ቧንቧ።
  • በስሪቶች ውስጥ ግራ መጋባትን እናስወግዳለን - የማይክሮ ሰርቪስ ስሪቶችን ካርታ ማከማቸት እና በ Helm ስክሪፕቶች ውስጥ ለእያንዳንዱ ማይክሮ ሰርቪስ አወቃቀሩን መግለጽ የለብንም ።

2. ከደንበኛው ምንጭ ኮድ የ Git ማከማቻ ጋር ማመሳሰል

የተደረጉ ለውጦች በራስ ሰር ከደንበኛው የጂት ማከማቻ ጋር ይመሳሰላሉ። እዚያም የመተግበሪያው ስብሰባ ተዋቅሯል, ይህም ቅርንጫፉን ካዘመነ በኋላ ይጀምራል, እና ለቀጣይ ስራ ላይ ይውላል. ሁለቱም ሂደቶች በአካባቢያቸው የሚመነጩት ከጂት ማከማቻ ነው።

ለልማት እና ለሙከራ የራሳችንን አከባቢዎች ስለምንፈልግ ከደንበኛው ማከማቻ ጋር በቀጥታ መስራት አንችልም። የኛን Git ማከማቻ ለእነዚህ አላማዎች እንጠቀማለን - ከ Git ማከማቻቸው ጋር ተመሳስሏል። አንድ ገንቢ እንደለጠፈው ወደ ትክክለኛው የማከማቻችን ቅርንጫፍ ሲቀየር GitLab ወዲያውኑ እነዚህን ለውጦች ለደንበኛው ይገፋፋቸዋል።

በደንበኛው መድረክ ላይ ያለማቋረጥ የማሰማራት አተገባበር

ከዚህ በኋላ ስብሰባውን ማድረግ ያስፈልግዎታል. እሱ በርካታ ደረጃዎችን ያቀፈ ነው-የኋላ እና የፊት ለፊት ስብሰባ ፣ ሙከራ እና ወደ ምርት ማድረስ።

3. የጀርባውን እና የፊት መጋጠሚያውን ማገጣጠም

የኋላ እና የፊት ክፍልን መገንባት በ GitLab Runner ስርዓት ውስጥ የሚከናወኑ ሁለት ትይዩ ተግባራት ናቸው። ዋናው የመሰብሰቢያ ውቅር በተመሳሳይ ማከማቻ ውስጥ ይገኛል።

በ GitLab ውስጥ ለመገንባት የ YAML ስክሪፕት ለመጻፍ አጋዥ ስልጠና.

GitLab Runner ኮዱን ከሚያስፈልገው ማከማቻ ወስዶ ከጃቫ አፕሊኬሽን ግንባታ ትዕዛዝ ጋር ሰብስቦ ወደ ዶከር መዝገብ ቤት ይልካል። እዚህ የኋለኛውን እና የፊት ክፍልን እንሰበስባለን ፣ Docker ምስሎችን እናገኛለን ፣ ይህም በደንበኛው በኩል ባለው ማከማቻ ውስጥ እናስቀምጠዋለን። የምንጠቀመው Docker ምስሎችን ለማስተዳደር ነው። Gradle ተሰኪ.

የምስሎቻችንን ስሪቶች በዶከር ከሚታተም የተለቀቀው እትም ጋር እናመሳስላቸዋለን። ለስላሳ አሠራር ብዙ ማስተካከያዎችን አድርገናል-

1. ኮንቴይነሮች በሙከራ አካባቢ እና በምርት አካባቢ መካከል እንደገና አልተገነቡም. ተመሳሳዩ ኮንቴይነር ከሁሉም መቼቶች፣ ከአካባቢ ተለዋዋጮች እና አገልግሎቶች ጋር በሙከራ አካባቢም ሆነ በምርት ውስጥ ዳግም ሳይገነባ እንዲሰራ ፓራሜትሪዜሽን አደረግን።

2. አፕሊኬሽኑን በሄልም ለማዘመን ስሪቱን መግለጽ አለቦት። የኋለኛውን ክፍል እንገነባለን ፣ ፊት ለፊት እና አፕሊኬሽኑን እናዘምናለን - እነዚህ ሶስት የተለያዩ ተግባራት ናቸው ፣ ስለሆነም በሁሉም ቦታ ተመሳሳይ የመተግበሪያውን ስሪት መጠቀም አስፈላጊ ነው። ለዚህ ተግባር የK8S ክላስተር ውቅራችን እና አፕሊኬሽኖቻችን በተመሳሳይ የጂት ማከማቻ ውስጥ ስላሉ ከ Git ታሪክ የተገኘውን መረጃ እንጠቀማለን።

የመተግበሪያውን ስሪት ከትዕዛዝ አፈፃፀም ውጤቶች እናገኛለን
git describe --tags --abbrev=7.

4. ለሙከራ አካባቢ (UAT) ሁሉንም ለውጦች በራስ ሰር ማሰማራት

በዚህ የግንባታ ስክሪፕት ውስጥ ያለው ቀጣዩ እርምጃ የK8S ክላስተርን በራስ-ሰር ማዘመን ነው። ይህ የሚሆነው አፕሊኬሽኑ በሙሉ ከተሰራ እና ሁሉም ቅርሶች ወደ ዶከር መዝገብ ቤት ከታተሙ። ከዚህ በኋላ የሙከራ አካባቢ ማሻሻያ ይጀምራል.

የክላስተር ማሻሻያ መጠቀም ጀምሯል። Helm ዝማኔ. በውጤቱም ፣ አንድ ነገር በእቅዱ መሠረት ካልሄደ ፣ ሄልም ሁሉንም ለውጦች በራስ-ሰር እና በራስ-ሰር ይመልሳል። ሥራውን መቆጣጠር አያስፈልገውም.

የ K8S ክላስተር ውቅረትን ከስብሰባው ጋር እናቀርባለን. ስለዚህ, ቀጣዩ ደረጃ እሱን ማዘመን ነው: configMaps, ማሰማራት, አገልግሎቶች, ሚስጥሮች እና ሌሎች የቀየርናቸው K8S ውቅሮች.

ሄልም የመተግበሪያውን በራሱ በሙከራ አካባቢ የ RollOut ዝማኔን ያካሂዳል። ማመልከቻው ወደ ምርት ከመውጣቱ በፊት. ይህ የሚደረገው ተጠቃሚዎች በሙከራ አካባቢ ውስጥ የምናስቀምጣቸውን የንግድ ባህሪያትን በእጅ እንዲሞክሩ ነው።

5. የሁሉንም ለውጦች በራስ ሰር ወደ ምርት ማሰማራት

ዝማኔን ወደ ምርት አካባቢ ለማሰማራት በ GitLab ውስጥ አንድ ቁልፍ ብቻ ጠቅ ማድረግ ያስፈልግዎታል - እና ኮንቴይነሮቹ ወዲያውኑ ወደ ምርት አካባቢ ይደርሳሉ።

ተመሳሳዩ መተግበሪያ በተለያዩ አካባቢዎች-ሙከራ እና ምርት-እንደገና ሳይገነባ ሊሠራ ይችላል. በአፕሊኬሽኑ ውስጥ ምንም ሳንቀይር ተመሳሳይ ቅርሶችን እንጠቀማለን, እና መለኪያዎችን በውጫዊ ሁኔታ እናዘጋጃለን.

የመተግበሪያ ቅንጅቶች ተለዋዋጭ መለኪያዎች አፕሊኬሽኑ በሚፈፀምበት አካባቢ ይወሰናል. ሁሉንም የአካባቢ ቅንጅቶችን ወደ ውጭ አንቀሳቅሰናል-ሁሉም ነገር በ K8S ውቅር እና በሄልም መለኪያዎች አማካይነት ተስተካክሏል። Helm ለሙከራ አካባቢ ስብሰባ ሲያሰማራ, የፍተሻ ቅንጅቶች በእሱ ላይ ይተገበራሉ, እና የምርት ቅንጅቶች በምርት አካባቢ ላይ ይተገበራሉ.

በጣም አስቸጋሪው ነገር በአከባቢው ላይ የተመሰረቱትን ሁሉንም ያገለገሉ አገልግሎቶችን እና ተለዋዋጮችን መለካት እና ወደ አካባቢ ተለዋዋጮች እና ለ Helm የአካባቢ መለኪያዎች መግለጫ-ውቅር መተርጎም ነበር።

የመተግበሪያ ቅንብሮች የአካባቢ ተለዋዋጮችን ይጠቀማሉ። እሴቶቻቸው የGo አብነቶችን በመጠቀም የተቀናበረውን የK8S ማዋቀር በመጠቀም በመያዣዎች ውስጥ ተቀምጠዋል። ለምሳሌ የአካባቢን ተለዋዋጭ ወደ ጎራ ስም ማቀናበር እንደዚህ ማድረግ ይቻላል፡-

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

.እሴቶች.global.env - ይህ ተለዋዋጭ የአካባቢን ስም (ምርት ፣ ደረጃ ፣ UAT) ያከማቻል።
.እሴቶች.app.properties.app_external_domain - በዚህ ተለዋዋጭ ውስጥ የተፈለገውን ጎራ በ .Values.yaml ፋይል ውስጥ እናዘጋጃለን

አፕሊኬሽኑን በሚያዘምንበት ጊዜ ሄልም የ configmap.yaml ፋይል ከአብነት ይፈጥራል እና የAPP_EXTERNAL_DOMAIN ዋጋ እንደ ትግበራ ማሻሻያ በሚጀምርበት አካባቢ በሚፈለገው ዋጋ ይሞላል። ይህ ተለዋዋጭ አስቀድሞ በመያዣው ውስጥ ተዘጋጅቷል. ከመተግበሪያው ሊደረስበት ይችላል, ስለዚህ እያንዳንዱ የመተግበሪያ አካባቢ ለዚህ ተለዋዋጭ የተለየ ዋጋ ይኖረዋል.

በአንፃራዊነት በቅርብ ጊዜ፣ የK8S ድጋፍ በስፕሪንግ ክላውድ ውስጥ ታይቷል፣ ከconfigMaps ጋር መስራትን ጨምሮ፡- ጸደይ ደመና Kubernetes. ፕሮጀክቱ በንቃት እያደገ እና ሥር ነቀል በሆነ መልኩ እየተቀየረ ቢሆንም፣ በምርት ውስጥ ልንጠቀምበት አንችልም። ነገር ግን የእሱን ሁኔታ በንቃት እንከታተላለን እና በ DEV ውቅሮች ውስጥ እንጠቀማለን. ልክ እንደረጋጋ፣ የአካባቢ ተለዋዋጮችን ከመጠቀም ወደ እሱ እንቀይራለን።

ԸՆԴՀԱՆՈՒՐ ԳԻՆ

ስለዚህ፣ ቀጣይነት ያለው ማሰማራት ተዋቅሮ እየሰራ ነው። ሁሉም ዝመናዎች በአንድ የቁልፍ ጭነቶች ይከሰታሉ። በምርት አካባቢ ላይ ለውጦችን ማድረስ በራስ-ሰር ነው። እና በአስፈላጊ ሁኔታ, ዝማኔዎች ስርዓቱን አያቆሙም.

በደንበኛው መድረክ ላይ ያለማቋረጥ የማሰማራት አተገባበር

የወደፊት ዕቅዶች፡ ራስ-ሰር የውሂብ ጎታ ፍልሰት

የውሂብ ጎታውን ስለማሻሻል እና እነዚህን ለውጦች ወደ ኋላ የመመለስ እድልን አስበናል። ከሁሉም በላይ, ሁለት የተለያዩ የመተግበሪያው ስሪቶች በተመሳሳይ ጊዜ እየሰሩ ናቸው: አሮጌው እየሄደ ነው, እና አዲሱ አልቋል. እና አሮጌውን የምናጠፋው አዲሱ ስሪት እንደሚሰራ እርግጠኛ ስንሆን ብቻ ነው። የመረጃ ቋቱ ፍልሰት ከሁለቱም የመተግበሪያው ስሪቶች ጋር እንዲሰሩ መፍቀድ አለበት።

ስለዚህ የአምዱን ስም ወይም ሌላ ውሂብ በቀላሉ መቀየር አንችልም። ነገር ግን አዲስ አምድ መፍጠር፣ ከአሮጌው አምድ ወደ እሱ መገልበጥ እና ቀስቅሴዎችን መፃፍ እንችላለን ውሂቡን ሲያዘምን በተመሳሳይ ጊዜ ገልብጠው በሌላ አምድ ውስጥ ያዘምኑታል። እና አዲሱ የመተግበሪያው ስሪት በተሳካ ሁኔታ ከተሰማራ በኋላ ከድህረ ማስጀመሪያው የድጋፍ ጊዜ በኋላ የድሮውን አምድ እና አላስፈላጊ የሆነውን ቀስቅሴን መሰረዝ እንችላለን።

አዲሱ የመተግበሪያው ስሪት በትክክል ካልሰራ ፣የቀድሞውን የውሂብ ጎታውን ስሪት ጨምሮ ወደ ቀድሞው ስሪት መመለስ እንችላለን። በአጭሩ፣ የእኛ ለውጦች ከበርካታ የመተግበሪያው ስሪቶች ጋር በአንድ ጊዜ እንዲሰሩ ያስችልዎታል።

የውሂብ ጎታ ፍልሰትን በK8S ስራ በራስ ሰር ለመስራት አቅደናል፣ ከሲዲ ሂደት ጋር በማዋሃድ። እና ይህንን ተሞክሮ በእርግጠኝነት በ Habré ላይ እናካፍላለን።

ምንጭ: hab.com

አስተያየት ያክሉ