Aħna noħolqu kompitu ta' skjerament fil-GKE mingħajr plugins, SMS jew reġistrazzjoni. Ejja nagħtu ħarsa taħt il-ġakketta ta’ Jenkins

Kollox beda meta l-mexxej tat-tim ta’ wieħed mit-timijiet tal-iżvilupp tagħna talabna nittestjaw l-applikazzjoni l-ġdida tagħhom, li kienet ġiet ikkontejnizzata l-ġurnata ta’ qabel. Poġġejtha. Wara madwar 20 minuta, waslet talba biex tiġi aġġornata l-applikazzjoni, għax hemm kienet ġiet miżjuda ħaġa ferm meħtieġa. Ġeddidt. Wara ftit sigħat oħra... tajjeb, tista' taqta' x'beda jiġri wara...

Ikolli nammetti, jien pjuttost għażżien (mhux ammettit dan qabel? Le?), u minħabba l-fatt li t-team leads għandhom aċċess għal Jenkins, li fih għandna CI/CD kollha, ħsibt: ħallih jiskjera bħala kemm irid hu! Ftakart f’ċajta: agħti ħuta raġel u jiekol għal ġurnata; ċempel persuna Fed u se jkun Fed ħajtu kollha. U marru tilgħab tricks fuq ix-xogħol, li jkun jista' juża kontenitur li jkun fih l-applikazzjoni ta' kwalunkwe verżjoni mibnija b'suċċess f'Kuber u jittrasferixxilu kwalunkwe valuri ENV (in-nannu tiegħi, filologu, għalliem tal-Ingliż fil-passat, issa kien idur subgħajh lejn it-tempju tiegħu u jħares lejja b’mod espressiv ħafna wara li jaqra din is-sentenza).

Allura, f'din in-nota se ngħidlek kif tgħallimt:

  1. Aġġorna b'mod dinamiku l-impjiegi f'Jenkins mill-impjieg innifsu jew minn impjiegi oħra;
  2. Qabbad mal-console tas-sħab (Cloud shell) minn node bl-aġent Jenkins installat;
  3. Skjerament ta' xogħol fuq Google Kubernetes Engine.


Fil-fatt, jien, ovvjament, qed inkun kemmxejn diżingenu. Huwa preżunt li għandek mill-inqas parti mill-infrastruttura fil-cloud ta 'Google, u, għalhekk, inti l-utent tagħha u, ovvjament, għandek kont tal-GCP. Iżda dan mhux dwar dan in-nota.

Din hija l-cheat sheet li jmiss tiegħi. Irrid nikteb biss noti bħal dawn f'każ wieħed: I kien iffaċċjat bi problema, inizjalment ma kontx naf kif issolviha, is-soluzzjoni ma kinitx googled lesta, għalhekk googledha f'partijiet u eventwalment solvut il-problema. U sabiex fil-futur, meta ninsa kif għamilt, ma jkollix għalfejn nerġa' nipprova kollox biċċa biċċa u niġbor flimkien, nikteb lili nnifsi tali cheat sheets.

Ċaħda ta 'responsabbiltà: 1. In-nota nkitbet "għalija nnifsi", għar-rwol aħjar prattika ma japplikax. Ninsab kuntent li naqra l-għażliet "kien ikun aħjar li tagħmel dan b'dan il-mod" fil-kummenti.
2. Jekk il-parti applikata tan-nota titqies bħala melħ, allura, bħan-noti kollha preċedenti tiegħi, din hija soluzzjoni dgħajfa tal-melħ.

Aġġornament dinamiku tas-settings tax-xogħol f'Jenkins

Nipprevedi l-mistoqsija tiegħek: x'għandu x'jaqsam magħha l-aġġornament dinamiku tax-xogħol? Daħħal il-valur tal-parametru string manwalment u off you go!

Inwieġeb: Jien tassew għażżien, ma nħobbx meta jilmentaw: Misha, l-iskjerament qed jiġġarraf, kollox marret! Tibda tfittex, u hemm typo fil-valur ta 'xi parametru tat-tnedija tal-kompitu. Għalhekk, nippreferi nagħmel kollox bl-aktar mod effiċjenti possibbli. Jekk huwa possibbli li l-utent jiġi evitat milli jdaħħal id-dejta direttament billi minflok jagħti lista ta 'valuri minn fejn jagħżel, allura norganizza l-għażla.

Il-pjan huwa dan: noħolqu xogħol f'Jenkins, li fih, qabel ma nibdew, nistgħu nagħżlu verżjoni mil-lista, nispeċifikaw valuri għall-parametri mgħoddija lill-kontenitur permezz ENV, imbagħad tiġbor il-kontenitur u timbottah fir-Reġistru tal-Kontenituri. Imbagħad minn hemm il-kontenitur jiġi mniedi f'cuber as ammont ta 'xogħol bil-parametri speċifikati fix-xogħol.

Aħna mhux se nikkunsidraw il-proċess tal-ħolqien u t-twaqqif ta 'impjieg f'Jenkins, dan huwa barra mis-suġġett. Se nassumu li l-kompitu huwa lest. Biex nimplimentaw lista aġġornata b'verżjonijiet, neħtieġu żewġ affarijiet: lista tas-sors eżistenti b'numri tal-verżjoni validi a priori u varjabbli bħal Parametru tal-għażla fil-kompitu. Fl-eżempju tagħna, ħalli l-varjabbli tkun imsemmija BUILD_VERSION, aħna mhux se noqogħdu fuqha fid-dettall. Imma ejja nagħtu ħarsa aktar mill-qrib lejn il-lista tas-sors.

M'hemmx daqshekk għażliet. Żewġ affarijiet immedjatament ġew f'moħħna:

  • Uża l-API Remote access li Jenkins toffri lill-utenti tagħha;
  • Itlob il-kontenut tal-folder tar-repożitorju remot (fil-każ tagħna dan huwa JFrog Artifactory, li mhuwiex importanti).

Jenkins Remote access API

Skont it-tradizzjoni eċċellenti stabbilita, nippreferi nevita spjegazzjonijiet twal.
Se nħalli lili nnifsi biss traduzzjoni b'xejn ta' biċċa mill-ewwel paragrafu l-ewwel paġna tad-dokumentazzjoni tal-API:

Jenkins jipprovdi API għal aċċess remot li jinqara mill-magni għall-funzjonalità tiegħu. <…> Aċċess mill-bogħod huwa offrut fi stil bħal REST. Dan ifisser li m'hemm l-ebda punt ta' dħul wieħed għall-karatteristiċi kollha, iżda minflok URL bħal ".../api/", Fejn "..." tfisser l-oġġett li għalih huma applikati l-kapaċitajiet tal-API.

Fi kliem ieħor, jekk il-kompitu tal-iskjerament li qed nitkellmu bħalissa huwa disponibbli fuq http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_build, allura l-sfafar tal-API għal dan il-kompitu huma disponibbli fuq http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_build/api/

Sussegwentement, għandna għażla f'liema forma nirċievu l-output. Ejja niffukaw fuq XML, peress li l-API tippermetti biss filtrazzjoni f'dan il-każ.

Ejja nippruvaw niksbu lista tal-ġirjiet kollha tax-xogħol. Aħna interessati biss fl-isem tal-assemblaġġ (displayName) u r-riżultat tagħha (tirriżulta):

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

Irriżulta?

Issa ejja niffiltraw biss dawk il-ġirjiet li jispiċċaw bir-riżultat SUĊĊESS. Ejja nużaw l-argument &eskludi u bħala parametru se ngħadduha t-triq għal valur mhux ugwali għal SUĊĊESS. Iva Iva. Negattiv doppju huwa dikjarazzjoni. Aħna neskludu dak kollu li ma jinteressana:

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

Screenshot tal-lista ta 'suċċess
Aħna noħolqu kompitu ta' skjerament fil-GKE mingħajr plugins, SMS jew reġistrazzjoni. Ejja nagħtu ħarsa taħt il-ġakketta ta’ Jenkins

Ukoll, biss għall-gost, ejja niżguraw li l-filtru ma qarraqx magħna (il-filtri qatt ma jigdbu!) U uri lista ta 'dawk "mingħajr suċċess":

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

Screenshot tal-lista ta' dawk li ma rnexxewx
Aħna noħolqu kompitu ta' skjerament fil-GKE mingħajr plugins, SMS jew reġistrazzjoni. Ejja nagħtu ħarsa taħt il-ġakketta ta’ Jenkins

Lista ta' verżjonijiet minn folder fuq server remot

Hemm it-tieni mod biex tikseb lista ta 'verżjonijiet. Jogħġobni saħansitra aktar milli naċċessa l-API Jenkins. Ukoll, għaliex jekk l-applikazzjoni nbniet b'suċċess, dan ifisser li kienet ippakkjata u mqiegħda fir-repożitorju fil-folder xieraq. Bħal, repożitorju huwa l-ħażna default tal-verżjonijiet tax-xogħol tal-applikazzjonijiet. Bħal. Ukoll, ejja nistaqsuh liema verżjonijiet huma fil-ħażna. Aħna ser curl, grep u awk il-folder remot. Jekk xi ħadd huwa interessat fl-oneliner, allura huwa taħt l-ispoiler.

Kmand ta' linja waħda
Jekk jogħġbok innota żewġ affarijiet: ngħaddi d-dettalji tal-konnessjoni fl-header u m'għandix bżonn il-verżjonijiet kollha mill-folder, u nagħżel biss dawk li nħolqu fi żmien xahar. Editja l-kmand biex jaqbel mar-realtajiet u l-bżonnijiet tiegħek:

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

Twaqqif ta 'impjiegi u fajl ta' konfigurazzjoni tax-xogħol f'Jenkins

Aħna dehret is-sors tal-lista tal-verżjonijiet. Ejja issa ninkorporaw il-lista li tirriżulta fil-kompitu. Għalija, is-soluzzjoni ovvja kienet li żżid pass fil-kompitu tal-bini tal-applikazzjoni. Il-pass li jkun esegwit jekk ir-riżultat kien "suċċess".

Iftaħ is-settings tal-kompitu tal-assemblaġġ u skrollja sal-qiegħ nett. Ikklikkja fuq il-buttuni: Żid pass tal-bini -> Pass kundizzjonali (wieħed). Fis-settings tal-pass, agħżel il-kundizzjoni Status attwali tal-bini, issettja l-valur SUĊĊESS, l-azzjoni li għandha titwettaq jekk tirnexxi Mexxi kmand tal-qoxra.

U issa l-parti divertenti. Jenkins jaħżen il-konfigurazzjonijiet tax-xogħol f'fajls. Fil-format XML. Tul it-triq http://путь-до-задания/config.xml Għaldaqstant, tista 'tniżżel il-fajl tal-konfigurazzjoni, teditjah kif meħtieġ u poġġih lura fejn sibt.

Ftakar, qbilna hawn fuq li se noħolqu parametru għal-lista tal-verżjonijiet BUILD_VERSION?

Ejja tniżżel il-fajl tal-konfigurazzjoni u agħti ħarsa ġewwa fih. Biss biex tiżgura li l-parametru huwa f'postu u tat-tip mixtieq.

Screenshot taħt spoiler.

Il-framment config.xml tiegħek għandu jidher l-istess. Ħlief li l-kontenut tal-element tal-għażliet għadu nieqes
Aħna noħolqu kompitu ta' skjerament fil-GKE mingħajr plugins, SMS jew reġistrazzjoni. Ejja nagħtu ħarsa taħt il-ġakketta ta’ Jenkins

Żgur? Dak hu, ejja niktbu script li se jiġi esegwit jekk il-bini jirnexxi.
L-iskrittura se tirċievi lista tal-verżjonijiet, niżżel il-fajl tal-konfigurazzjoni, ikteb il-lista tal-verżjonijiet fiha fil-post li għandna bżonn, u mbagħad poġġiha lura. Iva. Hekk hu. Ikteb lista ta 'verżjonijiet fl-XML fil-post fejn diġà hemm lista ta' verżjonijiet (se jkun fil-futur, wara l-ewwel tnedija ta 'l-iskrittura). Naf li għad hemm fannijiet ħarxa tal-espressjonijiet regolari fid-dinja. Jien ma nappartjenix lilhom. Jekk jogħġbok installa xmlstarler lill-magna fejn il-konfigurazzjoni se tiġi editjata. Jidhirli li dan mhuwiex prezz daqshekk kbir li trid tħallas biex tevita l-editjar ta 'XML bl-użu ta' sed.

Taħt l-ispoiler, nippreżenta l-kodiċi li twettaq is-sekwenza ta 'hawn fuq fl-intier tagħha.

Ikteb lista ta 'verżjonijiet minn folder fuq is-server remot għall-konfigurazzjoni

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

Jekk tippreferi l-għażla li tikseb verżjonijiet minn Jenkins u int għażżien daqsi, allura taħt l-ispoiler hemm l-istess kodiċi, iżda lista minn Jenkins:

Ikteb lista ta 'verżjonijiet minn Jenkins għall-konfigurazzjoni
Żomm dan f'moħħok: l-isem tal-assemblaġġ tiegħi jikkonsisti f'numru ta' sekwenza u numru tal-verżjoni, separati minn kolon. Għaldaqstant, awk jaqta 'l-parti mhux meħtieġa. Għalik innifsek, ibdel din il-linja biex taqbel mal-bżonnijiet tiegħek.

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

Fit-teorija, jekk ittestjajt il-kodiċi miktub ibbażat fuq l-eżempji ta 'hawn fuq, allura fil-kompitu ta' skjerament diġà għandu jkollok lista drop-down b'verżjonijiet. Huwa bħal fil-screenshot taħt l-ispoiler.

Lista ta' verżjonijiet mimlija b'mod korrett
Aħna noħolqu kompitu ta' skjerament fil-GKE mingħajr plugins, SMS jew reġistrazzjoni. Ejja nagħtu ħarsa taħt il-ġakketta ta’ Jenkins

Jekk kollox ħadem, imbagħad kopja-pejst l-iskrittura ġo Mexxi kmand tal-qoxra u ssalva l-bidliet.

Konnessjoni mal-qoxra tas-Cloud

Għandna kolletturi f'kontenituri. Aħna nużaw Ansible bħala l-għodda tal-kunsinna tal-applikazzjoni u l-maniġer tal-konfigurazzjoni tagħna. Għaldaqstant, meta niġu għall-bini ta’ kontenituri, jiġu f’moħħna tliet għażliet: tinstalla Docker f’Docker, tinstalla Docker fuq magna li tħaddem Ansible, jew tibni kontenituri f’console tal-cloud. Aħna qbilna li nibqgħu siekta dwar plugins għal Jenkins f'dan l-artikolu. Tiftakar?

Iddeċidejt: ukoll, peress li l-kontenituri "barra mill-kaxxa" jistgħu jinġabru fil-console tas-sħab, allura għaliex jolqot? Żommha nadifa, hux? Irrid niġbor kontenituri Jenkins fil-console tas-sħab, u mbagħad inniedihom fil-cuber minn hemm. Barra minn hekk, Google għandha kanali sinjuri ħafna fl-infrastruttura tagħha, li se jkollhom effett ta 'benefiċċju fuq il-veloċità tal-iskjerament.

Biex tikkonnettja mal-console tal-cloud, għandek bżonn żewġ affarijiet: gcloud u drittijiet ta’ aċċess għal Google Cloud API għall-istanza VM li magħha se ssir din l-istess konnessjoni.

Għal dawk li jippjanaw li jgħaqqdu xejn minn Google cloud
Google tippermetti l-possibbiltà li tiddiżattiva l-awtorizzazzjoni interattiva fis-servizzi tagħha. Dan jippermettilek tikkonnettja mal-console anke minn magna tal-kafè, jekk tkun qed taħdem * nix u għandha console stess.

Jekk hemm bżonn li nkopri din il-kwistjoni f'aktar dettall fil-qafas ta 'din in-nota, ikteb fil-kummenti. Jekk nikbru biżżejjed voti, nikteb aġġornament dwar dan is-suġġett.

L-eħfef mod biex jingħataw drittijiet huwa permezz tal-interface tal-web.

  1. Waqqaf l-istanza VM li sussegwentement tikkonnettja mal-console tal-cloud.
  2. Iftaħ id-Dettalji tal-Istanza u kklikkja temenda.
  3. Fil-qiegħ nett tal-paġna, agħżel l-ambitu tal-aċċess tal-istanza Aċċess sħiħ għall-APIs kollha tal-Cloud.

    Screenshot
    Aħna noħolqu kompitu ta' skjerament fil-GKE mingħajr plugins, SMS jew reġistrazzjoni. Ejja nagħtu ħarsa taħt il-ġakketta ta’ Jenkins

  4. Issejvja l-bidliet tiegħek u tniedi l-istanza.

Ladarba l-VM tkun spiċċat it-tagħbija, qabbad magħha permezz ta 'SSH u kun żgur li l-konnessjoni sseħħ mingħajr żball. Uża l-kmand:

gcloud alpha cloud-shell ssh

Konnessjoni b'suċċess tidher xi ħaġa bħal din
Aħna noħolqu kompitu ta' skjerament fil-GKE mingħajr plugins, SMS jew reġistrazzjoni. Ejja nagħtu ħarsa taħt il-ġakketta ta’ Jenkins

Skjerat għal GKE

Peress li qed nistinkaw b'kull mod possibbli biex naqilbu kompletament għal IaC (Infrastucture as a Code), il-fajls docker tagħna huma maħżuna f'Git. Dan huwa minn naħa waħda. U l-iskjerament f'kubernetes huwa deskritt minn fajl yaml, li jintuża biss minn dan il-kompitu, li huwa stess huwa wkoll bħal kodiċi. Dan min-naħa l-oħra. B'mod ġenerali, irrid ngħid, il-pjan huwa dan:

  1. Nieħdu l-valuri tal-varjabbli BUILD_VERSION u, b'mod fakultattiv, il-valuri tal-varjabbli li se jiġu mgħoddija ENV.
  2. Niżżel id-dockerfile minn Git.
  3. Iġġenera yaml għall-iskjerament.
  4. Aħna ntellgħu dawn iż-żewġ fajls permezz ta' scp fuq il-console tal-cloud.
  5. Nibnu kontenitur hemmhekk u nimbottawh fir-reġistru tal-Kontenituri
  6. Aħna napplikaw il-fajl tal-iskjerament tat-tagħbija għall-cuber.

Ejja nkunu aktar speċifiċi. Ladarba bdejna nitkellmu dwar ENV, imbagħad ejja ngħidu li għandna bżonn ngħaddu l-valuri ta 'żewġ parametri: PARAM1 и PARAM2. Aħna nżidu l-kompitu tagħhom għall-iskjerament, ittajpja - Parametru String.

Screenshot
Aħna noħolqu kompitu ta' skjerament fil-GKE mingħajr plugins, SMS jew reġistrazzjoni. Ejja nagħtu ħarsa taħt il-ġakketta ta’ Jenkins

Aħna se niġġeneraw yaml b'direzzjoni mill-ġdid sempliċi miss għall-fajl. Huwa preżunt, ovvjament, li għandek fid-dockerfile tiegħek PARAM1 и PARAM2li l-isem tat-tagħbija se jkun awesomeapp, u l-kontenitur immuntat bl-applikazzjoni tal-verżjoni speċifikata tinsab fi Reġistru tal-kontejners fit-triq gcr.io/awesomeapp/awesomeapp-$BUILD_VERSIONfejn $BUILD_VERSION ġiet magħżula biss mil-lista li tinżel.

Elenkar tat-tim

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 aġent wara l-konnessjoni bl-użu gcloud alpha cloud-shell ssh modalità interattiva mhix disponibbli, għalhekk aħna nibagħtu kmandi lill-console sħaba billi tuża l-parametru --kmand.

Aħna naddaf il-folder tad-dar fil-console tas-sħab mid-dockerfile l-antik:

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

Poġġi d-dockerfile li għadu kif tniżżel fil-folder tad-dar tal-console tal-cloud billi tuża scp:

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

Aħna niġbru, tikketta u nimbottaw il-kontenitur għar-reġistru tal-Kontenituri:

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"

Aħna nagħmlu l-istess bil-fajl tal-iskjerament. Jekk jogħġbok innota li l-kmandi hawn taħt jużaw ismijiet fittizji tal-cluster fejn iseħħ l-iskjerament (awsm-cluster) u l-isem tal-proġett (proġett tal-biża), fejn jinsab il-cluster.

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"

Aħna nmexxu l-kompitu, niftħu l-output tal-console u nittamaw li naraw l-assemblaġġ b'suċċess tal-kontenitur.

Screenshot
Aħna noħolqu kompitu ta' skjerament fil-GKE mingħajr plugins, SMS jew reġistrazzjoni. Ejja nagħtu ħarsa taħt il-ġakketta ta’ Jenkins

U mbagħad l-iskjerament b'suċċess tal-kontenitur immuntat

Screenshot
Aħna noħolqu kompitu ta' skjerament fil-GKE mingħajr plugins, SMS jew reġistrazzjoni. Ejja nagħtu ħarsa taħt il-ġakketta ta’ Jenkins

Injorajt deliberatament is-setting Ingress. Għal raġuni waħda sempliċi: ladarba twaqqafha ammont ta 'xogħol b'isem partikolari, se jibqa' operattiv, irrispettivament minn kemm twettaq skjeramenti b'dan l-isem. Ukoll, b'mod ġenerali, dan huwa ftit lil hinn mill-ambitu tal-istorja.

Minflok il-konklużjonijiet

Il-passi kollha ta 'hawn fuq probabbilment ma setgħux isiru, iżda sempliċement installat xi plugin għal Jenkins, il-muuulion tagħhom. Imma għal xi raġuni ma nħobbx il-plugins. Ukoll, b'mod aktar preċiż, nirrikorri għalihom biss b'disprament.

U nixtieq nagħmel xi suġġett ġdid għalija. It-test t'hawn fuq huwa wkoll mod kif naqsam is-sejbiet li għamilt waqt li ssolvi l-problema deskritta fil-bidu nett. Aqsam ma’ dawk li bħalu m’huma xejn lupu qalil fid-devops. Jekk is-sejbiet tiegħi jgħinu għall-inqas lil xi ħadd, inkun kuntent.

Sors: www.habr.com

Żid kumment