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:
- Vuselela ngokunamandla imisebenzi ku-Jenkins kusukela emsebenzini ngokwawo noma kweminye imisebenzi;
- Xhuma kukhonsoli yefu (igobolondo lamafu) kusuka endaweni ene-ejenti ye-Jenkins efakiwe;
- 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
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
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
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
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
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
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.
- Misa isibonelo se-VM lapho uzoxhumeka khona kukhonsoli yamafu.
- Vula imininingwane ye-Instance bese uchofoza Hlela.
- Phansi kwekhasi, khetha uhlobo lokufinyelela okuyisibonelo Ukufinyelela okugcwele kuwo wonke ama-API wamafu.
Isithombe-skrini
- 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
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:
- Sithatha amanani okuguquguqukayo BUILD_VERSION futhi, ngokuzikhethela, amanani okuguquguqukayo okuzodluliswa kuwo ENV.
- Landa ifayela le-docker kusuka ku-Git.
- Khiqiza i-yaml ukuze isetshenziswe.
- Silayisha womabili lawa mafayela nge-scp kukhonsoli yamafu.
- Sakha isiqukathi lapho bese sisiphushela endaweni yokubhalisa yesiqukathi
- 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
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
Bese-ke ukuthunyelwa ngempumelelo kwesitsha esihlanganisiwe
Isithombe-skrini
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