Em di GKE de bêyî pêvek, SMS an qeydkirinê peywirek bicîhkirinê diafirînin. Ka em li binê çakêtê Jenkins binêre

Hemî gava dest pê kir ku serokê tîmê yek ji tîmên pêşkeftina me ji me xwest ku em serîlêdana xweya nû, ya ku rojek berê hatî veqetandin, ceribandin. Min ew şand. Piştî nêzî 20 hûrdeman, daxwazek ji bo nûvekirina serîlêdanê hate wergirtin, ji ber ku tiştek pir hewce li wir hatibû zêdekirin. Min nû kir. Piştî çend saetên din ... baş e, hûn dikarin texmîn bikin ku paşê çi dest pê kir ...

Divê ez bipejirînim, ez pir tembel im (ma min berê ev yek qebûl nekir? Na?), û ji ber vê rastiyê ku rêberên tîmê gihîştina Jenkins, ku tê de hemî CI/CD hene, min fikirîn: bila ew wekî bi qasî ku ew dixwaze! Min henekek hat bîra min: masîyekî bide mirov û rojekê bixwe; ji kesekî re dibêjin Fed û ew ê tevahiya jiyana xwe Fed be. Û çû play tricks li ser kar, ku dê bikaribe konteynirek ku tê de serîlêdana her guhertoyek bi serfirazî hatî çêkirin li Kuber bicîh bike û her nirx jê re veguhezîne. ENV (bapîrê min, fîlolog, mamosteyê îngilîzî yê berê, niha piştî xwendina vê hevokê tiliya xwe li perestgeha xwe dizivire û pir bi eşkere li min dinêre).

Ji ber vê yekê, di vê notê de ez ê ji we re vebêjim ka ez çawa fêr bûm:

  1. Bi dînamîk karên li Jenkins ji karê xwe an ji karên din nûve bikin;
  2. Girêdana bi konsolê ewr (şêl Cloud) ji nodek bi nûnerê Jenkins ve hatî saz kirin;
  3. Barkirina xebatê li Google Kubernetes Engine bicîh bikin.


Bi rastî, ez, bê guman, hinekî bêaqil im. Tê texmîn kirin ku we bi kêmî ve beşek binesaziya di ewrê Google de heye, û, ji ber vê yekê, hûn bikarhênerê wê ne û, bê guman, we hesabek GCP heye. Lê ev têbînî ne ev e.

Ev pelika xapandina min a din e. Ez tenê dixwazim di rewşekê de notên weha binivîsim: Ez bi pirsgirêkek re rû bi rû bûm, min di destpêkê de nizanibû wê çawa çareser bikim, çareserî amade nebû google, ji ber vê yekê min ew perçe perçe google kir û di dawiyê de pirsgirêk çareser kir. Û ji bo ku di paşerojê de, gava ku ez ji bîr bikim ka min çawa kir, ne hewce ye ku ez her tiştî dîsa perçe perçe google bikim û bi hev re berhev bikim, ez ji xwe re pelên xapînok ên weha dinivîsim.

Disclaimer: 1. Nota “ji bo xwe”, ji bo rolê hatiye nivîsandin pratîka çêtirîn derbas nabe. Ez kêfxweş im ku di şîroveyan de vebijarkên "wê çêtir bûya ku bi vî rengî bihata kirin" dixwînim.
2. Heger beşa ku lê tê sepandin xwê tê hesibandin, wê hingê, mîna hemî notên min ên berê, ev yek jî çareseriyek xwê ya qels e.

Nûvekirina dînamîkî mîhengên kar li Jenkins

Ez pirsa we pêşbîn dikim: nûvekirina karê dînamîkî bi wê re çi heye? Bi destan nirxa pîvana rêzikê binivîse û hûn herin!

Ez bersivê didim: Bi rastî ez tembel im, ez jê hez nakim gava ku ew gilî dikin: Mişa, bicîhbûn têk diçe, her tişt çû! Hûn dest bi lêgerînê dikin, û di nirxa hin parametreyên destpêkirina peywirê de xeletiyek tîp heye. Ji ber vê yekê, ez tercîh dikim ku her tiştî bi qasî ku gengaz bikêr bikim. Ger gengaz be ku bikarhêner rasterast bi danasîna daneyan bi dayîna navnîşek nirxan a ku jê hilbijêrin asteng bike, wê hingê ez hilbijartinê organîze dikim.

Plan ev e: em li Jenkins karekî diafirînin, ku tê de, berî destpêkirinê, em dikarin guhertoyek ji navnîşê hilbijêrin, nirxan ji bo parametreyên ku bi navgîniya konteynerê re derbas bûne diyar bikin. ENV, dûv re ew konteynerê berhev dike û dixe nav Tomara Konteynerê. Dûv re ji wir konteynir di kuberê de tê avêtin wekî barê kar bi pîvanên ku di xebatê de hatine diyarkirin.

Em ê pêvajoya afirandin û sazkirina karekî li Jenkins nahesibînin, ev ji mijarê ye. Em ê texmîn bikin ku kar amade ye. Ji bo bicihanîna navnîşek nûvekirî ya bi versiyonan re, ji me re du tişt hewce ne: navnîşek çavkaniyek heyî bi hejmarên guhertoyên derbasdar ên pêşîn û guhêrbarek mîna Parametreya Hilbijartinê di peywirê de. Di mînaka me de, bila guhêrbar were nav kirin BUILD_VERSION, em ê bi berfirehî li ser nesekinin. Lê em ji nêz ve li navnîşa çavkaniyê binêrin.

Vebijarkên ew qas zêde nînin. Du tişt yekser hatin bîra min:

  • API-ya gihîştina dûr a ku Jenkins pêşkêşî bikarhênerên xwe dike bikar bînin;
  • Daxwaza naveroka peldanka depoya dûr (di rewşa me de ev JFrog Artifactory e, ku ne girîng e).

API-ya gihîştina dûr a Jenkins

Li gorî kevneşopiya hêja ya hatî damezrandin, ez tercîh dikim ku ji ravekirinên dirêj dûr bikevin.
Ez ê destûrê bidim xwe tenê wergera belaş a perçeyek paragrafa yekem rûpela yekem a belgeya API:

Jenkins API-ê ji bo gihîştina makîneya-xwendina dûr a fonksiyona wê peyda dike. <…> Gihîştina ji dûr ve bi şêwazek mîna REST tê pêşkêş kirin. Ev tê vê wateyê ku ji hemî taybetmendiyan re xalek têketinê tune, lê di şûna wê de URLek mîna ".../api/", li ku"..." tê wateya tişta ku jê re kapasîteyên API têne sepandin.

Bi gotineke din, ger peywira bicihkirinê ya ku em niha li ser diaxivin li berdest be http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_build, wê hingê bilbilên API-ê yên ji bo vê peywirê li wir hene http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_build/api/

Dûv re, bijartek me heye ku em bi çi şeklê encam bistînin. Ka em bala xwe bidin ser XML, ji ber ku API di vê rewşê de tenê dihêle fîlterkirin.

Werin em tenê biceribînin ku navnîşek hemî karan bi dest bixin. Em tenê bi navê meclîsê re eleqedar in (displayName) û encama wê (netîce):

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

Hatiye?

Naha werin em tenê wan rêvekirinên ku bi encamê diqedin fîlter bikin SERKETINÎ. Ka em argûman bikar bînin &jinavderxistin û wekî parametre em ê wê rê li nirxek ne wekhev derbas bikin SERKETINÎ. Yes Yes. Negatîfek ducarî daxuyaniyek e. Em her tiştê ku me eleqedar nake ji holê radike:

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

Dîmena navnîşa serketiyan
Em di GKE de bêyî pêvek, SMS an qeydkirinê peywirek bicîhkirinê diafirînin. Ka em li binê çakêtê Jenkins binêre

Welê, tenê ji bo kêfê, bila em pê ewle bin ku fîlter me nexapîne (fîlter qet derewan nakin!) û navnîşek yên "neserkeftî" nîşan bidin:

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

Dîmenê navnîşa yên neserkeftî
Em di GKE de bêyî pêvek, SMS an qeydkirinê peywirek bicîhkirinê diafirînin. Ka em li binê çakêtê Jenkins binêre

Lîsteya guhertoyên ji peldankek li ser serverek dûr

Rêyek duyemîn heye ku hûn navnîşek guhertoyan bistînin. Ez ji gihîştina Jenkins API-ê jî bêtir jê hez dikim. Welê, ji ber ku ger serîlêdan bi serfirazî hate çêkirin, ev tê vê wateyê ku ew hate pakkirin û di peldanka guncan de di depoyê de hate danîn. Mînakî, depoyek hilanîna xwerû ya guhertoyên xebatê yên sepanan e. Çawa. Were, em jê bipirsin ka çi guhertoyên li depoyê ne. Em ê peldanka dûr bixin, grep bikin û biqelînin. Ger kesek bi oneliner re eleqedar be, wê hingê ew di binê spoiler de ye.

Fermana yek rêz
Ji kerema xwe du tiştan bala xwe bidin: Ez hûrguliyên pêwendiyê di serî de derbas dikim û ez hewce nakim hemî guhertoyên ji peldankê, û ez tenê yên ku di nav mehekê de hatine afirandin hildibijêrim. Ferman biguhezînin ku li gorî rastî û hewcedariyên we werin:

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

Sazkirina kar û pelê veavakirina kar li Jenkins

Me çavkaniya lîsteya guhertoyan kifş kir. Werin em naha navnîşa encam di peywirê de bikin. Ji bo min, çareseriya eşkere ew bû ku di peywira avakirina serîlêdanê de gavekê lê zêde bikim. Pêngava ku dê bihata kirin ger encam bihata "serkeftin".

Mîhengên peywira meclîsê vekin û berbi jêr ve biçin. Li ser bişkokan bikirtînin: Pêngava avakirinê zêde bikin -> Pêngava şertî (yek). Di mîhengên gavê de, şertê hilbijêrin Rewşa avakirina heyî, nirxê danîn SERKETINÎ, çalakiya ku heke serketî were kirin Fermana şêlê bixebitîne.

Û niha beşa kêfê. Jenkins mîhengên kar di pelan de hilîne. Di formata XML de. Di rê de http://путь-до-задания/config.xml Li gorî vê yekê, hûn dikarin pelê veavakirinê dakêşin, li gorî hewcedariyê wê biguherînin û li cihê ku we lê girtiye vegerînin.

Bînin bîra xwe, me li jor li hev kir ku em ê ji bo navnîşa guhertoyan pîvanek çêbikin BUILD_VERSION?

Ka em pelê veavakirinê dakêşin û li hundurê wê binêre. Tenê ji bo ku hûn pê ewle bibin ku parametre li cîh û ji celebê xwestinê ye.

Screenshot di bin spoiler de.

Parçeya weya config.xml divê heman xuya bike. Ji bilî ku naveroka hêmana hilbijartî hîn winda ne
Em di GKE de bêyî pêvek, SMS an qeydkirinê peywirek bicîhkirinê diafirînin. Ka em li binê çakêtê Jenkins binêre

Piştrastin? Ew ew e, em skrîptek binivîsin ku heke avahî serketî be dê were darve kirin.
Skrîpt dê navnîşek guhertoyan werbigire, pelê veavakirinê dakêşîne, navnîşa guhertoyan li cîhê ku em hewce ne binivîsîne, û dûv re wê vegerîne. Erê. Ew rast e. Navnîşek guhertoyên XML-ê li cîhê ku jixwe navnîşek guhertoyan heye binivîsin (dê di pêşerojê de, piştî destpêkirina yekem a skrîptê be). Ez dizanim hîn jî li cîhanê temaşevanên tund ên vegotinên birêkûpêk hene. Ez ne aîdê wan im. Ji kerema xwe saz bikin xmlstarler li ser makîneya ku veavakirina wê were guherandin. Ji min re dixuye ku ev ne bihayek ew qas mezin e ku meriv ji guherandina XML bi karanîna sed dûr bixe.

Li jêr spoiler, ez koda ku rêzika jorîn bi tevahî pêk tîne pêşkêş dikim.

Navnîşek guhertoyan ji peldankek li ser pêşkêşkara dûr a mîhengê binivîsin

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

Ger hûn vebijarka wergirtina guhertoyên ji Jenkins tercîh dikin û hûn wekî min tembel in, wê hingê di binê spoiler de heman kod heye, lê navnîşek ji Jenkins:

Navnîşek guhertoyên ji Jenkins heya mîhengê binivîsin
Tenê vê yekê ji bîr mekin: navê meclîsa min ji jimareyek rêzik û jimareyek guhertoyê pêk tê, ku bi kolonek veqetandî ye. Li gorî vê yekê, awk beşa nehewce qut dike. Ji bo xwe, vê xetê li gorî hewcedariyên xwe biguhezînin.

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

Di teorîyê de, heke we koda ku li ser bingeha mînakên li jor hatî nivîsandin ceribandibe, wê hingê divê hûn di peywira bicîhkirinê de jixwe navnîşek dakêşanê ya bi guhertoyan hebin. Ew mîna di dîmendera binê spoilerê de ye.

Lîsteya guhertoyên rast temam kirin
Em di GKE de bêyî pêvek, SMS an qeydkirinê peywirek bicîhkirinê diafirînin. Ka em li binê çakêtê Jenkins binêre

Ger her tişt xebitî, wê hingê skrîptê bişopînin-pêç bikin Fermana şêlê bixebitîne û guhertinan hilînin.

Girêdana bi şêlê Cloud

Di konteyniran de kolektorên me hene. Em Ansible wekî amûra radestkirina serîlêdanê û rêveberê vesazkirinê bikar tînin. Li gorî vê yekê, dema ku dor tê avakirina konteyneran, sê vebijark têne bîra me: Docker li Docker saz bikin, Docker li ser makîneyek ku Ansible dixebitîne saz bikin, an jî konteyneran di konsolek ewr de ava bikin. Me qebûl kir ku di vê gotarê de li ser pêvekên ji bo Jenkins bêdeng bimînin. Bîrveanîn?

Min biryar da: baş e, ji ber ku konteynerên "ji qutîkê" dikarin di konsolê ewr de werin berhev kirin, wê hingê çima aciz dibin? Paqij bihêle, rast? Ez dixwazim konteynerên Jenkins di konsolê ewr de kom bikim, û dûv re wan ji wir bavêjim kuberê. Wekî din, Google di nav binesaziya xwe de kanalên pir dewlemend hene, ku dê bandorek bikêr li ser leza bicîhkirinê hebe.

Ji bo girêdana bi konsolê ewr re, hûn du tiştan hewce ne: gcloud û mafên gihîştina Google Cloud API ji bo mînaka VM ya ku dê heman girêdan bi wê re were çêkirin.

Ji bo kesên ku plan dikin ku qet ji Google cloudê neyên girêdan
Google destûrê dide îmkana neçalakkirina destûrnameya înteraktîf di karûbarên xwe de. Ev ê dihêle hûn ji makîneya qehweyê jî bi konsolê ve girêbidin, heke ew *nix-ê dimeşîne û bixwe konsolek heye.

Ger hewce be ku ez di çarçoveya vê têbînîyê de vê mijarê bi berfirehî vebêjim, di şîroveyan de binivîsim. Ger em têra dengan bigirin, ez ê li ser vê mijarê nûvekirinek binivîsim.

Rêya herî hêsan a dayîna mafan bi navgîniya webê ye.

  1. Mînaka VM-ê ya ku hûn ê paşê bi konsolê ewr ve girêdin rawestînin.
  2. Detayên Mînakê vekin û bikirtînin serrastkirin.
  3. Di binê rûpelê de, qada gihîştina nimûneyê hilbijêrin Gihîştina bêkêmasî ya hemî API-yên Cloud.

    Krîtîk
    Em di GKE de bêyî pêvek, SMS an qeydkirinê peywirek bicîhkirinê diafirînin. Ka em li binê çakêtê Jenkins binêre

  4. Guhertinên xwe hilînin û nimûneyê bidin destpêkirin.

Dema ku VM barkirin qediya, bi SSH ve pê ve girêdin û pê ewle bibin ku girêdan bêyî xeletiyek çêdibe. Ferman bikar bînin:

gcloud alpha cloud-shell ssh

Têkiliyek serkeftî tiştek bi vî rengî xuya dike
Em di GKE de bêyî pêvek, SMS an qeydkirinê peywirek bicîhkirinê diafirînin. Ka em li binê çakêtê Jenkins binêre

Ji GKE re bicîh bikin

Ji ber ku em bi her awayî hewl didin ku bi tevahî veguherînin IaC (Binesaziya wekî Kod), pelên me yên dokerê li Git têne hilanîn. Ev ji aliyekî ve ye. Û bicihkirina di kubernetes de ji hêla pelê yaml ve tête diyar kirin, ku tenê ji hêla vê peywirê ve tê bikar anîn, ku ew bixwe jî wekî kodê ye. Ev ji aliyê din ve ye. Bi gelemperî, ez dibêjim, plan ev e:

  1. Em nirxên guherbaran digirin BUILD_VERSION û, vebijarkî, nirxên guhêrbarên ku dê jê re derbas bibin ENV.
  2. Dockerfile ji Git dakêşin.
  3. Ji bo bicîhkirinê yaml biafirînin.
  4. Em van herdu pelan bi riya scp-ê li konsolê ewr bar dikin.
  5. Em li wir konteynirek çêdikin û dixin nav qeyda Konteyner
  6. Em pelê barkirina barkirinê li kuberê bicîh dikin.

Werin em bêtir diyar bin. Carekê me dest bi axaftinê kir ENV, wê hingê bifikirin ku em hewce ne ku nirxên du parameteran derbas bikin: PARAM1 и PARAM2. Em peywira wan ji bo bicîhkirinê lê zêde dikin, binivîsin - Parametreya String.

Krîtîk
Em di GKE de bêyî pêvek, SMS an qeydkirinê peywirek bicîhkirinê diafirînin. Ka em li binê çakêtê Jenkins binêre

Em ê bi beralîkirinek hêsan yaml biafirînin dengvegerîn pelê kirin. Tê texmîn kirin, bê guman, ku we di pelê dockerê de heye PARAM1 и PARAM2ku navê barkirinê dê bibe awesomeapp, û konteynera berhevkirî ya bi serîlêdana guhertoya diyarkirî tê de ye Registry konteynir wizeya erênî gcr.io/awesomeapp/awesomeapp-$BUILD_VERSIONko $BUILD_VERSION tenê ji navnîşa dakêşanê hate hilbijartin.

Lîsteya tîmê

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

Agent Jenkins piştî girêdana karanîna gcloud alpha cloud-shell ssh moda înteraktîf tune ye, ji ber vê yekê em bi karanîna parametreyê fermanan dişînin konsolê ewr --ferman.

Em peldanka malê ya di konsolê ewr de ji dockerfile kevn paqij dikin:

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

Dockerfila nû ya dakêşandî di peldanka malê ya konsolê ewr de bi karanîna scp bi cîh bikin:

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

Em konteynerê berhev dikin, etîket dikin û dişoxilînin qeyda konteyner:

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"

Em bi dosyaya belavkirinê re heman tiştî dikin. Ji kerema xwe bala xwe bidin ku emrên jêrîn navên xeyalî yên koma ku lê bicihkirin pêk tê bikar tînin (awsm-cluster) û navê projeyê (bi heybet-proje), cihê ku komik lê ye.

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"

Em peywirê dimeşînin, derketina konsolê vedikin û hêvî dikin ku em kombûna serketî ya konteynerê bibînin.

Krîtîk
Em di GKE de bêyî pêvek, SMS an qeydkirinê peywirek bicîhkirinê diafirînin. Ka em li binê çakêtê Jenkins binêre

Û dûv re jî bicihkirina serketî ya konteynera berhevkirî

Krîtîk
Em di GKE de bêyî pêvek, SMS an qeydkirinê peywirek bicîhkirinê diafirînin. Ka em li binê çakêtê Jenkins binêre

Min bi qestî guh neda mîhengê Ingress. Ji ber sedemek hêsan: gava ku hûn wê saz bikin barê kar bi navek hatî dayîn, ew ê di xebitandinê de bimîne, bêyî ku hûn bi vî navî çend bicîhkirinê pêk bînin. Belê, bi gelemperî, ev hinekî ji çarçoweya dîrokê wêdetir e.

Di şûna encam de

Hemî gavên jorîn belkî nedihatin kirin, lê tenê ji bo Jenkins, muuuliona wan, hin pêvek saz kirin. Lê ji ber hin sedeman ez ji pêvekan hez nakim. Belê, bi rastî, ez tenê ji bêhêvîbûnê serî li wan didim.

Û ez tenê dixwazim ji bo min mijarek nû hilbijêre. Nivîsa li jor di heman demê de rêyek e ji bo parvekirina dîtinên ku min di dema çareserkirina pirsgirêka ku di destpêkê de hatî behs kirin de çêkir. Bi yên ku mîna wî, di devops de qet ne gurê dirinde ne re parve bikin. Ger vedîtinên min bi kêmanî ji kesekî re bibin alîkar, ez ê kêfxweş bibim.

Source: www.habr.com

Add a comment