Senza umsebenzi wokuthunyelwa kwi-GKE ngaphandle kweeplagi, i-SMS okanye ukubhaliswa. Makhe sikrobe phantsi kwebhatyi kaJenkins

Yonke le nto yaqala xa iqela elikhokelayo lelinye lamaqela ethu ophuhliso lasicela ukuba sivavanye isicelo sabo esitsha, esasifakwe kwimigqomo kusuku olungaphambili. Ndayithumela. Emva kwemizuzu emalunga nama-20, kwafunyanwa isicelo sokuhlaziya eso sicelo, kuba kongezwe into eyimfuneko kakhulu apho. Ndihlaziye. Emva kwezinye iiyure ezimbalwa ... kulungile, ungaqikelela ukuba kuqale ukwenzeka ntoni ngokulandelayo...

Ndimele ndivume, ndonqena (andizange ndiyivume le nto ngaphambili? Hayi?), Kwaye ngenxa yokuba iqela elikhokelayo linokufikelela kwi-Jenkins, apho sinayo yonke i-CI / CD, ndacinga ukuba: makasebenzise njengoko kakhulu njengoko efuna! Ndakhumbula isiqhulo: nika umntu intlanzi kwaye uya kudla usuku; fowunela umntu uFed kwaye uya kudliswa ubomi bakhe bonke. Uye wahamba dlala amaqhinga emsebenzini, eya kukwazi ukubeka isitya esinesicelo sayo nayiphi na inguqulelo eyakhiwe ngempumelelo kwi-Kuber kwaye idlulisele nawaphi na amaxabiso kuyo. ENV (utatomkhulu wam, isazi sefilosofi, utitshala wesiNgesi kwixa elidlulileyo, ngoku wayejikelezisa umnwe wakhe etempileni yakhe aze andijonge ngokuphandle emva kokufunda esi sivakalisi).

Ke, kweli nqaku ndiza kukuxelela ukuba ndifunde njani:

  1. Hlaziya imisebenzi e-Jenkins ngokwawo okanye kweminye imisebenzi;
  2. Qhagamshela kwi-console yefu (iqokobhe lamafu) ukusuka kwi-node ene-agent ye-Jenkins efakwe;
  3. Beka umthwalo wokusebenza kuGoogle Kubernetes Engine.


Enyanisweni, mna, ngokuqinisekileyo, ndiyinto engafanelekanga. Kucingelwa ukuba ubuncinci inxalenye yesiseko kwilifu likaGoogle, kwaye, ke, ungumsebenzisi wayo kwaye, ngokuqinisekileyo, unayo iakhawunti ye-GCP. Kodwa ayisiyiyo le nto eli nqaku limalunga nayo.

Eli liphepha lam elilandelayo lokukopela. Ndifuna kuphela ukubhala amanqaku anjalo kwimeko enye: Ndandijongene nengxaki, ekuqaleni ndandingazi ukuba ndiyicombulule njani, isisombululo asizange sifakwe kwi-googled, ngoko ke ndiyifake kwi-google kwaye ekugqibeleni ndiyisombulule ingxaki. Kwaye ukwenzela ukuba kwixesha elizayo, xa ndilibale ukuba ndenze njani, akufuneki ukuba ndiphinde ndifake i-google yonke into ngeqhekeza kwaye ndiyihlanganise ndawonye, ​​​​ndizibhala ngokwam amaphepha okukopela anjalo.

hlobo: 1. Inqaku lalibhalelwe β€œndim” ngendima okusemgangathweni ayisebenzi. Ndiyavuya ukufunda "bekuya kuba ngcono ukwenza ngale ndlela" iinketho kwizimvo.
2. Ukuba inxalenye esetyenzisiweyo yenqaku ithathwa njengetyuwa, ngoko, njengawo onke amanqaku am angaphambili, le yisisombululo setyuwa esibuthathaka.

Ukuhlaziya ngokunamandla useto lwemisebenzi eJenkins

Ndiwubona kwangaphambili umbuzo wakho: ingaba ukuhlaziya umsebenzi oguqukayo kunento yokwenza nayo? Ngenisa ixabiso leparameter yentambo ngesandla kwaye uphume uhambe!

Ndiyaphendula: Ndiyivila ngokwenene, andithandi xa bekhalaza: Misha, ukuthunyelwa kuphazamiseka, yonke into ihambile! Uqala ukukhangela, kwaye kukho uchwethezo kwixabiso lomnye umsebenzi wokuqaliswa kweparamitha. Ngoko ke, ndikhetha ukwenza yonke into ngokufanelekileyo kangangoko kunokwenzeka. Ukuba kunokwenzeka ukunqanda umsebenzisi ukuba angenise idatha ngokuthe ngqo ngokunika uluhlu lwamaxabiso onokukhetha kuwo, ndiye ndilungelelanise ukhetho.

Isicwangciso sesi: sakha umsebenzi eJenkins, apho, ngaphambi kokuba siqalise, singakhetha inguqulelo kuluhlu, sichaze amaxabiso eeparamitha ezigqithiselwe kwisikhongozeli. ENV, emva koko iqokelele isikhongozeli kwaye isityhalele kwiRejistri yeSikhongozeli. Emva koko ukusuka apho isitya siqaliswa kwi-cuber njenge umthwalo ngeeparamitha ezikhankanyiweyo emsebenzini.

Asiyi kuqwalasela inkqubo yokudala kunye nokuseka umsebenzi e-Jenkins, oku kuphuma kwisihloko. Siya kucinga ukuba umsebenzi ulungile. Ukuphumeza uluhlu oluhlaziyiweyo oluneenguqulelo, sifuna izinto ezimbini: uluhlu lwemvelaphi esele lukhona olunamanani oguqulelo asebenzayo kunye noguquko olufana nolwemvelaphi. Iparameter yokukhetha emsebenzini. Kumzekelo wethu, makuthiywe igama eliguquguqukayo BUILD_VERSION, asiyi kuhlala kuyo ngokweenkcukacha. Kodwa makhe sijonge ngakumbi kuluhlu lwemithombo.

Akukho zikhetho zininzi kangako. Zimbini izinto ezathi qatha kwangoko engqondweni:

  • Sebenzisa i-API yokufikelela kude enikezelwa nguJenkins kubasebenzisi bayo;
  • Cela imixholo yefolda yokugcina ekude (kwimeko yethu le yi-JFrog Artifactory, engabalulekanga).

Jenkins Remote ukufikelela API

Ngokwesithethe esekiweyo esisemagqabini, ndingathanda ukuphepha iinkcazo ezinde.
Ndiya kuzivumela kuphela inguqulelo yasimahla yesiqwenga somhlathi wokuqala iphepha lokuqala loxwebhu lwe-API:

I-Jenkins ibonelela nge-API yofikelelo olufundeka ngomatshini olukude ekusebenzeni kwayo. <…> Ufikelelo olukude lunikezelwa ngendlela efana ne-REST. Oku kuthetha ukuba akukho ndawo yokungena inye kuzo zonke iimpawu, kodwa endaweni yoko iURL efana ".../api/", apho"..." ithetha into apho amandla e-API asetyenziswa khona.

Ngamanye amazwi, ukuba umsebenzi wokusasaza esithetha ngawo ngoku uyafumaneka http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_build, emva koko iimpempe ze-API zalo msebenzi ziyafumaneka http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_build/api/

Emva koko, sinokukhetha ukuba yeyiphi ifom yokufumana imveliso. Masigxile kwi-XML, kuba i-API ivumela kuphela ukuhluza kule meko.

Makhe sizame nje ukufumana uluhlu lwawo wonke umsebenzi oqhutywe. Sinomdla kuphela kwigama lendibano (igama elibonisiwe) kunye nesiphumo sayo (siphumo):

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

Kwenzekile?

Ngoku masihluze ezo zibalekayo kuphela eziphela ngesiphumo UKUPHUMA. Masisebenzise ingxabano & ngaphandle kwaye njenge parameter siyakuyigqithisa indlela eya kwixabiso elingalinganiyo nalo UKUPHUMA. Ewe Ewe. Ukuchasa kabini yingxelo. Sikhuphela ngaphandle yonke into engenamdla kuthi:

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

Umfanekiso weskrini woluhlu lwabaphumeleleyo
Senza umsebenzi wokuthunyelwa kwi-GKE ngaphandle kweeplagi, i-SMS okanye ukubhaliswa. Makhe sikrobe phantsi kwebhatyi kaJenkins

Ewe, nje ngokuzonwabisa, masiqinisekise ukuba isihluzi asizange sisikhohlise (izihluzi azize zixoke!) kwaye sibonise uluhlu "lwezinto ezingaphumelelanga":

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

Umfanekiso weskrini woluhlu lwabangaphumelelanga
Senza umsebenzi wokuthunyelwa kwi-GKE ngaphandle kweeplagi, i-SMS okanye ukubhaliswa. Makhe sikrobe phantsi kwebhatyi kaJenkins

Uluhlu lweenguqulelo ezisuka kwisiqulathi seefayili kwiseva ekude

Kukho indlela yesibini yokufumana uluhlu lweenguqulelo. Ndiyayithanda nangaphezu kokufikelela kwiJenkins API. Ewe, kuba ukuba isicelo sakhiwe ngempumelelo, oko kuthetha ukuba yapakishwa kwaye yafakwa kwindawo yokugcina kwifolda efanelekileyo. Njenge, indawo yokugcina lugcino olungagqibekanga lweenguqulelo ezisebenzayo zezicelo. Njengo. Ewe, masimbuze ukuba zeziphi iinguqulelo ezigcinwe. Siza kugoqa, grep kwaye sikhuphe ifolda ekude. Ukuba nabani na unomdla kwi-oneliner, ngoko iphantsi komphangi.

Umyalelo womgca omnye
Nceda uqaphele izinto ezimbini: Ndidlulisa iinkcukacha zoqhagamshelwano kwi-header kwaye andifuni zonke iinguqulelo ezivela kwifolda, kwaye ndikhetha kuphela ezo zidalwe kwinyanga. Hlela umyalelo ukuze ulungele iinyani kunye neemfuno zakho:

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

Ukucwangcisa imisebenzi kunye nefayile yoqwalaselo lomsebenzi kwiJenkins

Sifumene umthombo woluhlu lweenguqulelo. Ngoku masibandakanye uluhlu lweziphumo kumsebenzi. Kum, isisombululo esicacileyo yayikukongeza inyathelo kumsebenzi wokwakha isicelo. Inyathelo eliza kwenziwa ukuba umphumo ube "yimpumelelo".

Vula useto lomsebenzi wendibano kwaye uskrolele ezantsi kakhulu. Cofa kumaqhosha: Yongeza inyathelo lokwakha -> Inyathelo elinemiqathango (enye). Kwizicwangciso zenyathelo, khetha imeko Ubume bokwakha bangoku, misela ixabiso UKUPHUMA, isenzo ekufuneka senziwe ukuba siphumelele Qhuba umyalelo weqokobhe.

Kwaye ngoku inxalenye yokuzonwabisa. UJenkins ugcina uqwalaselo lomsebenzi kwiifayile. Kwifomathi ye-XML. Apha endleleni http://ΠΏΡƒΡ‚ΡŒ-Π΄ΠΎ-задания/config.xml Ngokufanelekileyo, unokukhuphela ifayile yoqwalaselo, uyihlele njengoko kuyimfuneko kwaye uyibuyisele apho uyifumene khona.

Khumbula, sivumelene ngasentla ukuba siya kudala ipharamitha yoluhlu lweenguqulelo BUILD_VERSION?

Masikhuphele ifayile yoqwalaselo kwaye sijonge ngaphakathi kuyo. Ukuqinisekisa nje ukuba iparamitha isendaweni kunye nohlobo olufunwayo.

Screenshot phantsi spoiler.

Iqhekeza lakho le-config.xml kufuneka lijonge ngendlela efanayo. Ngaphandle kokuba imixholo yokhetho ayikho okwangoku
Senza umsebenzi wokuthunyelwa kwi-GKE ngaphandle kweeplagi, i-SMS okanye ukubhaliswa. Makhe sikrobe phantsi kwebhatyi kaJenkins

Ingaba uqinisekile? Yiyo loo nto, masibhale iskripthi esiya kwenziwa ukuba ulwakhiwo luphumelele.
Isikripthi siya kufumana uluhlu lweenguqulelo, khuphela ifayile yoqwalaselo, bhala uluhlu lweenguqulelo kuyo kwindawo esiyifunayo, kwaye emva koko uyibuyisele. Ewe. Ilungile lo nto. Bhala uluhlu lweenguqulelo kwi-XML kwindawo apho sele kukho uluhlu lweenguqulelo (ziya kuba kwixesha elizayo, emva kokuqaliswa kokuqala kweskripthi). Ndiyazi ukuba kusekho abalandeli abanoburharha bentetho eqhelekileyo emhlabeni. andingowabo. Nceda ufake xmlstarler kumatshini apho uqwalaselo luza kuhlelwa. Kum kubonakala ngathi eli ayiloxabiso elikhulu kangaka ukuhlawula ukunqanda ukuhlela i-XML usebenzisa i-sed.

Ngaphantsi kwe-spoiler, ndibonisa ikhowudi eyenza ulandelelwano olungentla ngokupheleleyo.

Bhala uluhlu lweenguqulelo ukusuka kwisiqulathi seefayili kwiseva ekude ukuya kuqwalaselo

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

Ukuba ukhetha ukhetho lokufumana iinguqulelo ezivela kuJenkins kwaye uyonqena njengam, ngoko ke phantsi komchithi kukho ikhowudi efanayo, kodwa uluhlu oluvela kuJenkins:

Bhala uluhlu lweenguqulelo ezivela kwiJenkins ukuya kuqwalaselo
Gcina nje oku engqondweni: igama lam lendibano linenombolo yolandelelwano kunye nenombolo yoguqulelo, eyahlulwe yikholoni. Ngokufanelekileyo, i-awk inqumla inxalenye engeyomfuneko. Ngokwakho, tshintsha lo mgca ukuze ulungele iimfuno zakho.

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

Kwithiyori, ukuba uvavanye ikhowudi ebhaliweyo ngokusekelwe kwimizekelo engentla, ngoko kumsebenzi wokuthunyelwa kufuneka ube noluhlu lokuhla kunye neenguqulelo. Kufana ne-screenshot phantsi kwe-spoiler.

Uluhlu oluzaliswe ngokuchanekileyo lweenguqulelo
Senza umsebenzi wokuthunyelwa kwi-GKE ngaphandle kweeplagi, i-SMS okanye ukubhaliswa. Makhe sikrobe phantsi kwebhatyi kaJenkins

Ukuba yonke into isebenzile, kopisha-uncamathisele iskripthi kuso Qhuba umyalelo weqokobhe kwaye ugcine utshintsho.

Iqhagamshela kwiqokobhe leLifu

Sinabaqokeleli kwizikhongozeli. Sisebenzisa i-Ansible njengesixhobo sethu sokuhanjiswa kwesicelo kunye nomphathi woqwalaselo. Ngokufanelekileyo, xa kufikwa kwizikhongozeli zokwakha, izinto ezintathu ezinokuthi zifike engqondweni: faka iDocker kwiDocker, faka iDocker kumatshini osebenza iAnsible, okanye wakhe izikhongozeli kwikhonsoli yelifu. Savuma ukuba sithule malunga neeplagi zeJenkins kweli nqaku. Khumbula?

Ndagqiba kwelokuba: ke, kuba iziqulathi "ngaphandle kwebhokisi" zinokuqokelelwa kwi-console yefu, kutheni ke ukhathazeka? Yigcine icocekile, akunjalo? Ndifuna ukuqokelela izitya zeJenkins kwi-console yefu, kwaye emva koko ndizise kwi-cuber ukusuka apho. Ngaphezu koko, iGoogle ineendlela ezityebileyo kakhulu ngaphakathi kweziseko zayo, eziya kuba nefuthe eliluncedo kwisantya sokuthunyelwa.

Ukuqhagamshela kwi-console yefu, udinga izinto ezimbini: gcloud kunye namalungelo okufikelela kwi Google Cloud API kumzekelo weVM apho olu xhulumaniso lufanayo luyakwenziwa ngayo.

Kwabo baceba ukunxibelelana hayi kwilifu likaGoogle kwaphela
UGoogle uvumela ukuba kunokwenzeka ukuvala ugunyaziso olusebenzayo kwiinkonzo zakhe. Oku kuya kukuvumela ukuba uqhagamshele kwikhonsoli nokuba usuka kumatshini wekofu, ukuba iyasebenza * nix kwaye ineconsole ngokwayo.

Ukuba kukho imfuneko yokuba ndiwugubungele lo mbandela ngokweenkcukacha ngakumbi kwisakhelo seli nqaku, bhala kwizimvo. Ukuba sifumana iivoti ezaneleyo, ndiza kubhala ukuhlaziywa kwesi sihloko.

Eyona ndlela ilula yokunika amalungelo kungonxibelelwano lwewebhu.

  1. Misa umzekelo we-VM oya kuthi emva koko uqhagamshele kwi-console yelifu.
  2. Vula Iinkcukacha zemeko kwaye ucofe Hlela.
  3. Emazantsi ephepha, khetha umzekelo wokufikelela umda Ukufikelela ngokupheleleyo kuzo zonke Cloud APIs.

    Π‘
    Senza umsebenzi wokuthunyelwa kwi-GKE ngaphandle kweeplagi, i-SMS okanye ukubhaliswa. Makhe sikrobe phantsi kwebhatyi kaJenkins

  4. Gcina utshintsho lwakho kwaye uqalise umzekelo.

Nje ukuba i-VM igqibe ukulayisha, qhagamshela kuyo nge-SSH kwaye uqinisekise ukuba unxibelelwano lwenzeka ngaphandle kwempazamo. Sebenzisa lo myalelo:

gcloud alpha cloud-shell ssh

Uqhagamshelo oluyimpumelelo lujongeka ngolu hlobo
Senza umsebenzi wokuthunyelwa kwi-GKE ngaphandle kweeplagi, i-SMS okanye ukubhaliswa. Makhe sikrobe phantsi kwebhatyi kaJenkins

Beka kwi-GKE

Ekubeni sizama ngazo zonke iindlela ukutshintshela ngokupheleleyo kwi-IaC (i-Infrastucture njengeKhowudi), iifayile zethu ze-docker zigcinwe kwi-Git. Oku kwicala elinye. Kwaye ukuthunyelwa kwi-kubernetes kuchazwa yifayile yaml, esetyenziswa kuphela ngulo msebenzi, yona ngokwayo ifana nekhowudi. Oku kuvela kwelinye icala. Ngokubanzi, ndiyathetha, isicwangciso sesi:

  1. Sithatha amaxabiso eenguqu BUILD_VERSION kwaye, ngokuzikhethela, amaxabiso eenguqu eziya kugqithiswa ENV.
  2. Khuphela ifayile yedocker kwiGit.
  3. Yenza i-yaml ukuze isetyenziswe.
  4. Silayisha zombini ezi fayile nge-scp kwi-console yefu.
  5. Sakha isikhongozeli apho kwaye siyityhalele kwirejistri yoMgqomo
  6. Sifaka ifayile yokuthunyelwa komthwalo kwi-cuber.

Masicacise ngakumbi. Sakhe saqala ukuthetha malunga ENV, emva koko kufuneka sigqithise amaxabiso eparameters ezimbini: PARAM1 ΠΈ PARAM2. Songeza umsebenzi wabo wokusasazwa, uhlobo - Umtya iParameter.

Π‘
Senza umsebenzi wokuthunyelwa kwi-GKE ngaphandle kweeplagi, i-SMS okanye ukubhaliswa. Makhe sikrobe phantsi kwebhatyi kaJenkins

Siza kuvelisa i-yaml ngendlela elula yokuqondisa kwakhona Bhala ukwenza ifayile. Kucingelwa, kunjalo, ukuba unayo kwifayile yakho ye-docker PARAM1 ΠΈ PARAM2ukuba igama lomthwalo liya kuba usetyenziso oluhle, kunye nesikhongozeli esidityanisiweyo kunye nokusetyenziswa koguqulelo oluchaziweyo silele Ubhaliso lwesikhongozeli indlela enye gcr.io/awesomeapp/awesomeapp-$BUILD_VERSIONphi $BUILD_VERSION isandula ukukhethwa kuluhlu oluhlayo.

Uluhlu lweqela

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

Jenkins arhente emva kokudibanisa usebenzisa gcloud alpha cloud-shell ssh imowudi esebenzisanayo ayifumaneki, ngoko sithumela imiyalelo kwi-console yefu sisebenzisa iparameter --myalelo.

Sicoca ifolda yasekhaya kwikhonsoli yelifu kwi-dockerfile endala:

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

Beka i-dockerfile esanda kukhutshelwa kwifolda yasekhaya ye-cloud console usebenzisa i-scp:

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

Siqokelela, sithegi kwaye sityhale isikhongozeli kwirejistri yoMgqomo:

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"

Senza okufanayo ngefayile yokuthunyelwa. Nceda qaphela ukuba le miyalelo ingezantsi isebenzisa amagama angeyonyani eqela apho ukusasazo lwenzeka khona (i-awsm-iqela) kunye negama leprojekthi (iprojekthi emangalisayo), apho iqela likhona.

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"

Siqhuba umsebenzi, vula imveliso ye-console kwaye sinethemba lokubona indibano eyimpumelelo yesikhongozeli.

Π‘
Senza umsebenzi wokuthunyelwa kwi-GKE ngaphandle kweeplagi, i-SMS okanye ukubhaliswa. Makhe sikrobe phantsi kwebhatyi kaJenkins

Kwaye emva koko ukuthunyelwa ngempumelelo kwesikhongozeli esidibeneyo

Π‘
Senza umsebenzi wokuthunyelwa kwi-GKE ngaphandle kweeplagi, i-SMS okanye ukubhaliswa. Makhe sikrobe phantsi kwebhatyi kaJenkins

Ndayityeshela ngabom imeko Ingress. Ngesizathu esinye esilula: nje ukuba uyimise umthwalo ngegama elinikiweyo, lizakuhlala lisebenza, akukhathaliseki nokuba ungakanani na ukuthunyelwa ngeli gama owenzayo. Ewe, ngokubanzi, oku kungaphaya kobubanzi bembali.

Endaweni yezigqibo

Onke la manyathelo angentla mhlawumbi ayengenakwenziwa, kodwa afake nje iplagi yeJenkins, i-muuulion yabo. Kodwa ngesizathu esithile andizithandi iiplagi. Ke, ngokuthe ngqo, ndibhenela kubo kuphela ngenxa yokuzilahlela.

Kwaye ndiyathanda ukuchola isihloko esitsha kum. Isicatshulwa esingasentla sikwayindlela yokwabelana ngeziphumo endizenzileyo ngelixa ndisombulula ingxaki echazwe ekuqaleni. Yabelana nabo, njengaye, abangayiyo kwaphela ingcuka eyingozi kwi-devops. Ukuba izinto endizifumeneyo zinceda umntu, ndiya konwaba.

umthombo: www.habr.com

Yongeza izimvo