Urang nyieun tugas deployment di GKE tanpa plugins, SMS atanapi pendaptaran. Hayu urang ngintip handapeun jaket Jenkins

Éta sadayana dimimitian nalika pimpinan tim salah sahiji tim pangembangan kami naroskeun ka kami pikeun nguji aplikasi énggalna, anu parantos disimpen dina dinten sateuacanna. Kuring masangkeunana. Saatos kira-kira 20 menit, pamenta ditampi pikeun ngapdet aplikasina, sabab aya anu diperyogikeun pisan. Kuring renewed. Saatos sababaraha jam deui, anjeun tiasa nebak naon anu mimiti kajadian salajengna ...

Kuring kudu ngaku, Abdi rada puguh (teu kuring ngaku ieu saméméhna? No?), Jeung dibere kanyataan yén tim ngarah boga aksés ka Jenkins, nu urang gaduh sadayana CI / CD, Teu sangka: hayu anjeunna nyebarkeun sakumaha sakumaha anu dipikahoyong! Kuring inget lulucon: masihan lalaki hiji lauk jeung manehna bakal dahar pikeun sapoé; nelepon hiji jalma fed sarta anjeunna bakal fed sapanjang hirupna. Jeung indit maén trik dina pakasaban, anu bakal tiasa nyebarkeun wadah anu ngandung aplikasi tina sagala versi anu suksés diwangun kana Kuber sareng nransferkeun nilai naon waé ka éta. ENV (Akina kuring, ahli filologi, guru basa Inggris baheula, ayeuna bakal ngacungkeun ramo di kuilna sareng ningali kuring sacara ekspresif saatos maca kalimat ieu).

Janten, dina catetan ieu kuring bakal nyaritakeun kumaha kuring diajar:

  1. Ngamutahirkeun dinamis padamelan di Jenkins tina padamelan éta atanapi tina padamelan sanés;
  2. Sambungkeun ka konsol awan (Cloud shell) tina titik sareng agén Jenkins dipasang;
  3. Nyebarkeun beban kerja ka Google Kubernetes Engine.


Kanyataanna, kuring, tangtosna, keur rada disingenuous. Hal ieu dianggap yén anjeun boga sahanteuna bagian tina infrastruktur dina awan Google, sarta, ku kituna, anjeun pamaké sarta, tangtosna, anjeun gaduh akun GCP. Tapi éta sanés perkawis catetan ieu.

Ieu lembar curang kuring salajengna. Kuring ngan ukur hoyong nyerat catetan sapertos kitu dina hiji hal: Kuring disanghareupan ku masalah, mimitina kuring henteu terang kumaha ngabéréskeunana, solusina henteu di-google-siap-siap, janten kuring googled dina sababaraha bagian sareng tungtungna ngarengsekeun masalahna. Sarta ku kituna dina mangsa nu bakal datang, nalika kuring poho kumaha atuh eta, abdi teu kudu google sagalana deui sapotong ku sapotong tur compile eta babarengan, Kuring nulis sorangan lambaran curang misalna.

Bantahan: 1. Catetan ieu ditulis "keur sorangan", pikeun peran lila-pangalusna henteu lumaku. Abdi bagja maca pilihan "éta bakal langkung saé pikeun ngalakukeunana ku cara kieu" dina koméntar.
2. Upami bagian anu diterapkeun tina catetan dianggap uyah, maka, sapertos sadayana catetan kuring sateuacana, ieu mangrupikeun larutan uyah anu lemah.

Ngamutahirkeun dinamis setelan pakasaban di Jenkins

Abdi ngarepkeun patarosan anjeun: naon hubunganana pembaruan padamelan dinamis sareng éta? Lebetkeun nilai parameter string sacara manual sareng mareuman anjeun!

Kuring ngajawab: Abdi estu puguh, abdi teu resep lamun maranéhna ngawadul: Misha, deployment na ngadat, sagalana geus Isro! Anjeun ngamimitian pilari, tur aya hiji typo dina nilai sababaraha parameter peluncuran tugas. Ku alatan éta, kuring leuwih resep ngalakukeun sagalana sakumaha éfisién mungkin. Upami mungkin pikeun nyegah pangguna langsung ngalebetkeun data ku masihan daptar nilai anu kedah dipilih, maka kuring ngatur pamilihan.

Rencanana nyaéta kieu: urang nyiptakeun padamelan di Jenkins, dimana, sateuacan diluncurkeun, urang tiasa milih versi tina daptar, netepkeun nilai pikeun parameter anu dikirimkeun ka wadahna. ENV, mangka ngumpulkeun wadahna sarta nyorong kana pendaptaran Wadahna. Lajeng ti dinya wadahna dibuka dina cuber sakumaha beban gawé kalawan parameter dieusian dina pakasaban.

Kami moal nganggap prosés nyiptakeun sareng nyetél padamelan di Jenkins, ieu sanés topik. Urang bakal nganggap yén tugas geus siap. Pikeun nerapkeun daptar anu diropéa nganggo versi, urang peryogi dua hal: daptar sumber anu tos aya kalayan nomer versi apriori anu valid sareng variabel sapertos. Parameter pilihan dina tugas. Dina conto urang, hayu variabel ngaranna BUILD_VERSION, urang moal Huni on eta di jéntré. Tapi hayu urang tingali daptar sumberna.

Teu aya seueur pilihan. Dua hal langsung datang ka pikiran:

  • Anggo API aksés Jauh anu ditawarkeun Jenkins ka panggunana;
  • Nyuhunkeun eusi folder gudang jauh (dina hal urang ieu JFrog Artifactory, nu teu penting).

Jenkins Jauh aksés API

Numutkeun tradisi unggulan ngadegkeun, abdi bakal resep ulah katerangan lengthy.
Kuring bakal ngidinan sorangan ngan tarjamah bébas tina sapotong paragraf kahiji kaca munggaran dokuméntasi API:

Jenkins nyayogikeun API pikeun aksés anu tiasa dibaca mesin jauh kana fungsionalitasna. <...> Aksés jauh ditawarkeun dina gaya REST. Ieu ngandung harti yén euweuh titik éntri tunggal pikeun sakabéh fitur, tapi gantina URL kawas ".../api/", Dimana"..." hartosna obyék anu diterapkeun kamampuan API.

Kalayan kecap séjén, lamun tugas deployment ayeuna urang ngobrol ngeunaan sadia di http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_build, lajeng whistles API pikeun tugas ieu sadia di http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_build/api/

Salajengna, urang boga pilihan dina formulir naon pikeun nampa kaluaran. Hayu urang difokuskeun XML, saprak API ngan ngamungkinkeun nyaring dina hal ieu.

Hayu urang cobian kéngingkeun daptar sadaya padamelan padamelan. Urang ukur museurkeun ngaran assembly (nami tayang) jeung hasilna (hasil):

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

Kajantenan?

Ayeuna hayu urang nyaring ngan ukur anu ditungtungan ku hasilna sukses. Hayu urang nganggo argumen &ngaluarkeun sarta salaku parameter urang bakal lulus eta jalur ka nilai teu sarua jeung sukses. Enya enya. A négatip ganda mangrupakeun pernyataan. Urang ngaluarkeun sagala hal anu teu dipikaresep ku urang:

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

Screenshot tina daptar suksés
Urang nyieun tugas deployment di GKE tanpa plugins, SMS atanapi pendaptaran. Hayu urang ngintip handapeun jaket Jenkins

Nya, pikeun senang-senang, hayu urang pastikeun yén saringan éta henteu nipu urang (saringan henteu pernah bohong!)

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

Potret layar daptar anu henteu suksés
Urang nyieun tugas deployment di GKE tanpa plugins, SMS atanapi pendaptaran. Hayu urang ngintip handapeun jaket Jenkins

Daptar vérsi ti polder dina server jauh

Aya cara kadua pikeun meunangkeun daptar versi. Kuring resep eta malah leuwih ti ngakses Jenkins API. Nya, sabab upami aplikasi éta suksés diwangun, éta hartosna dibungkus sareng disimpen dina gudang dina folder anu pas. Sapertos, gudang mangrupikeun panyimpen standar tina versi aplikasi anu tiasa dianggo. Siga. Nya, hayu urang naroskeun anjeunna versi naon anu disimpen. Urang bakal curl, grep na awk folder jauh. Upami aya anu kabetot dina oneliner, maka éta handapeun spoiler.

paréntah hiji garis
Perhatikeun dua hal: Kuring lulus rinci sambungan dina lulugu jeung Abdi teu kedah sadayana versi tina folder, sarta kuring milih ngan maranéhanana anu dijieun dina sabulan. Édit paréntah pikeun nyocogkeun kanyataan sareng kabutuhan anjeun:

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

Nyetel padamelan sareng file konfigurasi padamelan di Jenkins

Kami terang sumber daptar vérsi. Hayu urang ayeuna ngasupkeun daptar hasilna kana tugas. Pikeun kuring, solusi anu jelas nyaéta nambihan léngkah dina tugas ngawangun aplikasi. Léngkah anu bakal dilaksanakeun upami hasilna "sukses".

Buka setélan tugas assembly tur gulung ka handap pisan. Pencét kana tombol: Tambahkeun hambalan ngawangun -> Lengkah kondisional (tunggal). Dina setélan léngkah, pilih kaayaan Status ngawangun ayeuna, Nyetél nilai sukses, lampah nu kudu dipigawé lamun suksés Jalankeun paréntah cangkang.

Tur ayeuna bagian senang. Jenkins nyimpen konfigurasi pakasaban dina file. Dina format XML. Sapanjang jalan http://путь-до-задания/config.xml Sasuai, anjeun tiasa ngaunduh file konfigurasi, ngédit upami diperyogikeun sareng nempatkeun deui dimana anjeun ngagaduhan.

Émut, kami sapuk di luhur yén kami bakal nyiptakeun parameter pikeun daptar vérsi BUILD_VERSION?

Hayu urang unduh file konfigurasi sareng tingali di jerona. Ngan pikeun mastikeun yén parameter aya dina tempat sareng jinis anu dipikahoyong.

Potret layar handapeun spoiler.

sempalan config.xml Anjeun kudu kasampak sarua. Iwal eusi unsur pilihan anu leungit acan
Urang nyieun tugas deployment di GKE tanpa plugins, SMS atanapi pendaptaran. Hayu urang ngintip handapeun jaket Jenkins

Naha anjeun yakin? Sakitu wae, hayu urang nyerat naskah anu bakal dieksekusi upami ngawangunna suksés.
Skrip bakal nampi daptar vérsi, unduh file konfigurasi, tulis daptar vérsi di tempat anu urang peryogikeun, teras nahan deui. Sumuhun. Éta leres. Tulis daptar vérsi dina XML di tempat anu parantos aya daptar vérsi (bakal di hareup, saatos peluncuran naskah munggaran). Kuring terang masih aya peminat galak ekspresi biasa di dunya. Abdi henteu milik aranjeunna. Mangga install xmlstarler ka mesin dimana config bakal diédit. Sigana mah ieu teu kitu harga badag mayar ulah ngédit XML maké sed.

Dina spoiler, abdi nampilkeun kodeu nu ngalakukeun runtuyan luhur dina entirety na.

Tulis daptar versi tina folder dina server jauh ka config

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

Upami anjeun resep pilihan pikeun kéngingkeun vérsi ti Jenkins sareng anjeun puguh sapertos kuring, teras handapeun spoiler mangrupikeun kode anu sami, tapi daptar tina Jenkins:

Nulis daptar versi ti Jenkins mun config
Ngan tetep dina pikiran ieu: ngaran assembly abdi diwangun ku nomer runtuyan jeung nomer versi, dipisahkeun ku titik dua. Sasuai, awk motong off bagian nu teu perlu. Pikeun diri anjeun, robih garis ieu pikeun nyocogkeun ka kabutuhan anjeun.

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

Dina tiori, upami anjeun parantos nguji kode anu ditulis dumasar kana conto di luhur, maka dina tugas panyebaran anjeun kedah gaduh daptar turun-handap sareng versi. Ieu kawas dina screenshot handapeun spoiler nu.

Daptar vérsi anu parantos réngsé
Urang nyieun tugas deployment di GKE tanpa plugins, SMS atanapi pendaptaran. Hayu urang ngintip handapeun jaket Jenkins

Upami sadayana tiasa dianggo, teras salin-témpél naskah kana Jalankeun paréntah cangkang tur nyimpen parobahanana.

Nyambungkeun ka cangkang Awan

Simkuring gaduh kolektor dina peti. Kami nganggo Ansible salaku alat pangiriman aplikasi sareng manajer konfigurasi. Sasuai, nalika ngawangun wadah, aya tilu pilihan anu aya dina pikiran: pasang Docker di Docker, pasang Docker dina mesin anu ngajalankeun Ansible, atanapi ngawangun wadah dina konsol awan. Kami sapuk pikeun cicingeun ngeunaan plugins pikeun Jenkins dina tulisan ieu. Inget?

Kuring mutuskeun: sumur, saprak peti "out of the box" bisa dikumpulkeun dina konsol awan, lajeng naha ganggu? Tetep beresih, bener? Abdi hoyong ngumpulkeun peti Jenkins dina konsol awan, lajeng ngajalankeun kana cuber ti dinya. Leuwih ti éta, Google boga saluran pisan euyeub dina infrastruktur na, nu bakal boga pangaruh mangpaat dina laju deployment.

Pikeun nyambung ka konsol awan, anjeun peryogi dua hal: gcloud jeung hak aksés ka Google Cloud API pikeun conto VM sareng sambungan anu sami ieu bakal dilakukeun.

Pikeun maranéhanana anu rencanana pikeun nyambung teu ti Google awan pisan
Google ngamungkinkeun kamungkinan nganonaktipkeun otorisasina interaktif dina jasa na. Ieu bakal ngidinan Anjeun pikeun nyambung ka konsol malah ti mesin kopi, lamun ngajalankeun * nix sarta ngabogaan konsol sorangan.

Upami aya kabutuhan kuring pikeun nutupan masalah ieu sacara langkung rinci dina kerangka catetan ieu, tulis dina koméntar. Lamun urang meunang cukup undian, abdi gé nulis apdet on topik ieu.

Cara panggampangna pikeun masihan hak nyaéta ngaliwatan antarmuka wéb.

  1. Ngeureunkeun conto VM ti mana anjeun bakal nyambung ka konsol awan.
  2. Buka Rincian Instance teras klik ngajadikeun amandemen.
  3. Di bagian handap kaca, pilih wengkuan aksés instan Aksés pinuh ka sadaya Cloud API.

    Tangkepan
    Urang nyieun tugas deployment di GKE tanpa plugins, SMS atanapi pendaptaran. Hayu urang ngintip handapeun jaket Jenkins

  4. Simpen parobahan anjeun sareng jalankeun conto.

Sakali VM tos rengse loading, sambungkeun ka eta via SSH tur pastikeun yén sambungan lumangsung tanpa kasalahan. Paké paréntah:

gcloud alpha cloud-shell ssh

Sambungan anu suksés sigana sapertos kieu
Urang nyieun tugas deployment di GKE tanpa plugins, SMS atanapi pendaptaran. Hayu urang ngintip handapeun jaket Jenkins

Nyebarkeun kana GKE

Kusabab urang narékahan dina sagala cara anu mungkin pikeun ngalih ka IaC (Infrastuktur salaku Kode), file docker kami disimpen dina Git. Ieu dina hiji sisi. Sarta deployment di kubernetes digambarkeun ku file yaml, nu dipaké ukur ku tugas ieu, nu sorangan ogé kawas kode. Ieu ti sisi séjén. Sacara umum, maksud kuring, rencanana nyaéta kieu:

  1. Kami nyandak nilai-nilai variabel BUILD_VERSION sareng, sacara opsional, nilai-nilai variabel anu bakal diliwat ENV.
  2. Unduh dockerfile tina Git.
  3. Ngahasilkeun yaml pikeun deployment.
  4. Urang unggah duanana file ieu via scp kana konsol awan.
  5. Urang ngawangun wadahna aya sareng nyorong kana pendaptaran Wadahna
  6. Urang nerapkeun file deployment beban kana cuber.

Hayu urang langkung spésifik. Sakali urang mimiti ngobrol ngeunaan ENV, teras anggap urang kedah lulus nilai dua parameter: PARAM1 и PARAM2. Urang nambahkeun tugas maranéhanana pikeun deployment, tipe - Parameter string.

Tangkepan
Urang nyieun tugas deployment di GKE tanpa plugins, SMS atanapi pendaptaran. Hayu urang ngintip handapeun jaket Jenkins

Urang bakal ngahasilkeun yaml ku redirection basajan gema pikeun berkas. Hal ieu dianggap, tangtosna, nu gaduh di dockerfile Anjeun PARAM1 и PARAM2yén ngaran beban bakal awesomeapp, sareng wadah anu dirakit sareng aplikasi tina versi anu ditangtukeun aya pendaptaran wadahna nuju di jalan gcr.io/awesomeapp/awesomeapp-$BUILD_VERSIONdimana $BUILD_VERSION ngan dipilih tina daptar turun-handap.

Daptar 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

agén Jenkins sanggeus nyambungkeun ngagunakeun gcloud alpha cloud-shell ssh modeu interaktif teu sadia, sangkan ngirim paréntah ka konsol awan ngagunakeun parameter --paréntah.

Urang ngabersihan folder imah dina konsol awan tina dockerfile heubeul:

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

Pasang dockerfile anu nembé diunduh dina polder bumi konsol awan nganggo scp:

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

Kami ngumpulkeun, méré tag sareng nyorong wadahna ka pendaptaran Wadahna:

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"

Urang lakonan hal nu sarua jeung file deployment. Punten dicatet yén paréntah di handap ieu nganggo nami fiktif tina klaster tempat panyebaran lumangsung (awsm-cluster) jeung ngaran proyék (Heboh-proyék), dimana klaster ayana.

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"

Urang ngajalankeun tugas, muka kaluaran konsol jeung miharep ningali assembly suksés wadahna.

Tangkepan
Urang nyieun tugas deployment di GKE tanpa plugins, SMS atanapi pendaptaran. Hayu urang ngintip handapeun jaket Jenkins

Lajeng deployment suksés wadahna dirakit

Tangkepan
Urang nyieun tugas deployment di GKE tanpa plugins, SMS atanapi pendaptaran. Hayu urang ngintip handapeun jaket Jenkins

Kuring ngahaja teu malire suhunan Ingress. Pikeun hiji alesan basajan: sakali anjeun nyetél éta beban gawé kalawan ngaran dibikeun, eta bakal tetep operasional, euweuh urusan sabaraha deployments kalawan ngaran ieu anjeun ngalakukeun. Nya, sacara umum, ieu sakedik saluareun ruang lingkup sajarah.

Daripada kasimpulan

Sadaya léngkah di luhur sigana henteu tiasa dilakukeun, tapi ngan saukur dipasang sababaraha plugin pikeun Jenkins, muuulion na. Tapi pikeun sababaraha alesan kuring henteu resep plugins. Nya, langkung tepatna, kuring ngan ukur ka aranjeunna kusabab putus asa.

Sareng kuring resep nyandak topik énggal pikeun kuring. Téks di luhur ogé cara pikeun ngabagikeun pamanggihan anu ku kuring dilakukeun nalika ngarengsekeun masalah anu dijelaskeun di awal. Bagikeun sareng jalma anu, sapertos anjeunna, sanés ajag anu parah dina devops. Lamun papanggihan kuring mantuan sahenteuna batur, abdi bakal senang.

sumber: www.habr.com

Tambahkeun komentar