Kita nggawe tugas penyebaran ing GKE tanpa plugin, SMS utawa registrasi. Ayo ndeleng ing jaket Jenkins

Iku kabeh diwiwiti nalika pimpinan tim salah sawijining tim pangembangan njaluk supaya nyoba aplikasi anyar, sing wis disiapake dina sadurunge. Aku dikirim. Sawise kira-kira 20 menit, panjalukan kanggo nganyari aplikasi kasebut, amarga ana sing perlu banget ditambahake ing kana. Aku gawe anyar. Sawise sawetara jam maneh, sampeyan bisa ngira apa sing kedadeyan sabanjure ...

Aku kudu ngakeni, Aku cukup kesed (aku ora ngakoni iki sadurungΓ©? Ora?), Lan diwenehi kasunyatan sing tim ndadΓ©kakΓ© duwe akses kanggo Jenkins, kang kita duwe kabeh CI / CD, Aku panginten: supaya wong masang minangka kaya sing dikarepake! Aku kelingan lelucon: menehi wong iwak lan bakal mangan sedina; nelpon wong Fed lan dheweke bakal panganan kabeh urip. Lan lunga muter trik ing proyek, sing bakal bisa nyebarake wadhah sing ngemot aplikasi saka versi sing wis kasil dibangun menyang Kuber lan nransfer nilai apa wae menyang Kuber. ENV (mbahku, ahli filolog, guru basa Inggris ing jaman biyen, saiki bakal muter driji ing candhi lan ndeleng aku kanthi ekspresif sawise maca ukara iki).

Dadi, ing cathetan iki aku bakal ngandhani carane aku sinau:

  1. Nganyari proyek kanthi dinamis ing Jenkins saka proyek kasebut dhewe utawa saka proyek liyane;
  2. Nyambung menyang console maya (Cloud shell) saka simpul karo agen Jenkins diinstal;
  3. Sebarake beban kerja menyang Google Kubernetes Engine.


Nyatane, aku, mesthi, rada ora jujur. Dianggep sampeyan duwe paling ora bagean saka infrastruktur ing awan Google, lan mulane, sampeyan pangguna lan, mesthi, sampeyan duwe akun GCP. Nanging dudu babagan cathetan iki.

Iki lembar cheat sabanjure. Aku mung pengin nulis cathetan kaya ing siji kasus: Aku ngadhepi karo masalah, pisanan aku ora ngerti carane ngatasi iku, solusi iki ora googled siap-digawe, supaya aku googled bagean lan pungkasanipun ngatasi masalah. Lan supaya ing mangsa ngarep, nalika aku lali carane aku iku, aku ora kudu google kabeh maneh Piece dening Piece lan ngumpulake bebarengan, Aku nulis dhewe kuwi cheat sheets.

wewaler: 1. Cathetan kasebut ditulis "kanggo aku", kanggo peran kasebut praktik paling apik ora ditrapake. Aku seneng maca opsi "bakal luwih apik kanggo nindakake kanthi cara iki" ing komentar.
2. Yen bagean sing ditrapake saka cathetan kasebut dianggep uyah, mula, kaya kabeh cathetan sadurunge, iki minangka solusi uyah sing lemah.

Nganyari setelan proyek kanthi dinamis ing Jenkins

Aku ngarepake pitakon sampeyan: apa hubungane nganyari proyek dinamis? Ketik nilai parameter string kanthi manual lan mateni!

Aku mangsuli: Aku pancene kesed, aku ora seneng nalika padha sambat: Misha, penyebarane nabrak, kabeh wis ilang! Sampeyan miwiti looking, lan ana kesalahan ketik ing Nilai sawetara parameter Bukak tugas. Mulane, aku luwih seneng nindakake kabeh kanthi efisien. Yen bisa nyegah pangguna ngetik data kanthi langsung kanthi menehi dhaptar nilai sing kudu dipilih, mula aku ngatur pilihan kasebut.

Rencana iki: kita nggawe proyek ing Jenkins, ing ngendi, sadurunge diluncurake, kita bisa milih versi saka dhaptar, nemtokake nilai kanggo paramèter sing dikirim menyang wadhah liwat ENV, banjur ngumpulake wadhah lan nyurung menyang Registry Kontainer. Banjur saka ing kono wadhah dibukak ing cuber minangka beban kerja karo paramèter kasebut ing proyek.

Kita ora bakal nimbang proses nggawe lan nyetel proyek ing Jenkins, iki ora topik. Kita bakal nganggep yen tugas wis siyap. Kanggo ngleksanakake dhaptar sing dianyari kanthi versi, kita butuh rong perkara: dhaptar sumber sing wis ana kanthi nomer versi sing sah lan variabel kaya. Parameter pilihan ing tugas. Ing conto kita, supaya variabel kasebut dijenengi BUILD_VERSION, kita ora bakal manggon ing rinci. Nanging ayo dideleng kanthi cetha ing dhaptar sumber.

Ora ana akeh pilihan. Ana rong perkara sing langsung dipikirake:

  • Gunakake API akses Remote sing Jenkins nawakake kanggo pangguna;
  • Nyuwun isi folder repositori remot (ing kasus kita iki JFrog Artifactory, sing ora penting).

Jenkins Remote akses API

Miturut tradhisi sing apik banget, aku luwih seneng nyingkiri panjelasan sing dawa.
Aku mung ngidini terjemahan gratis saka potongan paragraf pisanan kaca pisanan dokumentasi API:

Jenkins nyedhiyakake API kanggo akses sing bisa diwaca mesin remot menyang fungsine. <...> Akses adoh ditawakake kanthi gaya kaya REST. Iki tegese ora ana titik entri siji kanggo kabeh fitur, nanging URL kaya ".../api/", ngopo"..." tegese obyek sing ditrapake kemampuan API.

Ing tembung liyane, yen tugas penyebaran kita saiki ngomong bab kasedhiya ing http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_build, banjur whistles API kanggo tugas iki kasedhiya ing http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_build/api/

Sabanjure, kita duwe pilihan ing wangun apa kanggo nampa output. Ayo fokus ing XML, amarga API mung ngidini nyaring ing kasus iki.

Ayo coba golek dhaptar kabeh proyek kerja. Kita mung kasengsem ing jeneng perakitan (displayName) lan asile (asil):

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

Apa kerjane?

Saiki ayo nyaring mung sing nganggo asil SUKSES. Ayo nggunakake argumentasi & ora kalebu lan minangka parameter, kita bakal ngliwati dalan menyang nilai sing ora padha karo SUKSES. Ya wis. A negatif pindho minangka statement. Kita ngilangi kabeh sing ora nyenengake:

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

Screenshot saka dhaftar sukses
Kita nggawe tugas penyebaran ing GKE tanpa plugin, SMS utawa registrasi. Ayo ndeleng ing jaket Jenkins

Ya, mung kanggo seneng-seneng, ayo priksa manawa panyaring kasebut ora ngapusi kita (filter ora tau ngapusi!) Lan nampilake dhaptar sing "ora sukses":

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

Screenshot saka dhaptar sing ora sukses
Kita nggawe tugas penyebaran ing GKE tanpa plugin, SMS utawa registrasi. Ayo ndeleng ing jaket Jenkins

Dhaptar versi saka folder ing server remot

Ana cara liya kanggo entuk dhaptar versi. Aku luwih seneng tinimbang ngakses Jenkins API. Nah, amarga yen aplikasi kasebut kasil dibangun, tegese wis dikemas lan diselehake ing repositori ing folder sing cocog. Kaya, repositori minangka panyimpenan standar kanggo versi aplikasi sing digunakake. Kaya. Inggih, ayo takon marang versi apa sing ana ing panyimpenan. Kita bakal curl, grep lan awk folder remot. Yen ana sing kasengsem ing oneliner, banjur ana ing spoiler.

printah siji baris
Wigati dicathet rong perkara: Aku ngliwati rincian sambungan ing header lan aku ora butuh kabeh versi saka folder kasebut, lan aku mung milih sing digawe sajrone sewulan. Owahi printah sing cocog karo kasunyatan lan kabutuhan sampeyan:

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

Nyiyapake proyek lan file konfigurasi proyek ing Jenkins

Kita nemtokake sumber dhaptar versi. Ayo saiki nggabungake dhaptar asil menyang tugas. Kanggo kula, solusi sing jelas yaiku nambah langkah ing tugas mbangun aplikasi. Langkah sing bakal ditindakake yen asil kasebut "sukses".

Bukak setelan tugas perakitan lan gulung menyang sisih ngisor. Klik ing tombol: Tambah langkah mbangun -> Langkah bersyarat (tunggal). Ing setelan langkah, pilih kondisi Status mbangun saiki, nyetel nilai SUKSES, tumindak sing kudu ditindakake yen sukses Run perintah shell.

Lan saiki bagean sing nyenengake. Jenkins nyimpen konfigurasi proyek ing file. Ing format XML. Sadawane dalan http://ΠΏΡƒΡ‚ΡŒ-Π΄ΠΎ-задания/config.xml Mulane, sampeyan bisa ngundhuh file konfigurasi, ngowahi yen perlu lan sijine maneh ing ngendi sampeyan entuk.

Elinga, kita sarujuk ing ndhuwur yen kita bakal nggawe parameter kanggo dhaptar versi BUILD_VERSION?

Ayo download file konfigurasi lan deleng ing njero. Cukup kanggo mesthekake yen parameter wis ana lan jinis sing dikarepake.

Screenshot ing spoiler.

Fragmen config.xml sampeyan kudu katon padha. Kajaba yen isi unsur pilihan wis ilang
Kita nggawe tugas penyebaran ing GKE tanpa plugin, SMS utawa registrasi. Ayo ndeleng ing jaket Jenkins

Apa sampeyan yakin? Mekaten, ayo nulis naskah sing bakal dieksekusi yen mbangun kasil.
Skrip bakal nampa dhaptar versi, ngundhuh file konfigurasi, nulis dhaptar versi ing panggonan sing kita butuhake, banjur sijine maneh. ya wis. Bener. Tulis dhaptar versi ing XML ing panggonan sing wis ana dhaptar versi (bakal ing mangsa ngarep, sawise Bukak pisanan saka script). Aku ngerti isih ana penggemar sengit ekspresi reguler ing donya. Aku ora kagungane wong-wong mau. Mangga nginstal xmlstarler menyang mesin ngendi config bakal diowahi. Iku misale jek kula sing iki dudu rega gedhe kanggo mbayar supaya ora nyunting XML nggunakake sed.

Ing spoiler, aku nampilake kode sing nindakake urutan ndhuwur kanthi sakabehe.

Tulis dhaptar versi saka folder ing server remot kanggo 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

Yen luwih seneng pilihan kanggo njupuk versi saka Jenkins lan sampeyan kesed kaya aku, banjur ing spoiler ana kode sing padha, nanging dhaptar saka Jenkins:

Tulis dhaptar versi saka Jenkins kanggo config
Mung elinga iki: jeneng perakitanku kalebu nomer urut lan nomer versi, dipisahake karo titik loro. Mulane, awk ngethok bagean sing ora perlu. Kanggo sampeyan dhewe, ganti baris iki supaya cocog karo kabutuhan sampeyan.

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

Ing teori, yen sampeyan wis nguji kode sing ditulis adhedhasar conto ing ndhuwur, banjur ing tugas penyebaran sampeyan kudu duwe dhaptar gulung mudhun kanthi versi. Iku kaya ing gambar ing ngisor spoiler.

Dhaptar versi sing wis rampung kanthi bener
Kita nggawe tugas penyebaran ing GKE tanpa plugin, SMS utawa registrasi. Ayo ndeleng ing jaket Jenkins

Yen kabeh bisa, banjur salin-tempel skrip kasebut Run perintah shell lan nyimpen owah-owahan.

Nyambung menyang cangkang Cloud

Kita duwe kolektor ing kontaner. Kita nggunakake Ansible minangka alat pangiriman aplikasi lan manajer konfigurasi. Mulane, nalika mbangun wadhah, ana telung pilihan: nginstal Docker ing Docker, instal Docker ing mesin sing mlaku Ansible, utawa gawe wadhah ing konsol awan. Kita sarujuk kanggo tetep meneng babagan plugin kanggo Jenkins ing artikel iki. Eling?

Aku mutusake: uga, amarga kontaner "metu saka kothak" bisa diklumpukake ing konsol maya, banjur kenapa repot? Tetep resik, ta? Aku pengin ngumpulake kontaner Jenkins ing console maya, lan banjur miwiti menyang cuber saka ing kono. Kajaba iku, Google duwe saluran sing sugih banget ing prasarana, sing bakal duwe pengaruh sing migunani kanggo kacepetan panyebaran.

Kanggo nyambung menyang konsol awan, sampeyan butuh rong perkara: gcloud lan hak akses kanggo Google Cloud API kanggo conto VM karo sambungan sing padha bakal digawe.

Kanggo sing rencana kanggo nyambung ora saka Google maya ing kabeh
Google ngidini kamungkinan mateni wewenang interaktif ing layanane. Iki bakal ngijini sampeyan kanggo nyambung menyang console malah saka mesin warung, yen mlaku * nix lan wis console dhewe.

Yen ana perlu kanggo kula kanggo nutupi masalah iki luwih rinci ing framework cathetan iki, nulis ing komentar. Yen entuk swara sing cukup, aku bakal nulis nganyari babagan topik iki.

Cara paling gampang kanggo menehi hak yaiku liwat antarmuka web.

  1. Mungkasi conto VM saka ngendi sampeyan bakal nyambung menyang console maya.
  2. Bukak Rincian Instance banjur klik mbenake.
  3. Ing sisih paling ngisor kaca, pilih ruang lingkup akses conto Akses lengkap menyang kabeh Cloud API.

    Gambar
    Kita nggawe tugas penyebaran ing GKE tanpa plugin, SMS utawa registrasi. Ayo ndeleng ing jaket Jenkins

  4. Simpen owah-owahan lan miwiti conto.

Sawise VM wis rampung loading, sambungake liwat SSH lan priksa manawa sambungan kasebut ana tanpa kesalahan. Gunakake perintah:

gcloud alpha cloud-shell ssh

Sambungan sing sukses katon kaya iki
Kita nggawe tugas penyebaran ing GKE tanpa plugin, SMS utawa registrasi. Ayo ndeleng ing jaket Jenkins

Pasang menyang GKE

Amarga kita ngupayakake kabeh cara kanggo ngalih menyang IaC (Infrastuktur minangka Kode), file docker kita disimpen ing Git. Iki ing tangan siji. Lan penyebaran ing kubernetes diterangake dening file yaml, sing mung digunakake dening tugas iki, sing dhewe uga kaya kode. Iki saka sisih liyane. UmumΓ©, maksudku, rencana iki:

  1. Kita njupuk nilai saka variabel BUILD_VERSION lan, opsional, nilai-nilai variabel sing bakal dilewati ENV.
  2. Ngundhuh file docker saka Git.
  3. Generate yaml kanggo panyebaran.
  4. Kita upload loro file kasebut liwat scp menyang konsol awan.
  5. We mbangun wadhah ana lan push menyang pendaptaran Container
  6. Kita aplikasi file panyebaran beban menyang cuber.

Ayo dadi luwih spesifik. Sawise kita miwiti ngomong bab ENV, banjur umpamane kita kudu ngliwati nilai saka rong paramèter: PARAM1 и PARAM2. Kita nambah tugas kanggo panyebaran, ketik - Parameter string.

Gambar
Kita nggawe tugas penyebaran ing GKE tanpa plugin, SMS utawa registrasi. Ayo ndeleng ing jaket Jenkins

Kita bakal ngasilake yaml kanthi pangalihan sing prasaja kumandhang kanggo file. Dianggep, mesthi, sampeyan duwe file docker PARAM1 ΠΈ PARAM2sing jeneng mbukak bakal awesomeapp, lan wadhah sing dipasang kanthi aplikasi versi sing ditemtokake dumunung ing Registry wadhah sadawane dalan gcr.io/awesomeapp/awesomeapp-$BUILD_VERSIONngendi $BUILD_VERSION mung dipilih saka dhaptar gulung mudhun.

Daftar 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

agen Jenkins sawise nyambungake nggunakake gcloud alpha cloud-shell ssh mode interaktif ora kasedhiya, supaya kita ngirim printah menyang console maya nggunakake parameter --prentah.

Kita ngresiki folder ngarep ing konsol awan saka dockerfile lawas:

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

Selehake dockerfile sing anyar diundhuh ing folder ngarep konsol awan nggunakake scp:

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

Kita ngumpulake, menehi tag lan push wadhah menyang registri Wadah:

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"

Kita nindakake perkara sing padha karo file panyebaran. Wigati dimangerteni manawa printah ing ngisor iki nggunakake jeneng fiktif kluster ing ngendi panyebaran kasebut dumadi (awsm-cluster) lan jeneng proyek (apik tenan-proyek), ing ngendi kluster dumunung.

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"

We mbukak tugas, mbukak output console lan ngarep-arep kanggo ndeleng DΓ©wan sukses wadhah.

Gambar
Kita nggawe tugas penyebaran ing GKE tanpa plugin, SMS utawa registrasi. Ayo ndeleng ing jaket Jenkins

Lan banjur sukses penyebaran wadhah sing wis dirakit

Gambar
Kita nggawe tugas penyebaran ing GKE tanpa plugin, SMS utawa registrasi. Ayo ndeleng ing jaket Jenkins

Aku sengaja ora nggatekake setelan kasebut Ingress. Kanggo siji alesan prasaja: yen sampeyan nyetel beban kerja karo jeneng diwenehi, iku bakal tetep operasional, ora ketompo carane akeh deployments karo jeneng iki sampeyan nindakake. Inggih, umume, iki rada ngluwihi ruang lingkup sejarah.

Nanging kesimpulan

Kabeh langkah ing ndhuwur mbokmenawa ora bisa rampung, nanging mung diinstal sawetara plugin kanggo Jenkins, muuulion sing. Nanging sakperangan alesan aku ora seneng plugins. Inggih, luwih tepate, aku ngupayakake dheweke mung amarga nekat.

Lan aku mung seneng njupuk topik anyar kanggo aku. Teks ing ndhuwur uga minangka cara kanggo nuduhake temuan sing dakkarepake nalika ngrampungake masalah sing diterangake ing wiwitan. Nuduhake karo wong-wong sing, kaya dheweke, dudu serigala sing nggegirisi ing devops. Yen panemuanku mbantu paling ora wong, aku bakal seneng.

Source: www.habr.com

Add a comment