Waxaan ka abuurnaa GKE hawl geyn la'aan plugins, SMS ama diiwaangelin. Aynu ka eegno jaakadda Jenkins hoosteeda

Wax walba waxay bilowdeen markii kooxda hogaaminaysa mid ka mid ah kooxahayada horumarinta ay naga codsadeen inaan tijaabino codsigooda cusub, kaas oo la dhigay weel maalin ka hor. Waan soo dhejiyay Qiyaastii 20 daqiiqo ka dib, waxaa la helay codsi ah in la cusbooneysiiyo codsiga, sababtoo ah wax aad muhiim u ah ayaa lagu daray halkaas. Waan cusbooneysiiyay. Laba saacadood oo kale ka dib... si fiican, waxaad qiyaasi kartaa waxa bilaabay inuu dhaco xiga...

Waa inaan qiraa, caajis baan ahay (miyaanan tan hore u qiran? Maya?), Oo la siiyay xaqiiqda ah in hogaamiyaasha kooxdu ay galaangal u leeyihiin Jenkins, taas oo aan dhammaanteen CI / CD, waxaan u maleeyay: ha la geeyo sida inta uu rabo! Waxaan soo xusuustay kaftan: nin siiya kalluun, wuuna cuni doonaa maalin; u yeedh qofka quudi oo waa la quudin doonaa noloshiisa oo dhan. Oo tegey ku ciyaar khiyaamo shaqada, kaas oo awood u leh inuu geeyo weel ay ku jiraan codsiga nooc kasta oo si guul leh loo dhisay Kuber oo u wareejin kara wixii qiime ah ENV (Awoowgay, philologist, macalin Ingiriisi waagii hore, ayaa hadda fartiisa ku rogi jiray macbudkiisa oo si cad ayuu ii eegi jiray markaan akhriyo jumladan).

Haddaba, qoraalkan waxaan kuugu sheegi doonaa sidaan u bartay:

  1. Si firfircoon uga cusboonaysii shaqooyinka Jenkins shaqada lafteeda ama shaqooyinka kale;
  2. Ku xidh konsole daruureedka (Qofka daruurta) ee ka soo baxa noodhka leh wakiilka Jenkins ee rakibay;
  3. Ku dir culayska shaqada Google Kubernetes Engine.


Dhab ahaantii, anigu waxaan ahay, dabcan, inaan ahay qof aan caqli-gal ahayn. Waxaa loo maleynayaa inaad leedahay ugu yaraan qayb ka mid ah kaabayaasha Google Cloud, sidaa darteed, waxaad tahay isticmaalkeeda, dabcan, waxaad leedahay akoon GCP ah. Laakiin taasi maaha waxa qoraalkani ku saabsan yahay.

Tani waa xaashida khiyaamadayda xigta. Waxa kaliya oo aan rabaa in aan qoraalo noocaas ah ku qoro hal kiis: dhibaato ayaa i soo wajahday, markii hore ma aan garanayn sida loo xaliyo, xalku ma ahayn googled diyaarsan, markaa qaybo ka mid ah ayaan google-ka galiyay ugu dambeyntiina xaliyay dhibaatada. Iyo si mustaqbalka, markaan iloobo sidaan u sameeyay, maahan inaan wax walba mar kale google-ka gooyo oo aan isku daro, waxaan naftayda u qoraa xaashiyo khiyaamo ah.

Afeef: 1. Qoraalka waxaa loo qoray "anigayga", doorka tababarka ugu fiican ma khusayso. Waan ku faraxsanahay inaan akhriyo " way fiicnaan lahayd in sidan loo sameeyo" xulashooyinka faallooyinka.
2. Haddii qaybta la dabaqay ee qoraalka loo tixgeliyo milix, markaa, sida dhammaan qoraaladaydii hore, kani waa xal milix ah oo daciif ah.

Si firfircoon u cusboonaysiinta goobaha shaqada ee Jenkins

Waxaan sii arkay su'aashaada: maxay tahay cusboonaysiinta shaqada firfircoon ee ay la leedahay? Geli qiimaha halbeegga xargaha gacanta oo iska bax!

Waxaan ku jawaabay: Runtii caajis baan ahay, ma jecli marka ay cabanayaan: Misha, diritaanku waa burburay, wax walbaa way baxeen! Waxaad bilaabaysaa in aad eegto, oo waxa jira typo ah oo ku jira qiimaha qaar ka mid ah cabbirada bilaabista hawsha. Sidaa darteed, waxaan doorbidaa inaan wax walba u sameeyo sida ugu waxtarka badan ee suurtogalka ah. Haddii ay suurtagal tahay in laga hortago isticmaalaha inuu si toos ah u galo xogta adoo siinaya liiska qiyamka lagu dooranayo, ka dibna waxaan abaabulaa xulashada.

Qorshuhu waa kan: waxaan shaqo ka abuurnaa Jenkins, kaas oo, ka hor inta aan la bilaabin, aan ka dooran karno nooc ka mid ah liiska, qeexo qiyamka xuduudaha loo gudbiyay weelka iyada oo loo marayo ENV, ka dibna waxay ururisaa weelka oo ku riixdaa Diiwaanka Konteenarada. Kadibna halkaas weelka waxaa laga soo saaray cuber sida culeyska shaqada oo leh halbeegyada lagu qeexay shaqada.

Ma tixgelin doono habka abuurista iyo samaynta shaqo ee Jenkins, tani waa mawduuc ka baxsan. Waxaan u qaadan doonaa in hawshu diyaar tahay. Si loo hirgeliyo liis la cusboonaysiiyay oo leh noocyo, waxaan u baahanahay laba shay: liis il jira oo leh nambarada nooca saxda ah ee mudnaanta leh iyo doorsoome sida Halbeegga doorashada hawsha. Tusaalahayaga, doorsoomaha ha la magacaabo BUILD_VERSION, si faahfaahsan uga hadli mayno. Laakiin aan si qoto dheer u eegno liiska isha.

Ma jiraan doorashooyin badan. Laba shay ayaa isla markiiba maskaxda ku soo dhacay:

  • Isticmaal API-ga ka-helitaanka fog-fog ee Jenkins uu siinayo isticmaal-yaasheeda;
  • Codso waxa ku jira galka kaydka fog (xaaladkeena tani waa JFrog Artifctory, taas oo aan muhiim ahayn).

Jenkins Remote access API

Marka loo eego dhaqanka wanaagsan ee la aasaasay, waxaan doorbidayaa inaan iska ilaaliyo sharraxaad dheer.
Waxaan u ogolaan doonaa naftayda kaliya tarjumaad bilaash ah oo qayb ka mid ah cutubka koowaad bogga koowaad ee dukumeenti API:

Jenkins waxay siisaa API-ga mashiinka fog-fog ee la akhrin karo si uu u shaqeeyo. <…> Helitaanka fog waxaa lagu bixiyaa qaab nasasho u eg. Tani waxay ka dhigan tahay inaysan jirin hal meel oo laga soo galo dhammaan sifooyinka, laakiin taa beddelkeeda URL sida ".../api/", Halkee"..."macnaheedu waa shayga awooda API lagu dabaqay.

Si kale haddii loo dhigo, haddii hawsha dirista ee aan hadda ka hadlayno la heli karo http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_build, markaa API-ga hawshan ayaa laga heli karaa http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_build/api/

Marka xigta, waxaan haysanaa doorasho noocee ah si aan u helno wax soo saarka. Aynu diirada saarno XML, maadaama API-ku kaliya ogolaado shaandhaynta kiiskan.

Aan isku dayno inaan helno liiska dhammaan shaqooyinka socda. Waxaan xiisaynaa kaliya magaca golahabandhig Magacaiyo natiijadeedanatiijada):

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

Dhacay

Hadda aan shaandheyno kaliya kuwa ordaya ee natiijada ku dambeeya GO'AANKA. Aynu isticmaalno doodda &ka reeb oo halbeeg ahaan waxaynu u mari doonnaa dariiqa loo maro qiimihii aan la sinnayn GO'AANKA. Haa Haa. Laba taban waa hadal. Waxaan ka saaraynaa wax kasta oo aan dan noo ahayn:

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

Shaashadda liiska lagu guulaystay
Waxaan ka abuurnaa GKE hawl geyn la'aan plugins, SMS ama diiwaangelin. Aynu ka eegno jaakadda Jenkins hoosteeda

Hagaag, madadaalo ahaan, aynu hubinno in shaandhuhu aanu na khiyaanayn (filters weligood been!) Oo ay soo bandhigaan liiska "kuwa aan guulaysan":

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

Sawir-qaadista liiska kuwa aan guulaysan
Waxaan ka abuurnaa GKE hawl geyn la'aan plugins, SMS ama diiwaangelin. Aynu ka eegno jaakadda Jenkins hoosteeda

Liiska noocyada galka ku yaal server-ka fog

Waxaa jirta hab labaad oo lagu helo liiska noocyada. Waxaan ka helaa xitaa in ka badan gelitaanka Jenkins API. Waa hagaag, sababtoo ah haddii codsiga si guul leh loo dhisay, waxay la macno tahay in la baakadeeyay oo la geliyay kaydka galka ku habboon. Sida, kaydku waa kaydinta caadiga ah ee noocyada shaqada ee codsiyada. Sida. Hagaag, aynu waydiinno waxa noocyada kaydinta ku jira. Waan duuduubi doonaa, grep oo waanu garaaci doonaa galka fog. Haddii qof uu xiiseynayo oneliner, markaa waxay ku hoos jirtaa qaswadayaasha.

Hal xariiq amar
Fadlan ogow laba shay: Waxaan ku gudbiyaa faahfaahinta isku xirka madaxa oo uma baahni dhammaan noocyada galka, waxaanan doortaa kaliya kuwa la sameeyay bil gudaheed. Tafatir amarka si uu u waafajiyo xaqiiqadaada iyo baahiyahaaga:

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

Dejinta shaqooyinka iyo faylka qaabeynta shaqada ee Jenkins

Waxaan ogaanay isha liiska noocyada. Aynu hadda ku darno liiska natiijada hawsha. Aniga ahaan, xalka muuqda wuxuu ahaa in aan tallaabo ku darsado hawsha dhismaha codsiga. Tallaabada la fulin lahaa haddii natiijadu tahay "guul".

Fur goobaha hawsha isu-ururinta oo u rog dhanka hoose. Guji badhamada: Ku dar tallaabada dhismaha -> Tallaabo shuruudaysan (hal). Goobaha tallaabada, dooro xaaladda Heerka dhismaha hadda, deji qiimaha GO'AANKA, ficilka la samaynayo haddii lagu guuleysto Orod amarka qolofka.

Oo hadda qaybta madadaalada. Jenkins wuxuu ku kaydiyaa habaynta shaqada faylalka. Qaab XML ah. Waddada http://ΠΏΡƒΡ‚ΡŒ-Π΄ΠΎ-задания/config.xml Sidaa darteed, waxaad soo dejisan kartaa faylka qaabeynta, u habeyn kartaa sida loo baahdo oo dib ugu celi meesha aad ka heshay.

Xasuusnoow, waxaan kor ku heshiinay inaan sameyn doono halbeeg liiska noocyada BUILD_VERSION?

Aan soo dejinno faylka qaabeynta oo aan eegno gudaha. Kaliya si aad u hubiso in cabirku uu yaallo iyo nooca la rabo.

Shaashadda hoos-hoosaadka.

Qaybtaada config.xml waa inay isku mid u ekaadaan. Marka laga reebo in waxa ku jira cunsurka doorashadu ay maqan yihiin weli
Waxaan ka abuurnaa GKE hawl geyn la'aan plugins, SMS ama diiwaangelin. Aynu ka eegno jaakadda Jenkins hoosteeda

Ma hubtaa? Taasi waa, aynu qorno qoraal la fulin doono haddii dhismuhu guuleysto.
Qoraalku wuxuu heli doonaa liis noocyo kala duwan ah, soo dejiso faylka qaabeynta, ku qor liiska noocyada meesha aan u baahanahay, ka dibna dib u soo celi. Haa Waa sax. Ku qor liiska noocyada XML meesha ay horay uga jireen liiska noocyada (waxay ahaan doontaa mustaqbalka, ka dib bilawga ugu horreeya ee qoraalka). Waan ogahay inay weli jiraan taageereyaal ba'an oo tibaaxaha joogtada ah adduunka. Anigu ma lihi iyaga. Fadlan rakib xmlstarler mashiinka halkaas oo qaabeynta lagu hagaajin doono. Waxay ila tahay in tani aysan ahayn qiimo aad u weyn oo lagu bixiyo si looga fogaado tafatirka XML iyadoo la adeegsanayo sed.

Qaswada hoosteeda, waxaan soo bandhigayaa koodka fulinaya taxanaha kore oo dhan.

Ku qor liiska noocyada galka ku yaal server-ka fog ilaa habaynta

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

Haddii aad door bidayso ikhtiyaarka ah inaad ka hesho noocyada Jenkins oo aad tahay caajis sida aniga oo kale, ka dib qaswade hoostiisa waa kood isku mid ah, laakiin liis ka socda Jenkins:

Qor liis noocyada laga bilaabo Jenkins ilaa qaabaynta
Kaliya tan maskaxda ku hay: magaca golahaygu wuxuu ka kooban yahay lambar taxane ah iyo nambar nooc, oo ay kala soocaan xiidan. Sidaas awgeed, awk waxay gooysaa qaybta aan loo baahnayn. Laftaada, u beddel khadkan si aad ugu habboonaato baahiyahaaga.

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

Aragti ahaan, haddii aad tijaabisay koodka qoran ee ku salaysan tusaalooyinka sare, markaa hawsha dirista waa inaad horey u haysataa liis hoos-u-dhac ah oo leh noocyo. Waxay la mid tahay sawirka sawirka hoostiisa ee qaswadayaasha.

Liiska noocyada oo si sax ah loo dhameeyay
Waxaan ka abuurnaa GKE hawl geyn la'aan plugins, SMS ama diiwaangelin. Aynu ka eegno jaakadda Jenkins hoosteeda

Haddii wax waliba ay shaqeeyeen, ka dib koobi-ku dheji qoraalka Orod amarka qolofka oo badbaadi isbeddellada.

Ku xidhida qolofka Cloud

Waxaan haynaa kuwa wax aruuriya oo weel ku jira. Waxaan u isticmaalnaa suurtogalka ah qalab gudbinta codsiga iyo maamulaha qaabeynta. Sidaa darteed, marka ay timaado dhismaha weelasha, saddex doorasho ayaa maskaxda ku soo dhacaya: ku rakib Docker gudaha Docker, ku rakib Docker mashiinka ku shaqeeya macquulka ah, ama ku dhis weelasha konsolada daruuraha. Waxaan ku heshiinnay inaan ka aamusno plugins-ka Jenkins ee maqaalkan. Xusuusnow?

Waxaan go'aansaday: si fiican, maadaama weelasha "ka baxsan sanduuqa" lagu soo ururin karo konsolka daruuraha, markaa maxaad u dhibaysaa? nadiifi, sax? Waxaan rabaa in aan ku ururiyo weelasha Jenkins ee konsolka daruuraha, ka dibna aan ka soo saaro cuber-ka halkaas. Waxaa intaa dheer, Google wuxuu leeyahay kanaalo qani ah oo ka dhex jira kaabayaasha, taas oo saameyn faa'iido leh ku yeelan doonta xawaaraha dejinta.

Si aad ugu xidhid konsolka daruuraha, waxaad u baahan tahay laba shay: gcloud iyo helitaanka xuquuqaha Google Cloud API tusaale ahaan VM kaas oo isku xidhkan la samayn doono.

Kuwa qorsheynaya inay ku xidhmaan ma aha Google Cloud gabi ahaanba
Google waxa uu ogolaadaa suurtagalnimada in la joojiyo oggolaanshaha isdhexgalka ee adeegyadeeda. Tani waxay kuu ogolaaneysaa inaad ku xirto konsole xitaa mashiinka qaxwada, haddii uu socdo * nix oo uu leeyahay console laftiisa.

Haddii ay jirto baahi aan u qabo inaan arrintan si faahfaahsan uga hadlo qaabka qoraalkan, ku qor faallooyinka. Haddii aan helno codad ku filan, waxaan qori doonaa wax cusub mawduucan.

Habka ugu fudud ee lagu bixin karo xuquuqda waa iyada oo loo marayo interface interface.

  1. Jooji tusaalaha VM-ka kaas oo aad ka dib ku xidhi doonto konsolka daruuraha.
  2. Fur Faahfaahinta Tusaalaha oo guji hagaajiya.
  3. Xagga hoose ee bogga, dooro cabbirka gelitaanka tusaale ahaan Gelitaanka buuxa ee dhammaan Cloud APIs.

    Sawir-baadhis
    Waxaan ka abuurnaa GKE hawl geyn la'aan plugins, SMS ama diiwaangelin. Aynu ka eegno jaakadda Jenkins hoosteeda

  4. Keydi isbeddelladaada oo bilow tusaalaha.

Marka VM uu dhameeyo rarka, ku xidh SSH oo hubi in xidhiidhku u dhaco qalad la'aan. Adeegso amarka:

gcloud alpha cloud-shell ssh

Xidhiidhka guulaystay waxa uu u eeg yahay sidan
Waxaan ka abuurnaa GKE hawl geyn la'aan plugins, SMS ama diiwaangelin. Aynu ka eegno jaakadda Jenkins hoosteeda

U dir GKE

Maadaama aan ku dadaaleyno si kasta oo suurtagal ah in aan si buuxda ugu beddelno IaC (Kaabayaasha Xeer ahaan), faylashayada docker-ka waxaa lagu kaydiyaa Git. Tani waa dhinac. Iyo geynta kubernetes waxaa lagu qeexay faylka yaml, kaas oo loo isticmaalo hawshan oo kaliya, taas oo lafteedu sidoo kale la mid ah koodka. Tani waa dhanka kale. Guud ahaan, waxaan ula jeedaa, qorshuhu waa kan:

  1. Waxaan qaadanaa qiyamka doorsoomayaasha BUILD_VERSION iyo, optionally, qiyamka doorsoomayaasha in la dhex mari doono ENV.
  2. Ka soo deji dockerfile-ka Git.
  3. Samee yaml si loo geeyo
  4. Labadan faylal waxaan ku soo rarnaa scp-ga konsolka daruuraha.
  5. Waxaanu halkaas ka dhisnay weel oo ku riixnay diiwaanka Konteenarada
  6. Waxaan isticmaalnaa feylka geynta culeyska cuberka.

Aynu si gaar ah u sheegno. Mar aan ka hadalnay ENV, ka dibna ka soo qaad in aan u baahannahay in aan ka gudubno qiyamka laba qaybood: PARAM1 ΠΈ PARAM2. Waxaan ku darnaa hawshooda dirista, nooca - Halbeegga Xadhkaha.

Sawir-baadhis
Waxaan ka abuurnaa GKE hawl geyn la'aan plugins, SMS ama diiwaangelin. Aynu ka eegno jaakadda Jenkins hoosteeda

Waxaan soo saari doonaa yaml leh jiho fudud codso in la xareeyo. Waxa loo malaynayaa, dabcan, in aad ku jirto dockerfillkaaga PARAM1 ΠΈ PARAM2in magaca rarka uu noqon doono cajiibapp, iyo weelka la shiiday ee leh codsiga nooca la cayimay ayaa ku jira Diiwaanka weelasha jidka gcr.io/awesomeapp/awesomeapp-$BUILD_VERSIONhalkaas oo $BUILD_VERSION ayaa hadda laga doortay liiska hoos-u-dhaca.

Liiska kooxda

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

Wakiilka Jenkins ka dib marka la isku xiro isticmaalka gcloud alfa Cloud-shell ssh hab is-dhexgal lama heli karo, markaa waxaanu amarrada u dirnaa konsolka daruuraha anagoo adeegsanayna cabbirka --amar.

Waxaan ka nadiifineynaa galka guriga ee konsole-ka daruurta faylkii hore:

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

Geli dockerfile-ka cusub ee la soo dejiyay galka guriga ee konsolka daruuraha adoo isticmaalaya scp:

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

Waxaan aruurineynaa, calaamadeyneynaa oo ku riixeynaa weelka diiwaanka Konteenarada:

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"

Waxaan sidaas oo kale ku samaynaa faylka geynta. Fadlan la soco in amarrada hoose ay adeegsadaan magacyo khiyaali ah oo kutlada halkaas oo hawlgelintu ay ka dhacdo (awsm-cluster) iyo magaca mashruuca (cajiib-mashruuc), halka ay kooxdu ku taal.

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"

Waxaan wadnaa hawsha, fur furka soosaarka konsole waxaana rajeyneynaa inaan aragno kulanka guusha leh ee weelka.

Sawir-baadhis
Waxaan ka abuurnaa GKE hawl geyn la'aan plugins, SMS ama diiwaangelin. Aynu ka eegno jaakadda Jenkins hoosteeda

Ka dibna si guul leh u geynta weelka la isugu keenay

Sawir-baadhis
Waxaan ka abuurnaa GKE hawl geyn la'aan plugins, SMS ama diiwaangelin. Aynu ka eegno jaakadda Jenkins hoosteeda

Si ula kac ah ayaan u diiday goobta Ingress. Hal sabab oo fudud awgeed: mar aad dejisay culeyska shaqada Magac la siiyay, wuu sii shaqayn doonaa, iyadoon loo eegin inta la dirayo ee magacan wata. Waa hagaag, guud ahaan, tani waa wax yar oo ka baxsan baaxadda taariikhda.

Halkii gunaanadka

Dhammaan tillaabooyinka kor ku xusan waxay u badan tahay inaan la samayn karin, laakiin si fudud loogu rakibay xoogaa plugin ah Jenkins, muuulionkooda. Laakiin sabab qaar ka mid ah ma jecli plugins. Hagaag, si sax ah, waxaan ula dhaqmaa iyaga kaliya rajo beel.

Oo waxaan jeclahay inaan mowduuc cusub ii soo qaato. Qoraalka kore sidoo kale waa hab lagu wadaago natiijooyinka aan sameeyay markii aan xalinayey dhibka lagu tilmaamay bilowgii hore. La wadaag kuwa isaga oo kale ah, oo aan haba yaraatee ahayn yeey aad u daran. Haddii natiijadayda ay caawiso ugu yaraan qof, waan ku farxi doonaa.

Source: www.habr.com

Add a comment