Naghimo kami usa ka buluhaton sa pag-deploy sa GKE nga wala’y mga plugin, SMS o pagrehistro. Atong tan-awon ang ilawom sa dyaket ni Jenkins

Nagsugod ang tanan sa dihang ang nanguna sa team sa usa sa among mga development team mihangyo kanamo nga sulayan ang ilang bag-ong aplikasyon, nga na-container sa miaging adlaw. Gi post nako. Human sa mga 20 minutos, nadawat ang usa ka hangyo nga i-update ang aplikasyon, tungod kay usa ka kinahanglanon kaayo nga butang ang gidugang didto. Nag renew ko. Human sa laing duha ka oras... aw, makatag-an ka kung unsay sunod nga mahitabo...

Ako kinahanglan nga moangkon, ako tapolan kaayo (dili ba ako miangkon niini sa sayo pa? Dili?), Ug tungod sa kamatuoran nga ang mga nanguna sa team adunay access sa Jenkins, diin kita adunay tanan nga CI / CD, ako naghunahuna: tugoti siya sa pag-deploy ingon kutob sa iyang gusto! Nakahinumdom ko sa usa ka komedya: hatagi ang usa ka tawo og isda ug siya mokaon sulod sa usa ka adlaw; tawga ang usa ka tawo nga Fed ug siya pagapakaon sa tibuok niyang kinabuhi. Ug miadto pagdula mga lansis sa trabaho, nga makahimo sa pag-deploy sa usa ka sudlanan nga adunay sulud nga aplikasyon sa bisan unsang malampuson nga gitukod nga bersyon sa Kuber ug ibalhin ang bisan unsang mga kantidad niini ENV (Ang akong apohan, usa ka philologist, usa ka magtutudlo sa English kaniadto, karon magtuyok-tuyok sa iyang tudlo sa iyang templo ug motan-aw kanako nga klaro kaayo human mabasa kini nga sentence).

Busa, niining mubo nga sulat isulti ko kanimo kung giunsa nako pagkat-on:

  1. Dinamikong pag-update sa mga trabaho sa Jenkins gikan sa trabaho mismo o gikan sa ubang mga trabaho;
  2. Sumpaysumpaya ang cloud console (Cloud shell) gikan sa usa ka node nga na-install ang ahente sa Jenkins;
  3. I-deploy ang workload sa Google Kubernetes Engine.


Sa pagkatinuod, ako, siyempre, medyo dili matinud-anon. Gituohan nga ikaw adunay labing menos nga bahin sa imprastraktura sa Google cloud, ug, busa, ikaw ang tiggamit niini ug, siyempre, ikaw adunay GCP account. Apan dili kana kung unsa kini nga nota.

Kini ang akong sunod nga cheat sheet. Gusto lang nako isulat ang ingon nga mga nota sa usa ka kaso: Nag-atubang ako sa usa ka problema, sa sinugdan wala ako mahibal-an kung giunsa kini pagsulbad, ang solusyon wala gi-google nga andam, mao nga gi-google ko kini sa mga bahin ug sa katapusan nasulbad ang problema. Ug aron sa umaabot, kung makalimtan nako kung giunsa nako kini gibuhat, dili na nako kinahanglan nga i-google pag-usab ang tanan nga piraso sa piraso ug i-compile kini, gisulat nako ang akong kaugalingon sa ingon nga mga cheat sheet.

nga pagpasabot: 1. Ang mubo nga sulat gisulat "para sa akong kaugalingon", alang sa papel labing maayo nga praktis dili magamit. Nalipay ako sa pagbasa sa mga kapilian nga "mas maayo nga buhaton kini nga paagi" sa mga komento.
2. Kung ang gipadapat nga bahin sa nota giisip nga asin, nan, sama sa tanan nakong nangaging mga nota, kini usa ka huyang nga solusyon sa asin.

Dinamikong pag-update sa mga setting sa trabaho sa Jenkins

Nakita nako ang imong pangutana: unsa may kalabotan niini ang dinamikong pag-update sa trabaho? Pagsulod sa bili sa string parameter nga mano-mano ug lakaw na!

Tubag ko: Tapolan gyud ko, dili ko ganahan kung moreklamo sila: Misha, ang deployment nahagsa, ang tanan nawala! Nagsugod ka sa pagtan-aw, ug adunay typo sa kantidad sa pipila nga parameter sa paglansad sa buluhaton. Busa, mas gusto nako nga buhaton ang tanan kutob sa mahimo. Kung posible nga mapugngan ang tiggamit sa direkta nga pagsulod sa datos pinaagi sa paghatag sa usa ka lista sa mga kantidad nga mapilian, nan akong giorganisar ang pagpili.

Ang plano mao kini: naghimo kami usa ka trabaho sa Jenkins, diin, sa wala pa ilunsad, makapili kami usa ka bersyon gikan sa lista, ipiho ang mga kantidad alang sa mga parameter nga gipasa sa sudlanan pinaagi sa ENV, unya kolektahon niini ang sudlanan ug iduso kini sa Container Registry. Unya gikan didto ang sudlanan gilusad sa cuber ingon workload uban ang mga parameter nga gitakda sa trabaho.

Dili namo tagdon ang proseso sa paghimo ug pag-set up og trabaho sa Jenkins, wala kini sa topiko. Atong hunahunaon nga ang buluhaton andam na. Aron mapatuman ang usa ka updated nga listahan uban sa mga bersyon, kita nagkinahanglan og duha ka mga butang: usa ka kasamtangan nga tinubdan listahan uban sa usa ka priori balido nga mga numero sa bersyon ug usa ka variable sama sa. Pagpili parameter sa buluhaton. Sa atong panig-ingnan, himoa nga ang variable nga nganlan BUILD_VERSION, dili nato kini hisgotan sa detalye. Apan atong tan-awon pag-ayo ang listahan sa tinubdan.

Wala'y daghan nga mga kapilian. Duha ka butang ang nahunahuna dayon:

  • Gamita ang Remote access API nga gitanyag ni Jenkins sa mga tiggamit niini;
  • Hangyoa ang sulod sa hilit nga repository folder (sa among kaso kini ang JFrog Artifactory, nga dili importante).

Jenkins Remote access API

Sumala sa natukod nga maayo kaayo nga tradisyon, gusto nako nga likayan ang taas nga mga pagpasabut.
Akong tugotan ang akong kaugalingon og libre nga paghubad sa usa ka piraso sa unang paragraph unang panid sa dokumentasyon sa API:

Naghatag ang Jenkins og API alang sa layo nga mabasa sa makina nga pag-access sa pagpaandar niini. <...> Gitanyag ang layo nga pag-access sa usa ka istilo nga sama sa REST. Kini nagpasabot nga walay usa ka entry point sa tanang feature, apan usa ka URL sama sa ".../api/", diin"..." nagpasabot sa butang diin ang mga kapabilidad sa API gipadapat.

Sa laing pagkasulti, kung ang buluhaton sa pag-deploy nga atong gihisgutan karon anaa sa http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_build, unya ang API whistles alang niini nga buluhaton anaa sa http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_build/api/

Sunod, kita adunay usa ka pagpili sa unsa nga porma sa pagdawat sa output. Magpokus ta sa XML, tungod kay gitugotan ra sa API ang pagsala niini nga kaso.

Atong sulayan nga makakuha og lista sa tanang trabaho. Interesado lang kami sa ngalan sa asembliya (displayName) ug ang resulta niini (resulta):

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

Nahitabo?

Karon atong i-filter lamang ang mga dagan nga matapos sa resulta SUKDANAN. Atong gamiton ang argumento & dili iapil ug isip usa ka parameter atong ipasa kini sa dalan ngadto sa usa ka bili nga dili katumbas sa SUKDANAN. Oo Oo. Ang doble nga negatibo usa ka pahayag. Gidili namo ang tanan nga dili interesado kanamo:

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

Screenshot sa lista sa malampuson
Naghimo kami usa ka buluhaton sa pag-deploy sa GKE nga wala’y mga plugin, SMS o pagrehistro. Atong tan-awon ang ilawom sa dyaket ni Jenkins

Aw, para lang sa kalingawan, atong siguroon nga ang filter wala maglimbong kanato (ang mga filter dili gayod mamakak!)

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

Screenshot sa listahan sa mga dili malampuson
Naghimo kami usa ka buluhaton sa pag-deploy sa GKE nga wala’y mga plugin, SMS o pagrehistro. Atong tan-awon ang ilawom sa dyaket ni Jenkins

Listahan sa mga bersyon gikan sa usa ka folder sa usa ka hilit nga server

Adunay ikaduha nga paagi aron makakuha usa ka lista sa mga bersyon. Ganahan ko niini labaw pa sa pag-access sa Jenkins API. Aw, tungod kay kung ang aplikasyon malampuson nga gitukod, kini nagpasabut nga kini giputos ug gibutang sa repository sa angay nga folder. Sama sa, ang usa ka repositoryo mao ang default nga pagtipig sa mga nagtrabaho nga bersyon sa mga aplikasyon. Ingon. Aw, atong pangutan-on siya kung unsa nga mga bersyon ang naa sa pagtipig. Among i-curl, grep ug i-awk ang remote folder. Kung adunay interesado sa oneliner, nan kini sa ilawom sa spoiler.

Usa ka linya nga mando
Palihug timan-i ang duha ka butang: Gipasa nako ang mga detalye sa koneksyon sa header ug dili nako kinahanglan ang tanan nga mga bersyon gikan sa folder, ug gipili ra nako ang mga nahimo sa sulod sa usa ka bulan. I-edit ang sugo aron mohaum sa imong mga kamatuoran ug panginahanglan:

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

Pag-set up sa mga trabaho ug job configuration file sa Jenkins

Among nahibal-an ang gigikanan sa lista sa mga bersyon. Atong iapil karon ang resulta nga listahan sa buluhaton. Alang kanako, ang klaro nga solusyon mao ang pagdugang usa ka lakang sa buluhaton sa pagtukod sa aplikasyon. Ang lakang nga ipatuman kung ang resulta mao ang "kalampusan".

Ablihi ang mga setting sa buluhaton sa asembliya ug pag-scroll sa pinakaubos. Pag-klik sa mga buton: Idugang ang lakang sa pagtukod -> Kondisyon nga lakang (single). Sa mga setting sa lakang, pilia ang kondisyon Kasamtangang kahimtang sa pagtukod, ibutang ang bili SUKDANAN, ang aksyon nga himuon kung malampuson Pagdalagan ang shell command.

Ug karon ang makalingaw nga bahin. Gitipigan ni Jenkins ang mga pag-configure sa trabaho sa mga file. Sa XML format. Sa dalan http://ΠΏΡƒΡ‚ΡŒ-Π΄ΠΎ-задания/config.xml Tungod niini, mahimo nimong i-download ang configuration file, i-edit kini kung gikinahanglan ug ibalik kini kung diin nimo kini nakuha.

Hinumdumi, miuyon kami sa ibabaw nga maghimo kami usa ka parameter alang sa lista sa mga bersyon BUILD_VERSION?

Atong i-download ang configuration file ug tan-awon ang sulod niini. Aron lang masiguro nga ang parameter naa sa lugar ug sa gusto nga tipo.

Screenshot sa ilawom sa spoiler.

Ang imong config.xml fragment kinahanglan nga parehas ang hitsura. Gawas nga wala pa ang mga sulud sa elemento sa pagpili
Naghimo kami usa ka buluhaton sa pag-deploy sa GKE nga wala’y mga plugin, SMS o pagrehistro. Atong tan-awon ang ilawom sa dyaket ni Jenkins

Sigurado ka? Mao na, magsulat ta og script nga i-execute kung magmalampuson ang build.
Ang script makadawat og lista sa mga bersyon, i-download ang configuration file, isulat ang listahan sa mga bersyon niini sa dapit nga atong gikinahanglan, ug dayon ibalik kini. Oo. Sakto gyud. Pagsulat ug lista sa mga bersiyon sa XML sa dapit diin aduna nay lista sa mga bersiyon (mahimong sa umaabot, human sa unang paglusad sa script). Nahibal-an ko nga adunay mga mabangis nga mga fans sa mga regular nga ekspresyon sa kalibutan. Dili ko ila. Palihug instalar xmlstarler sa makina diin i-edit ang config. Para nako dili kini ingon ka dako nga presyo nga ibayad aron malikayan ang pag-edit sa XML gamit ang sed.

Ubos sa spoiler, akong gipresentar ang code nga nagpahigayon sa pagkasunod-sunod sa ibabaw sa kinatibuk-an.

Pagsulat og lista sa mga bersyon gikan sa usa ka folder sa hilit nga server ngadto sa 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

Kung gusto nimo ang kapilian sa pagkuha sa mga bersyon gikan sa Jenkins ug ingon ka tapolan sama kanako, unya ubos sa spoiler mao ang parehas nga code, apan usa ka lista gikan sa Jenkins:

Pagsulat og lista sa mga bersyon gikan sa Jenkins ngadto sa config
Ibutang lang kini sa hunahuna: ang akong asembliya nga ngalan naglangkob sa usa ka sequence number ug usa ka bersyon nga numero, nga gibulag sa usa ka colon. Tungod niini, giputol sa awk ang wala kinahanglana nga bahin. Alang sa imong kaugalingon, usba kini nga linya aron mahiangay sa imong mga panginahanglan.

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

Sa teorya, kung gisulayan nimo ang code nga gisulat base sa mga pananglitan sa ibabaw, nan sa buluhaton sa pag-deploy kinahanglan nga adunay usa ka drop-down list nga adunay mga bersyon. Kini sama sa screenshot sa ilawom sa spoiler.

Husto nga nahuman nga lista sa mga bersyon
Naghimo kami usa ka buluhaton sa pag-deploy sa GKE nga wala’y mga plugin, SMS o pagrehistro. Atong tan-awon ang ilawom sa dyaket ni Jenkins

Kung ang tanan nagtrabaho, unya kopyaha-paste ang script sa Pagdalagan ang shell command ug i-save ang mga pagbag-o.

Pagkonektar sa Cloud shell

Kami adunay mga kolektor sa mga sudlanan. Gigamit namo ang Ansible isip among tool sa paghatud sa aplikasyon ug manager sa configuration. Tungod niini, kung bahin sa pagtukod og mga sudlanan, tulo ka mga kapilian ang naa sa hunahuna: i-install ang Docker sa Docker, i-install ang Docker sa usa ka makina nga nagdagan sa Ansible, o paghimo mga sulud sa usa ka cloud console. Nagkasabot kami nga magpakahilom bahin sa mga plugins para sa Jenkins sa kini nga artikulo. Hinumdomi?

Nakahukom ko: maayo, tungod kay ang mga sudlanan nga "gikan sa kahon" mahimong makolekta sa cloud console, nan nganong magsamok? Hupti kini nga limpyo, di ba? Gusto nakong kolektahon ang mga sudlanan sa Jenkins sa cloud console, ug dayon ilunsad kini sa cuber gikan didto. Dugang pa, ang Google adunay daghang mga kanal sa sulod sa imprastraktura niini, nga adunay mapuslanon nga epekto sa katulin sa pag-deploy.

Aron makonektar sa cloud console, kinahanglan nimo ang duha ka butang: gcloud ug mga katungod sa pag-access sa Google Cloud API alang sa VM nga pananglitan diin kining sama nga koneksyon himoon.

Alang sa mga nagplano nga magkonektar dili gikan sa Google cloud sa tanan
Gitugotan sa Google ang posibilidad sa pag-disable sa interactive nga pagtugot sa mga serbisyo niini. Kini magtugot kanimo sa pagkonektar sa console bisan gikan sa usa ka makina sa kape, kung kini nagdagan *nix ug adunay usa ka console mismo.

Kung kinahanglan nako nga tabonan kini nga isyu sa mas detalyado sa sulud sa kini nga nota, isulat sa mga komento. Kung makakuha kami igo nga mga boto, magsulat ako usa ka update bahin niini nga hilisgutan.

Ang pinakasayon ​​nga paagi sa paghatag ug katungod mao ang pinaagi sa web interface.

  1. Hunonga ang VM nga instance diin gikan ka magkonektar sa cloud console.
  2. Ablihi ang Mga Detalye sa Instance ug i-klik ayohon ninyo ang.
  3. Sa pinakaubos nga bahin sa panid, pilia ang instance access scope Bug-os nga pag-access sa tanang Cloud API.

    Screenshot
    Naghimo kami usa ka buluhaton sa pag-deploy sa GKE nga wala’y mga plugin, SMS o pagrehistro. Atong tan-awon ang ilawom sa dyaket ni Jenkins

  4. I-save ang imong mga pagbag-o ug ilunsad ang instance.

Kung nahuman na ang pagkarga sa VM, ikonektar kini pinaagi sa SSH ug siguroha nga ang koneksyon mahitabo nga wala’y sayup. Gamita ang sugo:

gcloud alpha cloud-shell ssh

Ang usa ka malampuson nga koneksyon ingon niini
Naghimo kami usa ka buluhaton sa pag-deploy sa GKE nga wala’y mga plugin, SMS o pagrehistro. Atong tan-awon ang ilawom sa dyaket ni Jenkins

I-deploy sa GKE

Tungod kay kami naningkamot sa tanan nga posible nga paagi aron hingpit nga mabalhin sa IaC (Infrastucture as a Code), ang among mga docker file gitipigan sa Git. Kini sa usa ka bahin. Ug ang pag-deploy sa mga kubernetes gihulagway sa usa ka yaml file, nga gigamit lamang niini nga buluhaton, nga sa iyang kaugalingon sama usab sa code. Kini gikan sa pikas nga bahin. Sa kinatibuk-an, gipasabut nako, ang plano mao kini:

  1. Gikuha namon ang mga kantidad sa mga variable BUILD_VERSION ug, opsyonal, ang mga kantidad sa mga variable nga ipasa ENV.
  2. I-download ang dockerfile gikan sa Git.
  3. Paghimo yaml alang sa pag-deploy.
  4. Gi-upload namo ang duha niini nga mga file pinaagi sa scp ngadto sa cloud console.
  5. Naghimo kami og usa ka sudlanan didto ug iduso kini sa rehistro sa Container
  6. Gipadapat namo ang load deployment file sa cuber.

Mas espesipiko ta. Sa higayon nga nagsugod kami sa paghisgot bahin sa ENV, unya hunahunaa kinahanglan naton nga ipasa ang mga kantidad sa duha nga mga parameter: PARAM1 ΠΈ PARAM2. Gidugang namon ang ilang buluhaton alang sa pag-deploy, tipo - Parameter sa String.

Screenshot
Naghimo kami usa ka buluhaton sa pag-deploy sa GKE nga wala’y mga plugin, SMS o pagrehistro. Atong tan-awon ang ilawom sa dyaket ni Jenkins

Maghimo kami og yaml sa usa ka yano nga pag-redirect alingawngaw sa pag-file. Gituohan, siyempre, nga naa ka sa imong dockerfile PARAM1 ΠΈ PARAM2nga ang load name mahimong nindot nga app, ug ang gitigom nga sudlanan nga adunay aplikasyon sa gipiho nga bersyon anaa sa Rehistro sa sudlanan padulong na gcr.io/awesomeapp/awesomeapp-$BUILD_VERSIONdiin $BUILD_VERSION bag-o lang gipili gikan sa drop-down list.

Paglista sa team

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 ahente human sa pagkonektar sa paggamit gcloud alpha cloud-shell ssh dili magamit ang interactive mode, mao nga nagpadala kami mga mando sa cloud console gamit ang parameter --pagmando.

Atong limpyohan ang home folder sa cloud console gikan sa daan nga dockerfile:

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

Ibutang ang bag-ong na-download nga dockerfile sa home folder sa cloud console gamit ang scp:

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

Among gikolekta, gi-tag ug giduso ang sudlanan ngadto sa Container registry:

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"

Gibuhat usab namo ang sama sa deployment file. Palihug timan-i nga ang mga sugo sa ubos naggamit sa tinumotumo nga mga ngalan sa cluster diin ang deployment mahitabo (awsm-cluster) ug ngalan sa proyekto (makalilisang-proyekto), diin nahimutang ang 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"

Gipadagan namo ang buluhaton, ablihan ang output sa console ug naglaum nga makita ang malampuson nga pagpundok sa sudlanan.

Screenshot
Naghimo kami usa ka buluhaton sa pag-deploy sa GKE nga wala’y mga plugin, SMS o pagrehistro. Atong tan-awon ang ilawom sa dyaket ni Jenkins

Ug dayon ang malampuson nga pag-deploy sa gitigum nga sudlanan

Screenshot
Naghimo kami usa ka buluhaton sa pag-deploy sa GKE nga wala’y mga plugin, SMS o pagrehistro. Atong tan-awon ang ilawom sa dyaket ni Jenkins

Ako gituyo nga wala magtagad sa kahimtang Ingress. Alang sa usa ka yano nga rason: sa higayon nga imong i-set up kini workload nga adunay gihatag nga ngalan, kini magpabilin nga magamit, bisan pila pa ka deployment nga adunay kini nga ngalan nga imong gihimo. Aw, sa kinatibuk-an, kini usa ka gamay nga lapas sa kasangkaran sa kasaysayan.

Inay mga konklusyon

Ang tanan nga mga lakang sa ibabaw tingali dili mahimo, apan nag-instalar lang sa pipila ka plugin para sa Jenkins, ang ilang muuulion. Apan sa pipila ka rason dili ko ganahan sa mga plugins. Aw, mas tukma, modangop lang ko nila tungod sa desperasyon.

Ug ganahan lang ko mukuha ug bag-ong topic para nako. Ang teksto sa ibabaw usa usab ka paagi sa pagpaambit sa mga nahibal-an nga akong nahimo samtang gisulbad ang problema nga gihulagway sa sinugdanan. Ipakigbahin sa mga tawo nga, sama kaniya, dili gayud usa ka makalilisang nga lobo sa devops. Kung ang akong mga nahibal-an makatabang bisan usa ka tawo, malipay ako.

Source: www.habr.com

Idugang sa usa ka comment