Sakha umsebenzi wokuthumela ku-GKE ngaphandle kwama-plugin, i-SMS noma ukubhaliswa. Ake silunguze ngaphansi kwejakhethi kaJenkins

Konke kuqale ngesikhathi umholi wethimba lelinye lamathimba ethu okuthuthukisa besicela ukuthi sihlole isicelo sabo esisha, ebesifakwe amakhonteyina ngayizolo. Ngiyithumele. Ngemva kwemizuzu engaba ngu-20, kwatholakala isicelo sokuvuselela isicelo, ngoba kwase kwenezelwe into eyayidingeka kakhulu lapho. Ngivuselele. Ngemva kwamanye amahora ambalwa... ungaqagela ukuthi yini eqale ukwenzeka ngokulandelayo...

Kumelwe ngivume, ngivilapha ngempela (angizange ngikuvume lokhu ngaphambili? Cha?), futhi ngenxa yokuthi abaholi beqembu banokufinyelela ku-Jenkins, lapho sine-CI/CD yonke, ngacabanga: makasebenzise njenge kakhulu njengoba efuna! Ngakhumbula ihlaya: nika umuntu inhlanzi futhi uzodla usuku; shayela umuntu uFed futhi uzodliswa impilo yakhe yonke. Futhi wahamba dlala amaqhinga emsebenzini, ezokwazi ukuthumela isitsha esiqukethe ukusetshenziswa kwanoma iyiphi inguqulo eyakhelwe ngempumelelo ku-Kuber futhi idlulisele noma yimaphi amanani kuso ENV (umkhulu wami, isazi sefilosofi, uthisha wesiNgisi esikhathini esidlule, manje wayesenyakazisa umunwe ethempelini lakhe futhi angibuke ngokusobala ngemva kokufunda lo musho).

Ngakho-ke, kule nothi ngizokutshela ukuthi ngafunda kanjani:

  1. Vuselela ngokunamandla imisebenzi ku-Jenkins kusukela emsebenzini ngokwawo noma kweminye imisebenzi;
  2. Xhuma kukhonsoli yefu (igobolondo lamafu) kusuka endaweni ene-ejenti ye-Jenkins efakiwe;
  3. Hambisa umsebenzi ku-Google Kubernetes Engine.


Eqinisweni, vele, anginangqondo ngandlela-thile. Kucatshangwa ukuthi okungenani unengxenye yengqalasizinda efwini le-Google, ngakho-ke, ungumsebenzisi wayo futhi, kunjalo, une-akhawunti ye-GCP. Kodwa akukhona lokho leli nothi elimayelana.

Leli yishidi lami elilandelayo lokukopela. Ngifuna kuphela ukubhala amanothi anjalo esimweni esisodwa: Ngangibhekene nenkinga, ekuqaleni ngangingazi ukuthi ngingayixazulula kanjani, isixazululo asizange senziwe ngomumo we-google, ngakho-ke ngasebenzisa i-google ezingxenyeni futhi ekugcineni ngaxazulula inkinga. Futhi ukuze esikhathini esizayo, lapho ngikhohlwa ukuthi ngenze kanjani, akudingeki ngiphinde ngi-google yonke into ngocezu futhi ngiyihlanganise ndawonye, ​​​​ngizibhalela amashidi anjalo okukhohlisa.

Disclaimer: 1. Incwadi yayibhalelwe β€œmina” indima umkhuba omuhle kakhulu akusebenzi. Ngiyajabula ukufunda izinketho "bekungaba ngcono ukwenza ngale ndlela" kumazwana.
2. Uma ingxenye esetshenzisiwe yenothi ibhekwa njengosawoti, ngakho-ke, njengawo wonke amanothi ami angaphambilini, lena yisisombululo sikasawoti esibuthakathaka.

Ibuyekeza izilungiselelo zomsebenzi ngokunamandla ku-Jenkins

Ngiwubona kusengaphambili umbuzo wakho: ingabe ukuvuselelwa komsebenzi oguquguqukayo kuhlangene ngani nakho? Faka inani lepharamitha yeyunithi yezinhlamvu ngokwenza bese uyahamba!

Ngiyaphendula: Ngivilapha ngempela, angithandi uma bekhononda: Misha, ukuthunyelwa kuyaphahlazeka, konke kuhambile! Uqala ukubuka, futhi kukhona ukuthayipha kwenani lepharamitha yokuqalisa umsebenzi. Ngakho-ke, ngincamela ukwenza konke ngokuphumelelayo ngangokunokwenzeka. Uma kungenzeka ukuvimbela umsebenzisi ukuthi afake idatha ngokuqondile ngokunikeza uhlu lwamanani ongakhetha kuwo, bese ngihlela ukukhetha.

Uhlelo yilo: sakha umsebenzi e-Jenkins, lapho, ngaphambi kokwethula, singakhetha inguqulo ohlwini, sicacise amanani wemingcele edluliselwe esitsheni nge ENV, bese iqoqa isitsha bese isiphushela ku-Container Registry. Bese kusuka lapho isitsha sethulwa ku-cuber njenge umthwalo womsebenzi namapharamitha ashiwo emsebenzini.

Ngeke sicabangele inqubo yokudala nokumisa umsebenzi e-Jenkins, lokhu akukho esihlokweni. Sizothatha ngokuthi umsebenzi usulungile. Ukuze sisebenzise uhlu olubuyekeziwe olunezinguqulo, sidinga izinto ezimbili: uhlu lomthombo olukhona olunezinombolo zenguqulo evumelekile kanye nokuhluka okufana no Ipharamitha yokukhetha emsebenzini. Esibonelweni sethu, makuqanjwe okuguquguqukayo BUILD_VERSION, ngeke sigxile kukho ngokuningiliziwe. Kodwa ake sibhekisise uhlu lwemithombo.

Azikho izinketho eziningi kangako. Izinto ezimbili ezafika ngokushesha engqondweni:

  • Sebenzisa i-API yokufinyelela kude i-Jenkins eyinikeza abasebenzisi bayo;
  • Cela okuqukethwe kwefolda yendawo ekude (kithi lena yi-JFrog Artifactory, engabalulekile).

I-Jenkins Remote access API

Ngokwesiko elihle kakhulu elimisiwe, ngingathanda ukugwema izincazelo ezinde.
Ngizozivumela kuphela ukuhumusha kwamahhala kwesiqephu sendima yokuqala ikhasi lokuqala lemibhalo ye-API:

I-Jenkins inikeza i-API yokufinyelela okufundeka kude ngomshini ekusebenzeni kwayo. <…> Ukufinyelela kude kunikezwa ngesitayela esifana ne-REST. Lokhu kusho ukuthi ayikho indawo eyodwa yokungena kuzo zonke izici, kodwa esikhundleni salokho i-URL efana ne- ".../api/",Kuphi"..." kusho into lapho amandla e-API asetshenziswa khona.

Ngamanye amazwi, uma umsebenzi wokusatshalaliswa esikhuluma ngawo njengamanje utholakala kuwo http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_build, bese izimpempe ze-API zalo msebenzi zitholakala kokuthi http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_build/api/

Okulandelayo, sinokukhetha ukuthi yiluphi uhlobo lokuthola okukhiphayo. Ake sigxile ku-XML, njengoba i-API ivumela kuphela ukuhlunga kuleli cala.

Ake sizame nje ukuthola uhlu lwayo yonke imisebenzi eqhutshwayo. Sithanda kuphela igama lomhlangano (Bonisa igama) kanye nomphumela wayo (umphumela):

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

Ingabe yaphumelela?

Manje ake sihlunge kuphela lokho okugijima okugcina ngomphumela UKUZEZA. Masisebenzise impikiswano &khipha futhi njengepharamitha sizoyidlulisela indlela eya enanini elingalingani nalo UKUZEZA. Yebo Yebo. I-double negative isitatimende. Asikufaki konke okungasithakazelisi:

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

Isithombe-skrini sohlu lwabaphumelele
Sakha umsebenzi wokuthumela ku-GKE ngaphandle kwama-plugin, i-SMS noma ukubhaliswa. Ake silunguze ngaphansi kwejakhethi kaJenkins

Nokho, ukuze sizijabulise, masiqinisekise ukuthi isihlungi asizange sisikhohlise (izihlungi azilokothi ziqambe amanga!) futhi sibonise uhlu β€œlwabangaphumelelanga”:

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

Isithombe-skrini sohlu lwabangaphumelelanga
Sakha umsebenzi wokuthumela ku-GKE ngaphandle kwama-plugin, i-SMS noma ukubhaliswa. Ake silunguze ngaphansi kwejakhethi kaJenkins

Uhlu lwezinguqulo ezisuka kufolda kuseva ekude

Kukhona indlela yesibili yokuthola uhlu lwezinguqulo. Ngiyithanda ngisho nangaphezu kokufinyelela i-Jenkins API. Hhayi-ke, ngoba uma isicelo sakhiwe ngempumelelo, kusho ukuthi sapakishwa futhi safakwa endaweni yokugcina kufolda efanelekile. Njengokuthi, indawo yokugcina isitoreji esizenzakalelayo sezinguqulo ezisebenzayo zezinhlelo zokusebenza. Thanda. Hhayi-ke, ake simbuze ukuthi yiziphi izinguqulo ezisesitorejini. Sizosonga, grep futhi awk ifolda ekude. Uma umuntu enesithakazelo ku-oneliner, khona-ke ingaphansi kwe-spoiler.

Umyalo womugqa owodwa
Sicela uqaphele izinto ezimbili: Ngidlulisela imininingwane yokuxhuma kunhlokweni futhi angizidingi zonke izinguqulo ezivela kufolda, futhi ngikhetha kuphela lezo ezidalwe phakathi nenyanga. Hlela umyalo ukuze uvumelane namaqiniso nezidingo 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[^/]+' )

Ukusetha imisebenzi kanye nefayela lokumisa umsebenzi ku-Jenkins

Sithole umthombo wohlu lwezinguqulo. Manje ake sihlanganise uhlu oluwumphumela emsebenzini. Kimi, isixazululo esisobala kwakuwukwengeza isinyathelo emsebenzini wokwakha isicelo. Isinyathelo esizokwenziwa uma umphumela "uyimpumelelo".

Vula izilungiselelo zomsebenzi womhlangano bese uskrolela phansi impela. Chofoza izinkinobho: Engeza isinyathelo sokwakha -> Isinyathelo esinemibandela (sisodwa). Kuzilungiselelo zesinyathelo, khetha isimo Isimo samanje sokwakha, setha inani UKUZEZA, isenzo okufanele senziwa uma siphumelele Qalisa umyalo wegobolondo.

Futhi manje ingxenye ejabulisayo. UJenkins ugcina ukulungiselelwa komsebenzi kumafayela. Ngefomethi ye-XML. Endleleni http://ΠΏΡƒΡ‚ΡŒ-Π΄ΠΎ-задания/config.xml Ngokufanelekile, ungalanda ifayela lokucushwa, ulihlele njengoba kudingeka futhi ulibuyisele lapho olithole khona.

Khumbula, sivumelene ngenhla ukuthi sizodala ipharamitha yohlu lwezinguqulo BUILD_VERSION?

Ake silande ifayela lokumisa futhi sibheke ngaphakathi kwalo. Ukuze nje uqiniseke ukuthi ipharamitha isendaweni kanye nohlobo olufunayo.

Isithombe-skrini ngaphansi kwe-spoiler.

Ucezu lwakho lwe-config.xml kufanele lubukeke ngendlela efanayo. Ngaphandle kokuthi okuqukethwe kwe-elementi yezinketho akukho okwamanje
Sakha umsebenzi wokuthumela ku-GKE ngaphandle kwama-plugin, i-SMS noma ukubhaliswa. Ake silunguze ngaphansi kwejakhethi kaJenkins

Uqinisekile? Yilokho kuphela, masibhale iskripthi esizokwenziwa uma ukwakhiwa kuphumelele.
Umbhalo uzothola uhlu lwezinguqulo, landa ifayela lokumisa, ubhale uhlu lwezinguqulo kulo endaweni esiyidingayo, bese ulibuyisela emuva. Yebo. Kulungile. Bhala uhlu lwezinguqulo ku-XML endaweni lapho sekunohlu lwezinguqulo (luzoba ngokuzayo, ngemva kokwethulwa kokuqala kombhalo). Ngiyazi ukuthi basekhona abalandeli abanolaka bezinkulumo ezijwayelekile emhlabeni. Angisiye owabo. Sicela ufake xmlstarler emshinini lapho ukulungiselelwa kuzohlelwa khona. Kimina kubonakala sengathi lokhu akuyona intengo enkulu kangaka okufanele uyikhokhe ukuze ugweme ukuhlela i-XML usebenzisa i-sed.

Ngaphansi kwe-spoiler, ngethula ikhodi eyenza ukulandelana okungenhla ngokuphelele.

Bhala uhlu lwezinguqulo ukusuka kufolda kuseva eyirimothi uye kuzilungiselelo

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

Uma ukhetha inketho yokuthola izinguqulo ku-Jenkins futhi uvilapha njengami, khona-ke ngaphansi kwesiphangi kukhona ikhodi efanayo, kodwa uhlu oluvela ku-Jenkins:

Bhala uhlu lwezinguqulo kusuka ku-Jenkins kuya ku-config
Vele ugcine lokhu engqondweni: igama lami lomhlangano liqukethe inombolo yokulandelana kanye nenombolo yenguqulo, ehlukaniswa nekholoni. Ngokunjalo, i-awk inqamula ingxenye engadingekile. Ngokwakho, shintsha lo mugqa ukuze uhambisane nezidingo 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

Ngokombono, uma uhlole ikhodi ebhaliwe ngokusekelwe ezibonelweni ezingenhla, lapho-ke emsebenzini wokuthunyelwa kufanele ube nohlu lokudonsela phansi elinezinguqulo. Kufana nesithombe-skrini ngaphansi kwe-spoiler.

Uhlu oluqedwe kahle lwezinguqulo
Sakha umsebenzi wokuthumela ku-GKE ngaphandle kwama-plugin, i-SMS noma ukubhaliswa. Ake silunguze ngaphansi kwejakhethi kaJenkins

Uma konke kusebenze, kopisha-unamathisele iskripthi kuso Qalisa umyalo wegobolondo futhi ulondoloze izinguquko.

Ixhumeka kugobolondo lamafu

Sinabaqoqi ezitsheni. Sisebenzisa i-Ansible njengethuluzi lethu lokulethwa kohlelo lokusebenza kanye nomphathi wokumisa. Ngokufanelekile, uma kukhulunywa ngeziqukathi zokwakha, kuqhamuka izinto ezintathu ongakhetha kuzo: faka i-Docker ku-Docker, faka i-Docker emshinini osebenzisa i-Ansible, noma wakhe iziqukathi kukhonsoli yamafu. Savuma ukuthula mayelana nama-plugin kaJenkins kulesi sihloko. Uyakhumbula?

Nganquma: kahle, njengoba iziqukathi "ezingaphandle kwebhokisi" zingaqoqwa kukhonsoli yamafu, kungani-ke ukhathazeka? Kugcine kuhlanzekile, akunjalo? Ngifuna ukuqoqa iziqukathi ze-Jenkins kukhonsoli yamafu, bese ngizethula ku-cuber ukusuka lapho. Ngaphezu kwalokho, i-Google ineziteshi ezicebile kakhulu ngaphakathi kwengqalasizinda yayo, ezoba nomthelela onenzuzo ngesivinini sokuthunyelwa.

Ukuze uxhume kukhonsoli yamafu, udinga izinto ezimbili: gcloud kanye namalungelo okufinyelela ku I-Google Cloud API okwesibonelo se-VM lapho lokhu kuxhumana okufanayo kuzokwenziwa khona.

Kulabo abahlela ukuxhuma akuveli ku-Google cloud nhlobo
I-Google ivumela ithuba lokukhubaza ukugunyazwa okusebenzisanayo ezinsizeni zayo. Lokhu kuzokuvumela ukuthi uxhume ku-console noma usuka emshinini wekhofi, uma usebenza * nix futhi unekhonsoli ngokwayo.

Uma kunesidingo sokuthi ngifake lolu daba ngokuningiliziwe ngaphakathi kohlaka lwaleli nothi, bhala kumazwana. Uma sithola amavoti anele, ngizobhala isibuyekezo ngalesi sihloko.

Indlela elula yokunikeza amalungelo ukusebenzisa isixhumi esibonakalayo sewebhu.

  1. Misa isibonelo se-VM lapho uzoxhumeka khona kukhonsoli yamafu.
  2. Vula imininingwane ye-Instance bese uchofoza Hlela.
  3. Phansi kwekhasi, khetha uhlobo lokufinyelela okuyisibonelo Ukufinyelela okugcwele kuwo wonke ama-API wamafu.

    Isithombe-skrini
    Sakha umsebenzi wokuthumela ku-GKE ngaphandle kwama-plugin, i-SMS noma ukubhaliswa. Ake silunguze ngaphansi kwejakhethi kaJenkins

  4. Londoloza izinguquko zakho futhi uqalise isibonelo.

Uma i-VM isiqedile ukulayisha, xhuma kuyo nge-SSH futhi uqiniseke ukuthi ukuxhumana kwenzeka ngaphandle kwephutha. Sebenzisa umyalo:

gcloud alpha cloud-shell ssh

Uxhumo oluyimpumelelo lubukeka kanje
Sakha umsebenzi wokuthumela ku-GKE ngaphandle kwama-plugin, i-SMS noma ukubhaliswa. Ake silunguze ngaphansi kwejakhethi kaJenkins

Hambisa ku-GKE

Njengoba silwela ngazo zonke izindlela ukushintshela ngokuphelele ku-IaC (Ingqalasizinda Njengekhodi), amafayela ethu edokhu agcinwe ku-Git. Lokhu ngakolunye uhlangothi. Futhi ukuthunyelwa ku-kubernetes kuchazwa ifayela le-yaml, elisetshenziswa yilo msebenzi kuphela, wona ngokwawo ofana nekhodi. Lokhu kusuka ngakolunye uhlangothi. Ngokuvamile, ngisho, uhlelo yilo:

  1. Sithatha amanani okuguquguqukayo BUILD_VERSION futhi, ngokuzikhethela, amanani okuguquguqukayo okuzodluliswa kuwo ENV.
  2. Landa ifayela le-docker kusuka ku-Git.
  3. Khiqiza i-yaml ukuze isetshenziswe.
  4. Silayisha womabili lawa mafayela nge-scp kukhonsoli yamafu.
  5. Sakha isiqukathi lapho bese sisiphushela endaweni yokubhalisa yesiqukathi
  6. Sifaka ifayela lokuthunyelwa komthwalo ku-cuber.

Ake sicacise kabanzi. Sake saqala ukukhuluma ENV, bese sithi sidinga ukudlulisa amanani amapharamitha amabili: PARAM1 ΠΈ PARAM2. Sengeza umsebenzi wabo wokuthunyelwa, uhlobo - Ipharamitha yezintambo.

Isithombe-skrini
Sakha umsebenzi wokuthumela ku-GKE ngaphandle kwama-plugin, i-SMS noma ukubhaliswa. Ake silunguze ngaphansi kwejakhethi kaJenkins

Sizokhiqiza i-yaml ngokuqondisa kabusha okulula qalisa ukufayela. Kucatshangwa ukuthi unayo kufayela lakho le-docker PARAM1 ΠΈ PARAM2ukuthi igama lomthwalo lizoba uhlelo lokusebenza oluhle kakhulu, futhi isiqukathi esihlanganisiwe esinokusetshenziswa kwenguqulo eshiwo silele Irejista yesiqukathi ngisendleleni gcr.io/awesomeapp/awesomeapp-$BUILD_VERSIONkuphi $BUILD_VERSION isanda kukhethwa ohlwini lokudonsela phansi.

Ukufakwa kuhlu kweqembu

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

I-ejenti ye-Jenkins ngemuva kokuxhuma usebenzisa gcloud alpha cloud-shell ssh imodi yokusebenzisana ayitholakali, ngakho-ke sithumela imiyalo kukhonsoli yamafu sisebenzisa ipharamitha --umyalo.

Sihlanza ifolda yasekhaya kukhonsoli yefu kusuka kufayela le-docker elidala:

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

Beka i-dockerfile esanda kulandwa kufolda yasekhaya yekhonsoli yamafu usebenzisa i-scp:

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

Siqoqa, simaka futhi siphushele isiqukathi kurejista Yesitsha:

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 ngefayela lokuthumela. Sicela uqaphele ukuthi imiyalo engezansi isebenzisa amagama aqanjiwe eqoqo lapho ukuthunyelwa kwenzeka khona (iqoqo le-awsm) kanye negama lephrojekthi (awesome-project), lapho iqoqo 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, sivula okukhiphayo kwekhonsoli futhi sithemba ukubona ukuhlanganiswa okuphumelelayo kwesiqukathi.

Isithombe-skrini
Sakha umsebenzi wokuthumela ku-GKE ngaphandle kwama-plugin, i-SMS noma ukubhaliswa. Ake silunguze ngaphansi kwejakhethi kaJenkins

Bese-ke ukuthunyelwa ngempumelelo kwesitsha esihlanganisiwe

Isithombe-skrini
Sakha umsebenzi wokuthumela ku-GKE ngaphandle kwama-plugin, i-SMS noma ukubhaliswa. Ake silunguze ngaphansi kwejakhethi kaJenkins

Ngizibe ngamabomu lesi silungiselelo Ingress. Ngesizathu esisodwa esilula: uma usuyisethile umthwalo womsebenzi ngegama elinikeziwe, izohlala isebenza, kungakhathaliseki ukuthi kungakanani ukusetshenziswa ngaleli gama okwenzayo. Nokho, ngokuvamile, lokhu kungaphezu kancane komlando.

Esikhundleni seziphetho

Zonke lezi zinyathelo ezingenhla cishe bezingeke zenziwe, kodwa umane ufake i-plugin ye-Jenkins, i-muuulion yabo. Kodwa ngesizathu esithile angiwathandi ama-plugin. Awu, ngokunembayo, ngiphendukela kubo kuphela ngenxa yentshisekelo.

Futhi ngithanda ukungithathela isihloko esisha. Umbhalo ongenhla futhi uyindlela yokwabelana ngalokho engikutholile ngesikhathi ngixazulula inkinga echazwe ekuqaleni. Yabelana nalabo, njengaye, abangezona nhlobo izimpisi ezimbi kakhulu kuma-devops. Uma lokho engikutholile kusiza okungenani othile, ngizojabula.

Source: www.habr.com

Engeza amazwana