Мо бе плагинҳо, SMS ё сабти ном дар GKE як вазифаи ҷойгиркунӣ эҷод мекунем. Биёед ба зери куртаи Ҷенкинс назар андозем

Ҳамааш аз он сар шуд, ки роҳбари дастаи яке аз гурӯҳҳои таҳияи мо аз мо хоҳиш кард, ки барномаи нави худро, ки як рӯз пеш дар контейнер ҷойгир карда шуда буд, озмоиш кунем. Ман онро нашр кардам. Пас аз тақрибан 20 дақиқа, дархост оид ба навсозии ариза омад, зеро дар он ҷо чизи хеле зарурӣ илова карда шуда буд. нав кардам. Пас аз ду соати дигар... хуб, шумо метавонед тахмин кунед, ки баъд чӣ мешавад...

Ман бояд иқрор шавам, ман хеле танбалам (оё ман инро қаблан иқрор нашуда будам? Не?) Ва бо назардошти он, ки роҳбарони даста ба Ҷенкинс дастрасӣ доранд, ки дар он мо ҳама CI/CD дорем, ман фикр кардам: бигзор вай ҳамчун ҷойгир карда шавад. чунон ки ӯ мехоҳад! Шӯхӣ ба ёдам омад: ба одам моҳӣ бидеҳ, як рӯз мехӯрад; шахсро ФР даъват кунед ва ӯ тамоми умраш ғизо медиҳад. Ва рафт дар кор найрангбозй кардан, ки метавонад як контейнерро дар бар мегирад, ки барномаи ҳама гуна версияи бомуваффақият сохташударо дар Кубер ҷойгир кунад ва ҳама гуна арзишҳоро ба он интиқол диҳад ENV (бобои ман, филолог, муаллими забони англисӣ дар гузашта, ҳоло пас аз хондани ин ҷумла ангушти худро ба маъбади худ чарх мезанад ва ба ман хеле равшан менигарист).

Ҳамин тавр, дар ин ёддошт ман ба шумо мегӯям, ки чӣ гуна омӯхтам:

  1. Ҷойҳои корро дар Ҷенкинс аз худи кор ё аз дигар корҳо ба таври динамикӣ навсозӣ кунед;
  2. Аз гиреҳ бо агенти Ҷенкинс насбшуда ба консоли абрӣ (Shell Cloud) пайваст шавед;
  3. Сарбории корро ба Google Kubernetes Engine ҷойгир кунед.


Дарвоқеъ, ман, албатта, то ҳадде беинсоф ҳастам. Тахмин меравад, ки шумо ҳадди аққал як қисми инфрасохтори абрии Google доред ва аз ин рӯ, шумо корбари он ҳастед ва албатта ҳисоби GCP доред. Аммо ин ёддошт дар бораи он нест.

Ин варақаи фиреби навбатии ман аст. Мехоҳам танҳо дар як маврид чунин ёддоштҳоро нависам: бо мушкилоте рӯбарӯ шудам, ман дар аввал намедонистам, ки чӣ тавр онро ҳал кунам, ҳалли онро дар ҳолати омода гугл намедонистам, аз ин рӯ, ман онро қисм-қисм ҷустуҷӯ кардам ва ниҳоят мушкилро ҳал кардам. Ва то дар оянда, вақте ки ман инро чӣ гуна кардаам, фаромӯш кунам, ки ман ҳама чизро қисм ба қисм дар Google ҷустуҷӯ карда, якҷоя ҷамъ овардан лозим нест, ман худам чунин варақаҳои фиребро менависам.

Радди: 1. Нота «барои худам», барои роль навишта шудааст таҷрибаи пешқадам дахл надорад. Ман хурсандам, ки вариантҳои "ин тавр кардан беҳтар мебуд" -ро дар шарҳҳо хондам.
2. Агар ќисми татбиќи нота намак њисобида шавад, пас мисли њамаи ёддоштњои пештараи ман ин њам мањлули намак суст аст.

Ба таври динамикӣ навсозии танзимоти кор дар Ҷенкинс

Ман саволи шуморо пешгӯӣ мекунам: навсозии динамикӣ бо он чӣ иртибот дорад? Қимати параметри сатрро дастӣ ворид кунед ва шумо меравед!

Ман ҷавоб медиҳам: Ман дар ҳақиқат танбал ҳастам, вақте ки онҳо шикоят мекунанд, ба ман маъқул нест: Миша, ҷойгиркунӣ вайрон мешавад, ҳама чиз нест! Шумо ба ҷустуҷӯ шурӯъ мекунед ва дар арзиши баъзе параметри оғози вазифа хатои хаттӣ мавҷуд аст. Аз ин рӯ, ман бартарӣ медиҳам, ки ҳама корро то ҳадди имкон самаранок анҷом диҳам. Агар имконпазир бошад, ки корбар аз ворид кардани маълумот мустақиман бо додани рӯйхати арзишҳое, ки аз онҳо интихоб карда мешаванд, пешгирӣ карда шавад, пас ман интихобро ташкил мекунам.

Нақша ин аст: мо дар Ҷенкинс коре эҷод мекунем, ки дар он пеш аз оғоз кардан мо метавонем версияро аз рӯйхат интихоб кунем, арзишҳои параметрҳои ба контейнер тавассути тавассути ENV, пас он контейнерро ҷамъ мекунад ва онро ба Феҳристи контейнерҳо тела медиҳад. Пас аз он ҷо контейнер дар куб ҳамчун оғоз карда мешавад сарборӣ бо параметрҳои дар кор нишондодашуда.

Мо раванди эҷод ва таъсиси ҷои корро дар Ҷенкинс баррасӣ намекунем, ин аз мавзӯъ аст. Мо тахмин мекунем, ки супориш тайёр аст. Барои татбиқи рӯйхати навшуда бо версияҳо, ба мо ду чиз лозим аст: рӯйхати манбаъҳои мавҷуда бо рақамҳои версияи априори дуруст ва тағирёбанда ба монанди Параметри интихоб дар вазифа. Дар мисоли мо бигзор тағирёбанда номгузорӣ шавад BUILD_VERSION, мо дар бораи он муфассал истода намемонем. Аммо биёед ба рӯйхати манбаъҳо муфассалтар назар андозем.

Он қадар вариантҳо вуҷуд надоранд. Дарҳол ду чиз ба ёдам омад:

  • API-и дастрасии дурдаст, ки Ҷенкинс ба корбарони худ пешниҳод мекунад, истифода баред;
  • Мундариҷаи ҷузвдони анбори дурдастро дархост кунед (дар ҳолати мо ин JFrog Artifactory аст, ки муҳим нест).

API дастрасии дурдасти Ҷенкинс

Тибқи анъанаи олиҷаноби муқарраршуда, ман аз шарҳҳои тӯлонӣ канорагирӣ кардан мехоҳам.
Ман ба худам танҳо тарҷумаи озоди порчаи параграфи якумро иҷозат медиҳам саҳифаи аввали ҳуҷҷатҳои API:

Ҷенкинс API-ро барои дастрасии дурдасти бо мошин хондашаванда ба функсияи он таъмин мекунад. <…> Дастрасии дурдаст бо услуби монанди REST пешниҳод карда мешавад. Ин маънои онро дорад, ки ягон нуқтаи ягонаи вуруд ба ҳамаи хусусиятҳо вуҷуд надорад, балки ба ҷои URL ба монанди ".../api/", Дар куҷо "..." маънои объектеро дорад, ки ба он қобилиятҳои API истифода мешаванд.

Ба ибораи дигар, агар вазифаи ҷойгиркунӣ, ки мо ҳоло дар бораи он гап мезанем, дастрас бошад http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_build, пас ҳуштакҳои API барои ин вазифа дастрасанд http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_build/api/

Баъдан, мо интихоб дорем, ки дар кадом шакл натиҷаро қабул кунем. Биёед ба XML тамаркуз кунем, зеро 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']

Скриншот аз рӯйхати муваффақ
Мо бе плагинҳо, SMS ё сабти ном дар GKE як вазифаи ҷойгиркунӣ эҷод мекунем. Биёед ба зери куртаи Ҷенкинс назар андозем

Хуб, танҳо барои фароғат, биёед боварӣ ҳосил кунем, ки филтр моро фиреб надиҳад (филтрҳо ҳеҷ гоҳ дурӯғ намегӯянд!) ва рӯйхати "муваффақият" -ро нишон медиҳанд:

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

Скриншоти рӯйхати онҳое, ки муваффақ нестанд
Мо бе плагинҳо, SMS ё сабти ном дар GKE як вазифаи ҷойгиркунӣ эҷод мекунем. Биёед ба зери куртаи Ҷенкинс назар андозем

Рӯйхати версияҳо аз ҷузвдони сервери дурдаст

Роҳи дуюми гирифтани рӯйхати версияҳо вуҷуд дорад. Ман онро ҳатто бештар аз дастрасӣ ба API Jenkins дӯст медорам. Хуб, зеро агар барнома бомуваффақият сохта шуда бошад, ин маънои онро дорад, ки он бастабандишуда ва дар репозиторий дар папкаи мувофиқ ҷойгир карда шудааст. Мисли, анбор нигаҳдории пешфарзии версияҳои кории барномаҳо мебошад. Мисли. Хуб, биёед аз ӯ пурсем, ки кадом версияҳо дар анбор ҳастанд. Мо папкаи дурдастро curl, grep ва awk мекунем. Агар касе ба oneliner таваҷҷӯҳ дошта бошад, пас он дар зери спойлер аст.

Фармони як сатр
Лутфан ду чизро ба назар гиред: ман тафсилоти пайвастро дар сарлавҳа мегузорам ва ба ман ҳамаи версияҳои ҷузвдон лозим нест ва ман танҳо онҳоеро интихоб мекунам, ки дар давоми як моҳ сохта шудаанд. Фармонро мувофиқи воқеият ва ниёзҳои худ таҳрир кунед:

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[^/]+' )

Насб кардани ҷойҳои корӣ ва файли конфигуратсияи кор дар Ҷенкинс

Мо сарчашмаи рӯйхати версияҳоро фаҳмидем. Биёед ҳоло рӯйхати натиҷаро ба вазифа дохил кунем. Барои ман, ҳалли возеҳи ин илова кардани як қадам дар вазифаи сохтани барнома буд. Қадам, ки агар натиҷа "муваффақият" бошад, иҷро мешуд.

Танзимоти вазифаи васлкуниро кушоед ва ба поён ҳаракат кунед. Тугмаҳоро пахш кунед: Илова кардани қадами сохтмон -> Қадами шартӣ (як). Дар танзимоти қадам, шартро интихоб кунед Ҳолати ҳозираи сохтмон, арзишро таъин кунед БУЗУРГ, амале, ки агар бомуваффақият анҷом дода шавад Фармони shell-ро иҷро кунед.

Ва ҳоло қисми шавқовар. Ҷенкинс конфигуратсияҳои корро дар файлҳо нигоҳ медорад. Дар формати XML. Дар роҳ http://путь-до-задания/config.xml Мувофиқи он, шумо метавонед файли конфигуратсияро зеркашӣ кунед, онро дар ҳолати зарурӣ таҳрир кунед ва онро ба ҷое, ки гирифтаед, баргардонед.

Дар хотир доред, ки мо дар боло мувофиқат кардем, ки мо барои рӯйхати версияҳо параметр эҷод мекунем BUILD_VERSION?

Биёед файли конфигуратсияро зеркашӣ кунем ва ба дохили он назар андозем. Танҳо боварӣ ҳосил кунед, ки параметр дар ҷои худ ва навъи дилхоҳ аст.

Скриншот дар зери спойлер.

Фрагменти config.xml шумо бояд якхела бошад. Ба истиснои он, ки мундариҷаи унсури интихобҳо ҳанӯз нест
Мо бе плагинҳо, SMS ё сабти ном дар GKE як вазифаи ҷойгиркунӣ эҷод мекунем. Биёед ба зери куртаи Ҷенкинс назар андозем

Шумо мутмаъин ҳастед? Ин аст, биёед скрипт нависем, ки агар сохтмон бомуваффақият анҷом ёбад, иҷро мешавад.
Скрипт рӯйхати версияҳоро мегирад, файли конфигуратсияро зеркашӣ мекунад, рӯйхати версияҳоро ба он ҷое, ки ба мо лозим аст, нависед ва сипас онро баргардонед. Бале. Ин дуруст аст. Рӯйхати версияҳоро дар XML дар ҷое нависед, ки аллакай рӯйхати версияҳо мавҷуд аст (дар оянда пас аз оғози аввалини скрипт хоҳад буд). Ман медонам, ки дар ҷаҳон то ҳол мухлисони ашаддии ибораҳои муқаррарӣ ҳастанд. Ман ба онҳо тааллуқ надорам. Лутфан насб кунед xmlstarler ба мошине, ки конфигуратсия таҳрир карда мешавад. Ман фикр намекунам, ки ин як нархи калон барои пешгирӣ кардани таҳрири XML бо sed аст.

Дар зери спойлер ман кодеро пешниҳод мекунам, ки пайдарпаии дар боло зикршударо пурра иҷро мекунад.

Рӯйхати версияҳоро аз ҷузвдони сервери дурдаст ба конфигуратсия нависед

#!/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

Агар шумо варианти гирифтани версияҳоро аз Ҷенкинс афзалтар донед ва шумо мисли ман танбал ҳастед, пас дар зери спойлер ҳамон код аст, аммо рӯйхат аз Ҷенкинс:

Рӯйхати версияҳоро аз Ҷенкинс ба конфигуратсия нависед
Фақат инро дар хотир нигоҳ доред: номи маҷлиси ман аз рақами пайдарпай ва рақами версия иборат аст, ки бо ду нуқта ҷудо карда шудааст. Мувофиқи он, awk қисми нолозимро буридааст. Барои худ, ин сатрро мувофиқи ниёзҳои худ иваз кунед.

#!/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

Дар назария, агар шумо коди дар асоси мисолҳои дар боло навишташударо санҷида бошед, пас дар вазифаи ҷойгиркунӣ шумо бояд аллакай рӯйхати афтанда бо версияҳо дошта бошед. Он мисли скриншот дар зери спойлер аст.

Рӯйхати дуруст анҷомёфтаи версияҳо
Мо бе плагинҳо, SMS ё сабти ном дар GKE як вазифаи ҷойгиркунӣ эҷод мекунем. Биёед ба зери куртаи Ҷенкинс назар андозем

Агар ҳама чиз кор кунад, пас скриптро ба он нусхабардорӣ кунед Фармони shell-ро иҷро кунед ва тағиротро захира кунед.

Пайвастшавӣ ба қабати абрӣ

Мо коллекторҳоро дар контейнерҳо дорем. Мо Ansible-ро ҳамчун воситаи интиқоли барномаҳо ва менеҷери конфигуратсияи худ истифода мебарем. Мувофиқи он, вақте сухан дар бораи сохтани контейнерҳо меравад, се вариант ба назар мерасад: Docker-ро дар Docker насб кунед, Docker-ро дар мошини Ansible насб кунед ё контейнерҳоро дар консоли абрӣ созед. Мо розӣ шудем, ки дар ин мақола дар бораи плагинҳо барои Ҷенкинс хомӯш монем. Дар хотир доред?

Ман қарор додам: хуб, азбаски контейнерҳоро "аз қуттӣ" дар консоли абр ҷамъ кардан мумкин аст, пас чаро ташвиш додан лозим аст? Онро тоза нигоҳ доред, дуруст? Ман мехоҳам контейнерҳои Ҷенкинсро дар консоли абр ҷамъ кунам ва сипас онҳоро аз он ҷо ба кубер оғоз кунам. Гузашта аз ин, Google дар дохили инфрасохтори худ каналҳои хеле бой дорад, ки ба суръати густариш таъсири судманд мерасонад.

Барои пайваст шудан ба консоли абр ба шумо ду чиз лозим аст: gcloud ва ҳуқуқҳои дастрасӣ ба API-и Google Cloud барои мисоли VM, ки бо он ин пайвастшавӣ анҷом дода мешавад.

Барои онҳое, ки нақша доранд, ки на аз Google Cloud пайваст шаванд
Google имкони хомӯш кардани авторизатсияи интерактивиро дар хидматҳои худ иҷозат медиҳад. Ин ба шумо имкон медиҳад, ки ҳатто аз мошини қаҳва ба консол пайваст шавед, агар он *nix кор кунад ва худи консол дошта бошад.

Агар зарурате пайдо шавад, ки ин масъаларо дар доираи ин ёддошт муфассалтар баён кунам, дар шарҳҳо нависед. Агар мо овозҳои кофӣ ба даст орем, ман дар ин мавзӯъ навсозӣ хоҳам навишт.

Роҳи осонтарини додани ҳуқуқҳо тавассути интерфейси веб мебошад.

  1. Намунаи VM-ро қатъ кунед, ки аз он шумо баъдан ба консоли абр пайваст мешавед.
  2. Тафсилоти мисолро кушоед ва клик кунед ба салоҳ.
  3. Дар поёни саҳифа, доираи дастрасии мисолро интихоб кунед Дастрасии пурра ба ҳама API-ҳои абрӣ.

    Screenshot
    Мо бе плагинҳо, SMS ё сабти ном дар GKE як вазифаи ҷойгиркунӣ эҷод мекунем. Биёед ба зери куртаи Ҷенкинс назар андозем

  4. Тағиротҳои худро захира кунед ва мисолро оғоз кунед.

Пас аз анҷоми боркунии VM, ба он тавассути SSH пайваст шавед ва боварӣ ҳосил кунед, ки пайвастшавӣ бе хатогӣ сурат мегирад. Фармонро истифода баред:

gcloud alpha cloud-shell ssh

Пайвастшавӣ бомуваффақият чунин ба назар мерасад
Мо бе плагинҳо, SMS ё сабти ном дар GKE як вазифаи ҷойгиркунӣ эҷод мекунем. Биёед ба зери куртаи Ҷенкинс назар андозем

Дар GKE ҷойгир кунед

Азбаски мо бо ҳар роҳ кӯшиш мекунем, ки ба IaC (Инфраструктура ҳамчун Кодекс) гузарем, файлҳои докери мо дар Git нигоҳ дошта мешаванд. Ин аз як тараф. Ва ҷойгиркунӣ дар kubernetes бо файли yaml тавсиф карда мешавад, ки танҳо аз ҷониби ин вазифа истифода мешавад, ки худи он низ ба код монанд аст. Ин аз тарафи дигар аст. Умуман, ман дар назар дорам, ки нақша ин аст:

  1. Мо арзишҳои тағирёбандаҳоро мегирем BUILD_VERSION ва ба таври ихтиёрӣ, арзишҳои тағирёбандаҳое, ки тавассути онҳо гузаронида мешаванд ENV.
  2. Файли docker-ро аз Git зеркашӣ кунед.
  3. Барои ҷойгиркунӣ yaml эҷод кунед.
  4. Мо ҳардуи ин файлҳоро тавассути scp ба консоли абр бор мекунем.
  5. Мо дар он ҷо як контейнер месозем ва онро ба реестри Контейнер тела медиҳем
  6. Мо файли ҷойгиркунии борро ба cuber татбиқ мекунем.

Биёед конкреттар гуем. Боре мо ба сӯҳбат сар кардем ENV, пас фарз кунем, ки мо бояд арзишҳои ду параметрро гузаронем: PARAM1 и PARAM2. Мо вазифаи онҳоро барои ҷойгиркунӣ илова мекунем, навъи - Параметри сатр.

Screenshot
Мо бе плагинҳо, SMS ё сабти ном дар GKE як вазифаи ҷойгиркунӣ эҷод мекунем. Биёед ба зери куртаи Ҷенкинс назар андозем

Мо yaml-ро бо масири оддӣ тавлид хоҳем кард echo файл кардан. Албатта, тахмин карда мешавад, ки шумо дар файли docker-и худ доред PARAM1 и PARAM2ки номи бор мешавад барномаи олӣ, ва контейнери ҷамъшуда бо истифодаи версияи муайяншуда дар Феҳристи контейнерҳо дар роҳ gcr.io/awesomeapp/awesomeapp-$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 alpha абр-шелл ssh режими интерактивӣ мавҷуд нест, бинобар ин мо бо истифода аз параметр фармонҳоро ба консоли абр мефиристем --фармон.

Мо папкаи хонаро дар консоли абр аз файли кӯҳна тоза мекунем:

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

Бо истифода аз scp файли docker-и нав зеркашидашударо дар папкаи хонагии консоли абр ҷойгир кунед:

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"

Мо супоришро иҷро мекунем, баромади консолро мекушоем ва умедворем, ки васлкунии бомуваффақияти контейнерро мебинем.

Screenshot
Мо бе плагинҳо, SMS ё сабти ном дар GKE як вазифаи ҷойгиркунӣ эҷод мекунем. Биёед ба зери куртаи Ҷенкинс назар андозем

Ва он гоҳ бомуваффақият ҷойгиркунии контейнери ҷамъшуда

Screenshot
Мо бе плагинҳо, SMS ё сабти ном дар GKE як вазифаи ҷойгиркунӣ эҷод мекунем. Биёед ба зери куртаи Ҷенкинс назар андозем

Ман дидаву дониста танзимро сарфи назар кардам Ingress. Барои як сабаби оддӣ: вақте ки шумо онро насб мекунед сарборӣ бо номи додашуда, новобаста аз он ки шумо чӣ қадар ҷойгиркунӣ бо ин ном иҷро мекунед, он фаъол боқӣ мемонад. Хуб, умуман, ин аз доираи таърих каме берун аст.

Ба ҷои ба хулоса омадан

Ҳама қадамҳои дар боло зикршударо шояд иҷро карда наметавонистанд, аммо танҳо як плагинро барои Ҷенкинс насб карданд, муъули онҳо. Аммо барои баъзе сабабҳо ман плагинҳоро дӯст намедорам. Хуб, аниқтараш, ман танҳо аз ноумедӣ ба онҳо муроҷиат мекунам.

Ва ман танҳо мехоҳам, ки барои худ як мавзӯи нав бигирам. Матни дар боло овардашуда инчунин як роҳи мубодилаи бозёфтҳоест, ки ман ҳангоми ҳалли мушкилоте, ки дар ибтидо тавсиф шудаам, ба даст овардаам. Бо онҳое мубодила кунед, ки мисли ӯ дар девопҳо гурги даҳшатнок нестанд. Агар бозёфтҳои ман ҳадди аққал ба касе кӯмак кунанд, ман хурсанд мешавам.

Манбаъ: will.com

Илова Эзоҳ