ያለ ተሰኪዎች፣ ኤስኤምኤስ ወይም ምዝገባ በ GKE ውስጥ የማሰማራት ተግባር እንፈጥራለን። በጄንኪንስ ጃኬት ስር እንይ

ይህ ሁሉ የጀመረው የአንድ የልማት ቡድኖቻችን ቡድን መሪ ከቀናት በፊት በኮንቴይነር የተያዙትን አዲሱን መተግበሪያቸውን እንድንፈትሽ ሲጠይቁን ነው። ለጥፌዋለሁ። ከ 20 ደቂቃዎች በኋላ, ማመልከቻውን ለማዘመን ጥያቄ ደረሰ, ምክንያቱም በጣም አስፈላጊ የሆነ ነገር እዚያ ተጨምሯል. አደስኩኝ። ከሌላ ሁለት ሰአታት በኋላ... ደህና፣ ቀጥሎ ምን መሆን እንደጀመረ መገመት ትችላለህ...

እኔ መቀበል አለብኝ ፣ እኔ በጣም ሰነፍ ነኝ (ይህን ቀደም ብዬ አልተቀበልኩም? አይደለም?) እና የቡድን መሪዎች ወደ ጄንኪንስ መዳረሻ ስላላቸው ሁላችንም CI/ሲዲ ስላለን አሰብኩ፡ እሱ እንደ ማሰማራት ይፍቀዱለት። እሱ የሚፈልገውን ያህል! አንድ ቀልድ ትዝ አለኝ፡ ለአንድ ሰው ዓሣ ስጠው ለአንድ ቀን ይበላል; ሰውን Fed ብለው ይደውሉ እና ህይወቱን በሙሉ ይመገባል። እና ሄደ በስራው ላይ ዘዴዎችን ይጫወቱበተሳካ ሁኔታ የተሰራውን ማንኛውንም እትም ወደ ኩቤር የሚያስገባ እና ማንኛውንም እሴት ወደ እሱ የሚያስተላልፍ መያዣ ENV (አያቴ፣ ፊሎሎጂስት፣ የእንግሊዘኛ አስተማሪ በጥንት ጊዜ፣ አሁን ጣቱን ወደ መቅደሱ አዞረ እና ይህን ዓረፍተ ነገር ካነበብኩ በኋላ በግልጽ ይመለከቱኝ ነበር።)

ስለዚህ፣ በዚህ ማስታወሻ ውስጥ እንዴት እንደተማርኩ እነግራችኋለሁ፡-

  1. በጄንኪንስ ውስጥ ስራዎችን ከራሱ ስራ ወይም ከሌሎች ስራዎች በተለዋዋጭ ያዘምኑ;
  2. የጄንኪንስ ወኪል ከተጫነበት መስቀለኛ መንገድ ወደ ደመና ኮንሶል (ክላውድ ሼል) ያገናኙ;
  3. የስራ ጫና ወደ ጎግል ኩበርኔትስ ሞተር አሰማር።


በእውነቱ፣ እኔ፣ በእርግጥ፣ በመጠኑ የማታለል ነኝ። ጎግል ደመና ውስጥ ቢያንስ የመሠረተ ልማት አውታሮች እንዳሎት ይገመታል፣ እና ስለዚህ እርስዎ ተጠቃሚው ነዎት እና በእርግጥ የጂሲፒ መለያ አለዎት። ግን ይህ ማስታወሻ ስለዚያ አይደለም.

ይህ የእኔ ቀጣይ የማጭበርበሪያ ወረቀት ነው። በአንድ ጉዳይ ላይ እንደዚህ ያሉ ማስታወሻዎችን ብቻ መጻፍ እፈልጋለሁ: ችግር አጋጥሞኝ ነበር, መጀመሪያ ላይ እንዴት መፍታት እንዳለብኝ አላውቅም ነበር, መፍትሄው ዝግጁ ሆኖ ጎግል አልተደረገም, ስለዚህ በከፊል ጎግል አድርጌው እና በመጨረሻም ችግሩን ፈታሁት. እና ለወደፊቱ ፣ እንዴት እንደሰራሁ ስረሳው ፣ ሁሉንም ነገር እንደገና google ማድረግ እና በአንድ ላይ ማጠናቀር አይጠበቅብኝም ፣ ለራሴ እንደዚህ ያሉ የማጭበርበሪያ ወረቀቶችን እጽፋለሁ።

የክህደት ቃል: 1. ማስታወሻው የተፃፈው "ለራሴ" ነው, ለ ሚና ምርጥ ልምምድ አይተገበርም. በአስተያየቶቹ ውስጥ "በዚህ መንገድ ቢደረግ ይሻላል" የሚለውን አማራጮች በማንበብ ደስተኛ ነኝ.
2. የተተገበረው የማስታወሻው ክፍል እንደ ጨው ይቆጠራል, እንደ ሁሉም የቀድሞ ማስታወሻዎቼ, ይህ ደካማ የጨው መፍትሄ ነው.

በጄንኪንስ ውስጥ የስራ ቅንብሮችን በተለዋዋጭ በማዘመን ላይ

ጥያቄህን አስቀድሜ አይቻለሁ፡ ተለዋዋጭ የስራ ማዘመን ከሱ ጋር ምን ግንኙነት አለው? የሕብረቁምፊ መለኪያውን ዋጋ እራስዎ ያስገቡ እና ያጥፉ!

እኔ መልስ እሰጣለሁ: እኔ በእርግጥ ሰነፍ ነኝ, ሲያጉረመርሙ አልወደውም: ሚሻ, ማሰማራቱ እየተበላሸ ነው, ሁሉም ነገር ጠፍቷል! መመልከት ትጀምራለህ፣ እና በአንዳንድ የተግባር ማስጀመሪያ መለኪያ እሴት ውስጥ የትየባ አለ። ስለዚህ, ሁሉንም ነገር በተቻለ መጠን በብቃት ማድረግ እመርጣለሁ. በምትኩ የሚመርጡትን የእሴቶች ዝርዝር በመስጠት ተጠቃሚው በቀጥታ ውሂብ እንዳያስገባ መከልከል ከተቻለ ምርጫውን አደራጃለሁ።

ዕቅዱ ይህ ነው-በጄንኪንስ ውስጥ ሥራ እንፈጥራለን ፣ ከመጀመርዎ በፊት ከዝርዝሩ ውስጥ ሥሪትን እንመርጣለን ፣ ወደ መያዣው ለሚተላለፉ መለኪያዎች እሴቶችን ይግለጹ ። ENV, ከዚያም መያዣውን ይሰበስባል እና ወደ ኮንቴይነር መዝገብ ውስጥ ይጭናል. ከዚያ እቃው በኩቤር ውስጥ ይጀምራል የስራ ጫና በስራው ውስጥ ከተገለጹት መለኪያዎች ጋር.

በጄንኪንስ ውስጥ ሥራ የመፍጠር እና የማዋቀር ሂደትን ከግምት ውስጥ አንገባም ፣ ይህ ከርዕስ ውጭ ነው። ስራው ዝግጁ መሆኑን እንገምታለን. የተሻሻለውን ዝርዝር ከስሪቶች ጋር ለመተግበር ሁለት ነገሮች ያስፈልጉናል፡- ያለ ነባር ምንጭ ዝርዝር ከቅድሚያ የሚሰራ የስሪት ቁጥሮች እና እንደ ተለዋዋጭ። የምርጫ መለኪያ በተግባሩ ውስጥ. በእኛ ምሳሌ ውስጥ, ተለዋዋጭው ስም ይሰጠው BUILD_VERSION፣ በዝርዝር አንቀመጥበትም። ግን ምንጩን ዝርዝሩን ጠለቅ ብለን እንመርምር።

ብዙ አማራጮች የሉም። ወዲያው ሁለት ነገሮች ወደ አእምሮአቸው መጡ፡-

  • ጄንኪንስ ለተጠቃሚዎቹ የሚያቀርበውን የርቀት መዳረሻ ኤፒአይ ተጠቀም፤
  • የርቀት ማከማቻ ማህደሩን ይዘቶች ይጠይቁ (በእኛ ሁኔታ ይህ JFrog Artifctory ነው ፣ ይህ አስፈላጊ አይደለም)።

የጄንኪንስ የርቀት መዳረሻ ኤፒአይ

በተመሰረተው እጅግ በጣም ጥሩ ወግ መሰረት, ረጅም ማብራሪያዎችን ማስወገድ እመርጣለሁ.
እኔ ለራሴ እፈቅዳለው የመጀመርያው አንቀጽ ቁራጭ ነፃ ትርጉም ብቻ ነው። የኤፒአይ ሰነድ የመጀመሪያ ገጽ:

ጄንኪንስ ለርቀት ማሽን ሊነበብ ለሚችል ተግባራዊነቱ ኤፒአይ ያቀርባል። <…> የርቀት መዳረሻ የሚቀርበው REST በሚመስል ዘይቤ ነው። ይህ ማለት ለሁሉም ባህሪያት አንድም የመግቢያ ነጥብ የለም፣ ይልቁንም እንደ " ያለ URL.../api/", የት"..." ማለት የኤፒአይ ችሎታዎች የተተገበሩበት ነገር ነው።

በሌላ አነጋገር፣ አሁን እየተነጋገርን ያለነው የማሰማራት ተግባር በ ላይ የሚገኝ ከሆነ http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_build፣ ከዚያ ለዚህ ተግባር የኤፒአይ ፊሽካዎች በ ላይ ይገኛሉ http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_build/api/

በመቀጠል ውጤቱን በምን አይነት መልኩ እንደምንቀበል ምርጫ አለን። ኤፒአይ በዚህ ጉዳይ ላይ ብቻ ለማጣራት ስለሚፈቅድ በኤክስኤምኤል ላይ እናተኩር።

ሁሉንም የስራ ሂደቶች ዝርዝር ለማግኘት እንሞክር። እኛ የምንፈልገው የስብሰባውን ስም ብቻ ነው (መጠሪያው ስም) እና ውጤቱ (ውጤት):

http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_build/api/xml?tree=allBuilds[displayName,result]

ተከናወነ?

አሁን በውጤቱ የሚጠናቀቁትን ሩጫዎች ብቻ እናጣራ ስኬት. ክርክሩን እንጠቀም &አያካትትም። እና እንደ መለኪያ እኩል ወደሆነ እሴት መንገዱን እናስተላልፋለን ስኬት. አዎ አዎ. ድርብ አሉታዊ መግለጫ ነው። የማይፈልጉንን ሁሉ እናስወግዳለን፡-

http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_build/api/xml?tree=allBuilds[displayName,result]&exclude=freeStyleProject/allBuild[result!='SUCCESS']

የተሳካላቸው ዝርዝር ቅጽበታዊ ገጽ እይታ
ያለ ተሰኪዎች፣ ኤስኤምኤስ ወይም ምዝገባ በ GKE ውስጥ የማሰማራት ተግባር እንፈጥራለን። በጄንኪንስ ጃኬት ስር እንይ

ደህና፣ ለመዝናናት ያህል፣ ማጣሪያው እንዳላታለለን እናረጋግጥ (ማጣሪያዎች በጭራሽ አይዋሹም!) እና “ያልተሳካላቸው” የሚለውን ዝርዝር እናሳይ፡-

http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_build/api/xml?tree=allBuilds[displayName,result]&exclude=freeStyleProject/allBuild[result='SUCCESS']

ያልተሳካላቸው ዝርዝር ቅጽበታዊ ገጽ እይታ
ያለ ተሰኪዎች፣ ኤስኤምኤስ ወይም ምዝገባ በ GKE ውስጥ የማሰማራት ተግባር እንፈጥራለን። በጄንኪንስ ጃኬት ስር እንይ

በርቀት አገልጋይ ላይ ካለው አቃፊ ውስጥ ያሉ ስሪቶች ዝርዝር

ስሪቶች ዝርዝር ለማግኘት ሁለተኛ መንገድ አለ. የጄንኪንስ ኤፒአይ ከመድረስ የበለጠ ወድጄዋለሁ። ደህና, ምክንያቱም አፕሊኬሽኑ በተሳካ ሁኔታ ከተገነባ, የታሸገ እና በተገቢው አቃፊ ውስጥ ባለው ማከማቻ ውስጥ ተቀምጧል ማለት ነው. እንደ፣ ማከማቻ ነባሪው የስራ ስሪቶች ማከማቻ ነው። እንደ. ደህና, በማከማቻ ውስጥ ምን ዓይነት ስሪቶች እንዳሉ እንጠይቀው. የርቀት ማህደሩን እንጠቀልላለን፣ ያዝነው እና እናሳሳቸዋለን። ማንም ሰው በአንድላይነር ላይ ፍላጎት ካለው ፣ ከዚያ እሱ በአበላሹ ስር ነው።

አንድ መስመር ትዕዛዝ
እባክዎን ሁለት ነገሮችን ያስተውሉ-የግንኙነቱን ዝርዝሮች በርዕሱ ውስጥ አሳልፋለሁ እና ሁሉንም ስሪቶች ከአቃፊው ውስጥ አያስፈልገኝም, እና በአንድ ወር ውስጥ የተፈጠሩትን ብቻ እመርጣለሁ. ከእውነታዎችዎ እና ፍላጎቶችዎ ጋር እንዲስማማ ትዕዛዙን ያርትዑ፡

curl -H "X-JFrog-Art-Api:VeryLongAPIKey" -s http://arts.myre.po/artifactory/awesomeapp/ | sed 's/a href=//' | grep "$(date +%b)-$(date +%Y)|$(date +%b --date='-1 month')-$(date +%Y)" | awk '{print $1}' | grep -oP '>K[^/]+' )

በጄንኪንስ ውስጥ ስራዎችን እና የስራ ውቅር ፋይልን በማዘጋጀት ላይ

የትርጉሞችን ዝርዝር ምንጭ አውቀናል. አሁን የተገኘውን ዝርዝር ወደ ሥራው እናካተት። ለእኔ ግልጽ የሆነው መፍትሔ በመተግበሪያ ግንባታ ተግባር ውስጥ አንድ ደረጃ መጨመር ነበር። ውጤቱ "ስኬት" ከሆነ የሚፈጸመው እርምጃ.

የስብሰባ ሥራ ቅንጅቶችን ይክፈቱ እና ወደ ታች ያሸብልሉ። አዝራሮቹ ላይ ጠቅ ያድርጉ: የግንባታ ደረጃ ያክሉ -> ሁኔታዊ ደረጃ (ነጠላ). በደረጃ ቅንጅቶች ውስጥ, ሁኔታውን ይምረጡ የአሁኑ የግንባታ ሁኔታ, ዋጋውን ያዘጋጁ ስኬት, ከተሳካ የሚወሰደው እርምጃ የሼል ትዕዛዝን ያሂዱ.

እና አሁን አስደሳች ክፍል። ጄንኪንስ የሥራ ውቅሮችን በፋይሎች ውስጥ ያከማቻል። በኤክስኤምኤል ቅርጸት። በመንገድ ላይ http://путь-до-задания/config.xml በዚህ መሠረት የውቅረት ፋይሉን ማውረድ, እንደ አስፈላጊነቱ አርትዖት እና ያገኙበት ቦታ መመለስ ይችላሉ.

ያስታውሱ፣ ለትርጉሞች ዝርዝር መለኪያ እንደምንፈጥር ከላይ ተስማምተናል BUILD_VERSION?

የውቅረት ፋይሉን አውርደን ወደ ውስጥ እንየው። መለኪያው በቦታው መኖሩን እና የሚፈለገውን አይነት መሆኑን ለማረጋገጥ ብቻ ነው.

ቅጽበታዊ ገጽ እይታ ከመበላሸቱ በታች።

የእርስዎ config.xml ቁርጥራጭ ተመሳሳይ መሆን አለበት። የምርጫ ንጥረ ነገር ይዘቶች ገና ከጎደሉ በስተቀር
ያለ ተሰኪዎች፣ ኤስኤምኤስ ወይም ምዝገባ በ GKE ውስጥ የማሰማራት ተግባር እንፈጥራለን። በጄንኪንስ ጃኬት ስር እንይ

ኧረ ያ ነው ፣ ግንባታው ከተሳካ የሚተገበር ስክሪፕት እንፃፍ።
ስክሪፕቱ የስሪቶችን ዝርዝር ይቀበላል፣ የማዋቀሪያ ፋይሉን ያውርዱ፣ የትርጉሞቹን ዝርዝር በምንፈልገው ቦታ ይፃፉ እና ከዚያ መልሰው ያስቀምጡት። አዎ. ትክክል ነው. ቀደም ሲል የትርጉም ዝርዝር ባለበት ቦታ በኤክስኤምኤል ውስጥ የስሪቶችን ዝርዝር ይፃፉ (ለወደፊቱ ፣ የስክሪፕቱ መጀመሪያ ከተጀመረ በኋላ)። አሁንም በዓለም ላይ የቋሚ አገላለጾች ጨካኝ ደጋፊዎች እንዳሉ አውቃለሁ። እኔ የነሱ አይደለሁም። እባክህ ጫን xmlstarler ማዋቀሩ ወደሚስተካከልበት ማሽን። ሴድ በመጠቀም ኤክስኤምኤልን ከማርትዕ ለመዳን ይህ ያን ያህል የሚከፈል ዋጋ እንዳልሆነ ለእኔ ይመስላል።

በአጥፊው ስር, ከላይ ያለውን ቅደም ተከተል የሚያከናውነውን ኮድ ሙሉ በሙሉ አቀርባለሁ.

የርቀት አገልጋዩ ላይ ካለው አቃፊ ወደ ውቅሩ የስሪቶችን ዝርዝር ይፃፉ

#!/bin/bash
############## Скачиваем конфиг
curl -X GET -u username:apiKey http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_k8s/config.xml -o appConfig.xml

############## Удаляем и заново создаем xml-элемент для списка версий
xmlstarlet ed --inplace -d '/project/properties/hudson.model.ParametersDefinitionProperty/parameterDefinitions/hudson.model.ChoiceParameterDefinition[name="BUILD_VERSION"]/choices[@class="java.util.Arrays$ArrayList"]/a[@class="string-array"]' appConfig.xml

xmlstarlet ed --inplace --subnode '/project/properties/hudson.model.ParametersDefinitionProperty/parameterDefinitions/hudson.model.ChoiceParameterDefinition[name="BUILD_VERSION"]/choices[@class="java.util.Arrays$ArrayList"]' --type elem -n a appConfig.xml

xmlstarlet ed --inplace --insert '/project/properties/hudson.model.ParametersDefinitionProperty/parameterDefinitions/hudson.model.ChoiceParameterDefinition[name="BUILD_VERSION"]/choices[@class="java.util.Arrays$ArrayList"]/a' --type attr -n class -v string-array appConfig.xml

############## Читаем в массив список версий из репозитория
readarray -t vers < <( curl -H "X-JFrog-Art-Api:Api:VeryLongAPIKey" -s http://arts.myre.po/artifactory/awesomeapp/ | sed 's/a href=//' | grep "$(date +%b)-$(date +%Y)|$(date +%b --date='-1 month')-$(date +%Y)" | awk '{print $1}' | grep -oP '>K[^/]+' )

############## Пишем массив элемент за элементом в конфиг
printf '%sn' "${vers[@]}" | sort -r | 
                while IFS= read -r line
                do
                    xmlstarlet ed --inplace --subnode '/project/properties/hudson.model.ParametersDefinitionProperty/parameterDefinitions/hudson.model.ChoiceParameterDefinition[name="BUILD_VERSION"]/choices[@class="java.util.Arrays$ArrayList"]/a[@class="string-array"]' --type elem -n string -v "$line" appConfig.xml
                done

############## Кладем конфиг взад
curl -X POST -u username:apiKey http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_k8s/config.xml --data-binary @appConfig.xml

############## Приводим рабочее место в порядок
rm -f appConfig.xml

ከጄንኪንስ ስሪቶችን የማግኘት አማራጭን ከመረጥክ እና እንደኔ ሰነፍ ከሆንክ በአጥፊው ስር አንድ አይነት ኮድ አለ ነገር ግን የጄንኪንስ ዝርዝር፡-

ከጄንኪንስ ወደ ማዋቀሩ ስሪቶች ዝርዝር ይጻፉ
ይህንን ብቻ ግምት ውስጥ ያስገቡ፡ የስብሰባዬ ስም በቅደም ተከተል ቁጥር እና በኮሎን የሚለይ የስሪት ቁጥር ያካትታል። በዚህ መሠረት አውክ አላስፈላጊውን ክፍል ይቆርጣል. ለራስህ፣ ፍላጎትህን ለማሟላት ይህን መስመር ቀይር።

#!/bin/bash
############## Скачиваем конфиг
curl -X GET -u username:apiKey http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_k8s/config.xml -o appConfig.xml

############## Удаляем и заново создаем xml-элемент для списка версий
xmlstarlet ed --inplace -d '/project/properties/hudson.model.ParametersDefinitionProperty/parameterDefinitions/hudson.model.ChoiceParameterDefinition[name="BUILD_VERSION"]/choices[@class="java.util.Arrays$ArrayList"]/a[@class="string-array"]' appConfig.xml

xmlstarlet ed --inplace --subnode '/project/properties/hudson.model.ParametersDefinitionProperty/parameterDefinitions/hudson.model.ChoiceParameterDefinition[name="BUILD_VERSION"]/choices[@class="java.util.Arrays$ArrayList"]' --type elem -n a appConfig.xml

xmlstarlet ed --inplace --insert '/project/properties/hudson.model.ParametersDefinitionProperty/parameterDefinitions/hudson.model.ChoiceParameterDefinition[name="BUILD_VERSION"]/choices[@class="java.util.Arrays$ArrayList"]/a' --type attr -n class -v string-array appConfig.xml

############## Пишем в файл список версий из Jenkins
curl -g -X GET -u username:apiKey 'http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_build/api/xml?tree=allBuilds[displayName,result]&exclude=freeStyleProject/allBuild[result!=%22SUCCESS%22]&pretty=true' -o builds.xml

############## Читаем в массив список версий из XML
readarray vers < <(xmlstarlet sel -t -v "freeStyleProject/allBuild/displayName" builds.xml | awk -F":" '{print $2}')

############## Пишем массив элемент за элементом в конфиг
printf '%sn' "${vers[@]}" | sort -r | 
                while IFS= read -r line
                do
                    xmlstarlet ed --inplace --subnode '/project/properties/hudson.model.ParametersDefinitionProperty/parameterDefinitions/hudson.model.ChoiceParameterDefinition[name="BUILD_VERSION"]/choices[@class="java.util.Arrays$ArrayList"]/a[@class="string-array"]' --type elem -n string -v "$line" appConfig.xml
                done

############## Кладем конфиг взад
curl -X POST -u username:apiKey http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_k8s/config.xml --data-binary @appConfig.xml

############## Приводим рабочее место в порядок
rm -f appConfig.xml

በንድፈ ሀሳብ ፣ ከላይ ባሉት ምሳሌዎች ላይ በመመርኮዝ የተጻፈውን ኮድ ከፈተኑ ፣ ከዚያ በማሰማራት ተግባር ውስጥ ቀድሞውኑ ከስሪቶች ጋር ተቆልቋይ ዝርዝር ሊኖርዎት ይገባል ። ልክ በአጥፊው ስር ባለው ቅጽበታዊ ገጽ እይታ ውስጥ እንዳለ ነው።

በትክክል የተጠናቀቁ ስሪቶች ዝርዝር
ያለ ተሰኪዎች፣ ኤስኤምኤስ ወይም ምዝገባ በ GKE ውስጥ የማሰማራት ተግባር እንፈጥራለን። በጄንኪንስ ጃኬት ስር እንይ

ሁሉም ነገር ከሰራ፣ ከዚያ ስክሪፕቱን ይቅዱ የሼል ትዕዛዝን ያሂዱ እና ለውጦችን ያስቀምጡ.

ከ Cloud shell ጋር በመገናኘት ላይ

በኮንቴይነሮች ውስጥ ሰብሳቢዎች አሉን. እንደ አፕሊኬሽን ማቅረቢያ መሳሪያችን እና ውቅረት አቀናባሪን እንጠቀማለን። በዚህ መሠረት ኮንቴይነሮችን ለመሥራት ሲያስቡ ሦስት አማራጮች ወደ አእምሮአቸው ይመጣሉ፡ Docker in Docker ን ይጫኑ፣ Dockerን በ Ansible በሚሠራ ማሽን ላይ ይጫኑ ወይም ኮንቴይነሮችን በክላውድ ኮንሶል ውስጥ ይገንቡ። በዚህ ጽሑፍ ውስጥ ስለ ጄንኪንስ ተሰኪዎች ዝም ለማለት ተስማምተናል። አስታውስ?

እኔ ወሰንኩ: ደህና ፣ “ከሳጥኑ ውጭ” ኮንቴይነሮች በደመና ኮንሶል ውስጥ ሊሰበሰቡ ስለሚችሉ ታዲያ ለምን ይረብሹ? ንጽህና አቆይ፣ አይደል? የጄንኪንስ ኮንቴይነሮችን በክላውድ ኮንሶል ውስጥ መሰብሰብ እፈልጋለሁ, እና ከዚያ ወደ ኪዩበር አስነሳቸው. ከዚህም በላይ ጉግል በመሠረተ ልማት አውታሮች ውስጥ በጣም የበለጸጉ ሰርጦች አሉት, ይህም በማሰማራት ፍጥነት ላይ ጠቃሚ ተጽእኖ ይኖረዋል.

ከክላውድ ኮንሶል ጋር ለመገናኘት ሁለት ነገሮች ያስፈልጉዎታል፡- gcloud እና የመዳረሻ መብቶች ወደ ጉግል ክላውድ ኤፒአይ ይህ ተመሳሳይ ግንኙነት የሚሠራበት ለ VM ምሳሌ.

ከGoogle ደመና ሳይሆን ለመገናኘት ላሰቡ
Google በአገልግሎቶቹ ውስጥ በይነተገናኝ ፍቃድን የማሰናከል እድል ይፈቅዳል። ይህ * nix እየሄደ ከሆነ እና ኮንሶል እራሱ ካለው ከቡና ማሽን እንኳን ከኮንሶሉ ጋር እንዲገናኙ ያስችልዎታል።

በዚህ ማስታወሻ ማዕቀፍ ውስጥ ይህንን ጉዳይ በበለጠ ዝርዝር እንድሸፍን የሚያስፈልገኝ ከሆነ በአስተያየቶቹ ውስጥ ይፃፉ ። በቂ ድምጽ ካገኘን በዚህ ርዕስ ላይ ማሻሻያ እጽፋለሁ።

መብቶችን ለመስጠት ቀላሉ መንገድ የድር በይነገጽ ነው።

  1. በመቀጠል ከደመና ኮንሶል ጋር የሚገናኙበትን የVM ምሳሌ ያቁሙ።
  2. የአብነት ዝርዝሮችን ይክፈቱ እና ጠቅ ያድርጉ አስተካከለ.
  3. ከገጹ ግርጌ ላይ የአብነት መዳረሻ ወሰንን ይምረጡ የሁሉም የደመና ኤፒአይዎች ሙሉ መዳረሻ.

    .Иншот
    ያለ ተሰኪዎች፣ ኤስኤምኤስ ወይም ምዝገባ በ GKE ውስጥ የማሰማራት ተግባር እንፈጥራለን። በጄንኪንስ ጃኬት ስር እንይ

  4. ለውጦችዎን ያስቀምጡ እና ምሳሌውን ያስጀምሩ።

ቪኤም መጫኑን እንደጨረሰ በኤስኤስኤች በኩል ያገናኙት እና ግንኙነቱ ያለ ምንም ስህተት መከሰቱን ያረጋግጡ። ትዕዛዙን ተጠቀም፡-

gcloud alpha cloud-shell ssh

የተሳካ ግንኙነት ይህን ይመስላል
ያለ ተሰኪዎች፣ ኤስኤምኤስ ወይም ምዝገባ በ GKE ውስጥ የማሰማራት ተግባር እንፈጥራለን። በጄንኪንስ ጃኬት ስር እንይ

ወደ GKE አሰማራ

ወደ IaC (መሠረተ ልማት እንደ ኮድ) ለመቀየር በሁሉም መንገድ እየጣርን ያለን በመሆኑ የእኛ ዶከር ፋይሎች በጊት ውስጥ ይቀመጣሉ። ይህ በአንድ በኩል ነው። እና በ kubernetes ውስጥ መሰማራት በ yaml ፋይል ይገለጻል ፣ በዚህ ተግባር ብቻ ጥቅም ላይ ይውላል ፣ እሱ ራሱ እንደ ኮድ ነው። ይህ ከሌላኛው ወገን ነው. በአጠቃላይ እቅዱ የሚከተለው ነው፡-

  1. የተለዋዋጮችን ዋጋዎች እንወስዳለን BUILD_VERSION እና, እንደ አማራጭ, የሚተላለፉ ተለዋዋጮች እሴቶች ENV.
  2. የማስታወሻ ደብተሩን ከ Git ያውርዱ።
  3. ለማሰማራት yaml ይፍጠሩ።
  4. እነዚህን ሁለቱንም ፋይሎች በ scp ወደ ደመና ኮንሶል እንሰቅላቸዋለን።
  5. እዚያ ኮንቴይነር እንገነባለን እና ወደ ኮንቴይነር መዝገብ ውስጥ እንገፋዋለን
  6. የመጫኛ ፋይሉን ወደ ኪዩበር እንተገብራለን.

የበለጠ ግልጽ እንሁን። አንድ ጊዜ ማውራት ከጀመርን ENVየሁለት መለኪያዎች እሴቶችን ማለፍ አለብን እንበል- PARAM1 и PARAM2. ተግባራቸውን ለማሰማራት እንጨምራለን ፣ ይተይቡ - የሕብረቁምፊ መለኪያ.

.Иншот
ያለ ተሰኪዎች፣ ኤስኤምኤስ ወይም ምዝገባ በ GKE ውስጥ የማሰማራት ተግባር እንፈጥራለን። በጄንኪንስ ጃኬት ስር እንይ

በቀላል አቅጣጫ አቅጣጫ yaml እናመነጫለን። ድብልቅ ወደ ፋይል. በዶክተር ፋይልዎ ውስጥ እንዳለዎት ይታሰባል። PARAM1 и PARAM2የመጫኛ ስም እንደሚሆን ግሩም አፕ, እና የተሰበሰበው መያዣ ከተጠቀሰው ስሪት ትግበራ ጋር ተኝቷል የመያዣ መዝገብ በመንገድ ላይ gcr.io/አስደናቂ አፕ/አሪፍ አፕ-$BUILD_VERSIONየት $BUILD_VERSION ከተቆልቋይ ዝርዝሩ ውስጥ ብቻ ተመርጧል።

የቡድን ዝርዝር

touch deploy.yaml
echo "apiVersion: apps/v1" >> deploy.yaml
echo "kind: Deployment" >> deploy.yaml
echo "metadata:" >> deploy.yaml
echo "  name: awesomeapp" >> deploy.yaml
echo "spec:" >> deploy.yaml
echo "  replicas: 1" >> deploy.yaml
echo "  selector:" >> deploy.yaml
echo "    matchLabels:" >> deploy.yaml
echo "      run: awesomeapp" >> deploy.yaml
echo "  template:" >> deploy.yaml
echo "    metadata:" >> deploy.yaml
echo "      labels:" >> deploy.yaml
echo "        run: awesomeapp" >> deploy.yaml
echo "    spec:" >> deploy.yaml
echo "      containers:" >> deploy.yaml
echo "      - name: awesomeapp" >> deploy.yaml
echo "        image: gcr.io/awesomeapp/awesomeapp-$BUILD_VERSION:latest" >> deploy.yaml
echo "        env:" >> deploy.yaml
echo "        - name: PARAM1" >> deploy.yaml
echo "          value: $PARAM1" >> deploy.yaml
echo "        - name: PARAM2" >> deploy.yaml
echo "          value: $PARAM2" >> deploy.yaml

የጄንኪንስ ወኪል በመጠቀም ከተገናኘ በኋላ gcloud አልፋ ደመና-ሼል ssh በይነተገናኝ ሁነታ አይገኝም፣ ስለዚህ ግቤትን በመጠቀም ትዕዛዞችን ወደ ደመና ኮንሶል እንልካለን። --ትእዛዝ.

የመነሻ ማህደሩን በደመና ኮንሶል ውስጥ ከድሮው ዶክ ፋይል እናጸዳዋለን፡

gcloud alpha cloud-shell ssh --command="rm -f Dockerfile"

scpን በመጠቀም አዲስ የወረደውን ዶከርፋይል በደመና ኮንሶል የመነሻ አቃፊ ውስጥ ያስቀምጡት፡-

gcloud alpha cloud-shell scp localhost:./Dockerfile cloudshell:~

እንሰበስባለን ፣ መለያውን እና መያዣውን ወደ ኮንቴይነር መዝገብ እንገፋለን ።

gcloud alpha cloud-shell ssh --command="docker build -t awesomeapp-$BUILD_VERSION ./ --build-arg BUILD_VERSION=$BUILD_VERSION --no-cache"
gcloud alpha cloud-shell ssh --command="docker tag awesomeapp-$BUILD_VERSION gcr.io/awesomeapp/awesomeapp-$BUILD_VERSION"
gcloud alpha cloud-shell ssh --command="docker push gcr.io/awesomeapp/awesomeapp-$BUILD_VERSION"

እኛ በማሰማራት ፋይል ተመሳሳይ ነገር እናደርጋለን። እባክዎን ከዚህ በታች ያሉት ትዕዛዞች ማሰማራቱ የሚከሰትበትን የክላስተር ምናባዊ ስሞችን እንደሚጠቀሙ ልብ ይበሉ (awsm-ክላስተር) እና የፕሮጀክት ስም (ግሩም-ፕሮጀክት), ክላስተር የሚገኝበት.

gcloud alpha cloud-shell ssh --command="rm -f deploy.yaml"
gcloud alpha cloud-shell scp localhost:./deploy.yaml cloudshell:~
gcloud alpha cloud-shell ssh --command="gcloud container clusters get-credentials awsm-cluster --zone us-central1-c --project awesome-project && 
kubectl apply -f deploy.yaml"

ተግባሩን እናካሂዳለን, የኮንሶል ውጤቱን እንከፍተዋለን እና የእቃውን ስኬታማ ስብሰባ ለማየት ተስፋ እናደርጋለን.

.Иншот
ያለ ተሰኪዎች፣ ኤስኤምኤስ ወይም ምዝገባ በ GKE ውስጥ የማሰማራት ተግባር እንፈጥራለን። በጄንኪንስ ጃኬት ስር እንይ

እና ከዚያም የተሰበሰበውን መያዣ በተሳካ ሁኔታ መዘርጋት

.Иншот
ያለ ተሰኪዎች፣ ኤስኤምኤስ ወይም ምዝገባ በ GKE ውስጥ የማሰማራት ተግባር እንፈጥራለን። በጄንኪንስ ጃኬት ስር እንይ

ሆን ብዬ ቅንብሩን ችላ አልኩት Ingress. በአንድ ቀላል ምክንያት: አንዴ ካዋቀሩት የስራ ጫና በተሰየመ ስም፣ በዚህ ስም የቱንም ያህል ማሰማራት ቢያካሂዱ እንደሰራ ይቆያል። እንግዲህ፣ በአጠቃላይ፣ ይህ ከታሪክ ወሰን ትንሽ በላይ ነው።

ከመደምደም ይልቅ

ከላይ ያሉት ሁሉም እርምጃዎች ምናልባት ሊደረጉ አይችሉም ነበር፣ ነገር ግን በቀላሉ አንዳንድ ፕለጊን ለ Jenkins ተጭኗል። ግን በሆነ ምክንያት ተሰኪዎችን አልወድም። ደህና፣ በትክክል፣ ወደ እነርሱ የምመራው በተስፋ መቁረጥ ብቻ ነው።

እና ለእኔ አዲስ ርዕስ ማንሳት እወዳለሁ። ከላይ ያለው ጽሑፍ ገና መጀመሪያ ላይ የተገለጸውን ችግር እየፈታሁ ያገኘኋቸውን ግኝቶች የማካፈልበት መንገድ ነው። እንደ እሱ በምንም አይነት ደባሪ ተኩላ ላልሆኑ ያካፍሉ። ግኝቶቼ ቢያንስ አንድን ሰው ከረዱኝ ደስተኛ እሆናለሁ።

ምንጭ: hab.com

አስተያየት ያክሉ