Nou kreye yon travay deplwaman nan GKE san grefon, SMS oswa enskripsyon. Ann pran yon ti gade anba jakèt Jenkins la

Tout bagay te kòmanse lè dirijan ekip youn nan ekip devlopman nou yo te mande nou pou teste nouvo aplikasyon yo a, ki te nan kontenè jou anvan an. Mwen poste li. Apre apeprè 20 minit, yo te resevwa yon demann pou mete ajou aplikasyon an, paske yo te ajoute yon bagay ki nesesè anpil. Mwen renouvle. Apre yon lòt dezèdtan... byen, ou ka devine sa ki te kòmanse rive apre...

Mwen dwe admèt, mwen se byen parese (èske mwen pa admèt sa pi bonè? Non?), ak bay lefèt ke ekip dirije yo gen aksè a Jenkins, nan ki nou gen tout CI / CD, mwen te panse: kite l deplwaye kòm anpil jan li vle! Mwen sonje yon blag: bay yon nonm yon pwason epi li pral manje pou yon jou; rele yon moun Fed epi li pral Fed tout lavi li. Epi li ale jwe ke trik nouvèl sou travay la, ki ta kapab deplwaye yon veso ki gen aplikasyon an nan nenpòt vèsyon ki gen siksè bati nan Kuber epi transfere nenpòt valè nan li ENV (Granpapa mwen, yon filològ, yon pwofesè angle nan tan lontan, kounye a ta vire dwèt li nan tanp li epi gade m trè ekspresyon apre li fin li fraz sa a).

Se konsa, nan nòt sa a mwen pral di ou ki jan mwen te aprann:

  1. Aktyalizasyon dinamik travay nan Jenkins nan travay li menm oswa nan lòt travay;
  2. Konekte nan konsole nwaj la (Cloud shell) soti nan yon ne ak ajan Jenkins enstale;
  3. Deplwaye kantite travay nan Google Kubernetes Engine.


An reyalite, mwen menm, nan kou, yo te yon ti jan malen. Li sipoze ke ou gen omwen yon pati nan enfrastrikti nan nwaj Google la, epi, Se poutèt sa, ou se itilizatè li yo epi, nan kou, ou gen yon kont GCP. Men, se pa sa nòt sa a sou.

Sa a se pwochen fèy cheat mwen an. Mwen vle sèlman ekri nòt sa yo nan yon sèl ka: mwen te fè fas ak yon pwoblèm, mwen okòmansman pa t 'konnen ki jan yo rezoud li, solisyon an pa te googled pare-fè, se konsa mwen googled li nan pati ak evantyèlman rezoud pwoblèm nan. Se konsa ke nan lavni an, lè mwen bliye ki jan mwen te fè li, mwen pa bezwen google tout bagay ankò moso pa moso epi konpile li ansanm, mwen ekri tèt mwen tankou fèy tronpe.

Limit responsabilite nou: 1. Yo te ekri nòt la "pou tèt mwen", pou wòl la pi bon pratik pa aplike. Mwen kontan li opsyon "li ta pi bon pou fè li nan fason sa a" nan kòmantè yo.
2. Si yo aplike pati nan nòt la konsidere kòm sèl, lè sa a, tankou tout nòt anvan mwen, yon sèl sa a se yon solisyon sèl fèb.

Dinamik mete ajou anviwònman travay nan Jenkins

Mwen prevwa kesyon ou a: kisa aktyalizasyon travay dinamik gen pou wè ak li? Antre valè paramèt fisèl la manyèlman epi ale!

Mwen reponn: Mwen vrèman parese, mwen pa renmen lè yo plenyen: Misha, deplwaman an ap kraze, tout bagay ale! Ou kòmanse gade, epi gen yon typo nan valè a nan kèk paramèt lansman travay. Se poutèt sa, mwen pito fè tout bagay kòm efikas ke posib. Si li posib pou anpeche itilizatè a antre done dirèkteman pa bay olye de yon lis valè yo chwazi nan, Lè sa a, mwen òganize seleksyon an.

Plan an se sa a: nou kreye yon travay nan Jenkins, nan ki, anvan lanse, nou ta ka chwazi yon vèsyon nan lis la, presize valè pou paramèt pase nan veso a atravè. ENV, Lè sa a, li kolekte veso a epi pouse li nan Rejis Veso a. Lè sa a, soti nan gen veso a te lanse nan cuber kòm kantite travay ak paramèt yo espesifye nan travay la.

Nou pa pral konsidere pwosesis pou kreye ak mete kanpe yon travay nan Jenkins, sa a pa sijè. Nou pral asime ke travay la pare. Pou aplike yon lis ajou ak vèsyon, nou bezwen de bagay: yon lis sous ki egziste deja ak nimewo vèsyon a priori valab ak yon varyab tankou Paramèt chwa nan travay la. Nan egzanp nou an, kite varyab la dwe nonmen non BUILD_VERSION, nou pa pral rete sou li an detay. Men, an n pran yon gade pi pre nan lis sous la.

Pa gen anpil opsyon. De bagay imedyatman te vin nan tèt ou:

  • Sèvi ak API aksè Remote ke Jenkins ofri itilizatè li yo;
  • Mande sa ki nan katab repozitwa aleka (nan ka nou an sa a se JFrog Artifactory, ki pa enpòtan).

Jenkins Remote access API

Dapre tradisyon ekselan etabli a, mwen ta prefere evite eksplikasyon long.
Mwen pral pèmèt tèt mwen sèlman yon tradiksyon gratis nan yon moso nan premye paragraf la premye paj dokiman API:

Jenkins bay yon API pou aksè aleka machin lizib nan fonksyonalite li yo. <…> Aksè Remote yo ofri nan yon style ki sanble ak REST. Sa vle di ke pa gen yon sèl pwen antre nan tout karakteristik, men olye de yon URL tankou ".../api/", Ki kote"..." vle di objè kote kapasite API yo aplike.

Nan lòt mo, si travay deplwaman nou ap pale kounye a disponib nan http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_build, Lè sa a, sifle API pou travay sa a disponib nan http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_build/api/

Apre sa, nou gen yon chwa nan ki fòm yo resevwa pwodiksyon an. Ann konsantre sou XML, paske API a sèlman pèmèt filtraj nan ka sa a.

Ann jis eseye jwenn yon lis tout travay kouri. Nou enterese sèlman nan non asanble a (displayName) ak rezilta li (lakòz):

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

Sa rive?

Koulye a, kite a filtre sèlman sa yo kouri ki fini ak rezilta a Siksè. Ann sèvi ak agiman an & ekskli epi kòm yon paramèt nou pral pase li chemen an nan yon valè ki pa egal a Siksè. Wi Wi. Yon doub negatif se yon deklarasyon. Nou eskli tout bagay ki pa enterese nou:

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

Ekran nan lis la nan siksè
Nou kreye yon travay deplwaman nan GKE san grefon, SMS oswa enskripsyon. Ann pran yon ti gade anba jakèt Jenkins la

Oke, jis pou plezi, se pou nou asire w ke filtè a pa t 'tronpe nou (filtè pa janm bay manti!) epi montre yon lis "sans siksè":

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

Ekran nan lis la ki pa gen siksè
Nou kreye yon travay deplwaman nan GKE san grefon, SMS oswa enskripsyon. Ann pran yon ti gade anba jakèt Jenkins la

Lis vèsyon ki sòti nan yon katab sou yon sèvè aleka

Gen yon dezyèm fason pou jwenn yon lis vèsyon. Mwen renmen li menm plis pase aksè Jenkins API la. Oke, paske si aplikasyon an te bati avèk siksè, sa vle di li te pake epi yo mete l nan repozitwa a nan katab ki apwopriye a. Tankou, yon depo se depo default nan vèsyon k ap travay nan aplikasyon yo. Tankou. Oke, an n mande l 'ki vèsyon yo nan depo. Nou pral pli, grep ak awk katab la aleka. Si nenpòt moun ki enterese nan oneliner la, Lè sa a, li se anba spoiler la.

Yon lòd liy
Tanpri sonje de bagay: mwen pase detay koneksyon yo nan header la epi mwen pa bezwen tout vèsyon yo nan katab la, epi mwen chwazi sèlman sa yo ki te kreye nan yon mwa. Edite kòmandman an selon reyalite ou ak bezwen ou yo:

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

Mete kanpe travay ak fichye konfigirasyon travay nan Jenkins

Nou kalkile sous la nan lis vèsyon an. Koulye a, ann enkòpore lis la ki kapab lakòz nan travay la. Pou mwen, solisyon an evidan se te ajoute yon etap nan travay la bati aplikasyon an. Etap la ki ta dwe egzekite si rezilta a te "siksè".

Louvri paramèt travay asanble yo epi woule anba a anpil. Klike sou bouton yo: Ajoute etap konstriksyon -> Etap kondisyonèl (yon sèl). Nan anviwònman etap yo, chwazi kondisyon an Estati aktyèl konstriksyon, mete valè a Siksè, aksyon an dwe fèt si siksè Kouri lòd shell.

Epi, koulye a pati nan plezi. Jenkins estoke konfigirasyon travay nan dosye. Nan fòma XML. Sou wout la http://путь-до-задания/config.xml An konsekans, ou ka telechaje fichye konfigirasyon an, modifye li jan sa nesesè epi mete l tounen kote ou te resevwa li.

Sonje byen, nou te dakò pi wo a ke nou pral kreye yon paramèt pou lis vèsyon an BUILD_VERSION?

Ann telechaje fichye konfigirasyon an epi gade andedan li. Jis asire w ke paramèt la an plas ak nan kalite a vle.

Ekran anba spoiler.

Fragman config.xml ou a ta dwe sanble. Eksepte ke sa ki nan eleman chwa yo manke ankò
Nou kreye yon travay deplwaman nan GKE san grefon, SMS oswa enskripsyon. Ann pran yon ti gade anba jakèt Jenkins la

Èske w sèten? Sa a, se pou yo ekri yon script ki pral egzekite si bati a gen siksè.
Script la pral resevwa yon lis vèsyon, telechaje fichye a konfigirasyon, ekri lis vèsyon an nan li nan plas nou bezwen an, ak Lè sa a, mete l 'tounen. Wi. Se vre. Ekri yon lis vèsyon nan XML nan plas la kote gen deja yon lis vèsyon (yo pral nan lavni an, apre premye lansman script la). Mwen konnen gen toujou fanatik feròs nan ekspresyon regilye nan mond lan. Mwen pa fè pati yo. Tanpri enstale xmlstarler nan machin nan kote yo pral modifye konfigirasyon an. Li sanble m 'ke sa a se pa tankou yon gwo pri yo peye pou evite koreksyon XML lè l sèvi avèk sed.

Anba beke a, mwen prezante kòd la ki fè sekans ki anwo a nan antye li yo.

Ekri yon lis vèsyon ki soti nan yon katab sou sèvè aleka nan konfigirasyon an

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

Si ou prefere opsyon pou jwenn vèsyon nan men Jenkins epi ou parese menm jan ak mwen, Lè sa a, anba spoiler la se menm kòd la, men yon lis soti nan Jenkins:

Ekri yon lis vèsyon soti nan Jenkins nan konfigirasyon an
Jis kenbe sa a nan tèt ou: non asanble mwen an konsiste de yon nimewo sekans ak yon nimewo vèsyon, separe pa yon kolon. An konsekans, awk koupe pati ki pa nesesè. Pou tèt ou, chanje liy sa a selon bezwen ou yo.

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

Nan teyori, si ou te teste kòd la ekri ki baze sou egzanp ki anwo yo, Lè sa a, nan travay la deplwaman ou ta dwe deja gen yon lis drop-down ak vèsyon. Se tankou nan ekran an anba spoiler la.

Lis vèsyon kòrèkteman ranpli
Nou kreye yon travay deplwaman nan GKE san grefon, SMS oswa enskripsyon. Ann pran yon ti gade anba jakèt Jenkins la

Si tout bagay te travay, Lè sa a, kopye-kole script la nan Kouri lòd shell epi sove chanjman yo.

Konekte ak Cloud shell

Nou gen pèseptè nan resipyan. Nou itilize Ansible kòm zouti livrezon aplikasyon nou an ak manadjè konfigirasyon. An konsekans, lè li rive bati resipyan, twa opsyon vin nan tèt ou: enstale Docker nan Docker, enstale Docker sou yon machin ki kouri Ansible, oswa bati resipyan nan yon konsole nwaj. Nou te dakò pou nou rete an silans sou grefon pou Jenkins nan atik sa a. Sonje?

Mwen deside: byen, depi kontenè "soti nan bwat la" ka kolekte nan konsole nwaj la, Lè sa a, poukisa deranje? Kenbe li pwòp, pa vre? Mwen vle kolekte resipyan Jenkins nan konsole nwaj la, ak Lè sa a, lanse yo nan cuber a soti nan la. Anplis, Google gen chanèl trè rich nan enfrastrikti li yo, ki pral gen yon efè benefik sou vitès la nan deplwaman.

Pou konekte ak konsole nwaj la, ou bezwen de bagay: gcloud ak dwa aksè a Google Cloud API pou egzanp VM ak ki menm koneksyon sa a pral fèt.

Pou moun ki planifye konekte pa soti nan Google nwaj ditou
Google pèmèt posiblite pou enfim otorizasyon entèaktif nan sèvis li yo. Sa a pral pèmèt ou konekte nan konsole a menm nan yon machin kafe, si li ap kouri * nix epi li gen yon konsole tèt li.

Si gen yon bezwen pou m kouvri pwoblèm sa a an plis detay nan kad nòt sa a, ekri nan kòmantè yo. Si nou jwenn ase vòt, mwen pral ekri yon mizajou sou sijè sa a.

Fason ki pi fasil pou bay dwa se atravè koòdone entènèt la.

  1. Sispann egzanp VM kote ou pral konekte ak konsole nwaj la.
  2. Louvri Detay Enstans epi klike sou chanje.
  3. Nan pati anba a nan paj la, chwazi sijè ki abòde aksè nan egzanp Aksè konplè a tout API Cloud.

    Ekran
    Nou kreye yon travay deplwaman nan GKE san grefon, SMS oswa enskripsyon. Ann pran yon ti gade anba jakèt Jenkins la

  4. Sove chanjman ou yo epi lanse egzanp lan.

Yon fwa VM a fini chaje, konekte li atravè SSH epi asire w ke koneksyon an fèt san okenn erè. Sèvi ak kòmandman an:

gcloud alpha cloud-shell ssh

Yon koneksyon siksè sanble yon bagay tankou sa a
Nou kreye yon travay deplwaman nan GKE san grefon, SMS oswa enskripsyon. Ann pran yon ti gade anba jakèt Jenkins la

Deplwaye nan GKE

Depi nou ap fè efò nan tout fason posib pou chanje nèt nan IaC (enfrastrikti kòm yon kòd), dosye docker nou yo estoke nan Git. Sa a se sou yon bò. Ak deplwaman nan kubernetes dekri pa yon dosye yaml, ki itilize sèlman pa travay sa a, ki li menm tou se tankou kòd. Sa a soti nan lòt bò a. An jeneral, mwen vle di, plan an se sa a:

  1. Nou pran valè varyab yo BUILD_VERSION epi, opsyonèlman, valè varyab yo ke yo pral pase nan ENV.
  2. Telechaje dockerfile a soti nan Git.
  3. Jenere yaml pou deplwaman.
  4. Nou telechaje tou de fichye sa yo atravè scp nan konsole nwaj la.
  5. Nou bati yon veso la epi pouse li nan rejis Container la
  6. Nou aplike dosye deplwaman chaj la nan cuber la.

Se pou nou pi espesifik. Yon fwa nou te kòmanse pale sou ENV, Lè sa a, sipoze nou bezwen pase valè yo nan de paramèt: PARAM1 и PARAM2. Nou ajoute travay yo pou deplwaman, tape - String Paramèt.

Ekran
Nou kreye yon travay deplwaman nan GKE san grefon, SMS oswa enskripsyon. Ann pran yon ti gade anba jakèt Jenkins la

Nou pral jenere yaml ak yon redireksyon senp manke pou ranpli. Li sipoze, nan kou, ke ou gen nan dockerfile ou PARAM1 и PARAM2ke non chaj la pral awesomeapp, ak veso a reyini ak aplikasyon an nan vèsyon an espesifye manti nan Rejis veso sou wout la gcr.io/awesomeapp/awesomeapp-$BUILD_VERSIONkote $BUILD_VERSION te jis chwazi nan lis deroule a.

Lis ekip la

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 ajan apre konekte lè l sèvi avèk gcloud alpha cloud-shell ssh mòd entèaktif pa disponib, kidonk nou voye kòmandman nan konsole nwaj la lè l sèvi avèk paramèt la --kòmand.

Nou netwaye katab kay la nan konsole nwaj la soti nan ansyen dockerfile la:

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

Mete dockerfile frèch telechaje a nan katab lakay konsole nwaj la lè l sèvi avèk scp:

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

Nou kolekte, tag epi pouse veso a nan rejis veso a:

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"

Nou fè menm bagay la ak dosye deplwaman an. Tanpri sonje ke kòmandman ki anba yo itilize non fiktif gwoup kote deplwaman an fèt (awsm-cluster) ak non pwojè (awesome-pwojè), kote gwoup la 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"

Nou kouri travay la, louvri pwodiksyon konsole a ak espere wè asanble siksè nan veso a.

Ekran
Nou kreye yon travay deplwaman nan GKE san grefon, SMS oswa enskripsyon. Ann pran yon ti gade anba jakèt Jenkins la

Lè sa a, deplwaman siksè nan veso a reyini

Ekran
Nou kreye yon travay deplwaman nan GKE san grefon, SMS oswa enskripsyon. Ann pran yon ti gade anba jakèt Jenkins la

Mwen fè espre inyore anviwònman an Pénétrer. Pou yon rezon ki senp: yon fwa ou mete l kanpe kantite travay ak yon non bay, li pral rete operasyonèl, kèlkeswa kantite deplwaman ak non sa a ou fè. Oke, an jeneral, sa a se yon ti kras pi lwen pase sijè ki abòde lan nan listwa.

Olye pou yo konklizyon yo

Tout etap ki anwo yo pwobableman pa t 'kapab fè, men tou senpleman enstale kèk Plugin pou Jenkins, muuulion yo. Men, pou kèk rezon mwen pa renmen plugins. Oke, pi jisteman, mwen resort yo sèlman nan dezespwa.

Apre sa, mwen jis renmen ranmase kèk nouvo sijè pou mwen. Tèks ki pi wo a se tou yon fason pou pataje konklizyon mwen te fè pandan m te rezoud pwoblèm ki dekri nan kòmansman an. Pataje ak moun ki, tankou l ', yo pa ditou yon bèt nan bwa tèt chaje nan devops. Si rezilta mwen yo ede omwen yon moun, mwen pral kontan.

Sous: www.habr.com

Add nouvo kòmantè