GKEn inplementazio-zeregin bat sortzen dugu plugin, SMS edo erregistrorik gabe. Eman dezagun begirada bat Jenkinsen jakaren azpian

Dena hasi zen gure garapen-taldeetako baten taldeko buruak euren aplikazio berria probatzeko eskatu zigunean, bezperan edukiontziz osatuta zegoena. argitaratu dut. 20 bat minuturen buruan, aplikazioa eguneratzeko eskaera jaso zen, oso beharrezkoa den gauza bat gehitu baitzen bertan. berritu nuen. Beste ordu pare bat igaro ondoren... beno, asma dezakezue zer hasi zen gero gertatzen...

Aitortu behar dut, nahiko alferra naizela (ez al nuen lehenago aitortu? Ez?), eta talde-buruek Jenkins-era sarbidea dutela kontuan hartuta, zeinetan CI/CD guztiak ditugun, pentsatu nuen: utz dezala heda dezala. berak nahi adina! Txiste bat gogoratu nuen: gizon bati arraina eman eta egun batez jango du; deitu pertsona bati Fed eta bere bizitza osoan Fed izango da. Eta joan zen jo ezazu trikimailuak lanean, Kuber-en arrakastaz eraikitako edozein bertsioren aplikazioa duen edukiontzi bat zabaldu eta hari edozein balio transferitzeko gai izango litzateke. ENV (nire aitonak, filologoa, lehen ingeles irakaslea, orain bere atzamarra biraka egiten zion tenpluari eta esaldi hau irakurri ondoren oso adierazgarri begiratzen zidan).

Beraz, ohar honetan nola ikasi nuen kontatuko dizuet:

  1. Jenkinsen lanpostuak dinamikoki eguneratu lanetik bertatik edo beste lanpostu batzuetatik;
  2. Konektatu hodeiko kontsolara (Cloud shell) Jenkins agentea instalatuta duen nodo batetik;
  3. Inplementatu lan-karga Google Kubernetes Engine-n.


Izan ere, noski, gaizto samarra naiz. Suposatzen da azpiegituraren zati bat gutxienez Google hodeian duzula, eta, beraz, haren erabiltzailea zarela eta, noski, GCP kontu bat duzula. Baina ez da horri buruz ohar hau.

Hau da nire hurrengo iruzurra orria. Horrelako oharrak kasu batean bakarrik idatzi nahi ditut: arazo baten aurrean nengoen, hasieran ez nekien nola konpondu, irtenbidea ez zen Googlen bilatu prest, beraz, zatika Googlen bilatu nuen eta azkenean arazoa konpondu nuen. Eta horrela, etorkizunean, nola egin nuen ahazten dudanean, ez dudan dena berriro google zatika zatika eta elkarrekin konpilatu behar, nik neuk idazten ditut halako tranpa-orriak.

Legezko oharra: 1. Oharra β€œniretzat” idatzi zen, papererako jardunbide egokien ez da aplikatzen. Pozik nago iruzkinetan "hobe izango zen horrela egitea" aukerak.
2. Aplikaturiko notaren zatia gatztzat hartzen bada, orduan, nire aurreko ohar guztiak bezala, hau gatz-soluzio ahula da.

Jenkins-en lan-ezarpenak dinamikoki eguneratzen

Zure galdera aurreikusten dut: zer zerikusi du lan-eguneratze dinamikoak? Sartu kate-parametroaren balioa eskuz eta hara!

Erantzuten dut: oso alferra naiz, ez zait gustatzen kexatzen direnean: Misha, hedapena huts egiten ari da, dena desagertu da! Bilatzen hasten zara, eta akats bat dago ataza abiarazteko parametro batzuen balioan. Horregatik, nahiago dut dena ahalik eta modu eraginkorrenean egitea. Posible bada erabiltzaileari datuak zuzenean sartzea eragotzi ordez aukeratzeko balioen zerrenda emanez, orduan aukeraketa antolatzen dut.

Plana hau da: Jenkins-en lan bat sortzen dugu, eta bertan, abiarazi aurretik, zerrendako bertsio bat hauta genezake, edukiontzira igarotzen diren parametroen balioak zehaztu. ENV, gero edukiontzia biltzen du eta Edukiontzien Erregistrora bultzatzen du. Ondoren, hortik edukiontzia kuberean jaurtitzen da lan karga lanean zehaztutako parametroekin.

Ez dugu kontuan hartuko Jenkinsen lanpostu bat sortzeko eta ezartzeko prozesua, hau gaiz kanpokoa da. Eginkizuna prest dagoela suposatuko dugu. Bertsioekin zerrenda eguneratua ezartzeko, bi gauza behar ditugu: lehendik dagoen iturburu-zerrenda bat a priori baliozko bertsio-zenbakiekin eta aldagai bat. Aukera-parametroa zereginean. Gure adibidean, aldagaiari izena eman behar zaio BUILD_VERSION, ez gara horretan sakonduko. Baina ikus dezagun hurbilagotik iturri-zerrenda.

Ez dago hainbeste aukera. Berehala bi gauza etorri zitzaizkidan burura:

  • Erabili Jenkinsek erabiltzaileei eskaintzen dien Remote Access APIa;
  • Eskatu urruneko biltegiaren karpetaren edukia (gure kasuan JFrog Artifactory da, eta hori ez da garrantzitsua).

Jenkins Urruneko sarbidea APIa

Ezarritako tradizio bikainaren arabera, nahiago nuke azalpen luzeak saihestu.
Lehenengo paragrafoko zati baten itzulpen librea baino ez dut onartuko APIaren dokumentazioaren lehen orrialdea:

Jenkinsek API bat eskaintzen du urruneko makinaz irakur daitekeen bere funtzionalitaterako. <…> Urruneko sarbidea REST moduko estiloan eskaintzen da. Horrek esan nahi du ez dagoela funtzio guztietarako sarrera puntu bakar bat, baizik eta " bezalako URL bat baizik..../api/", Non "..." API gaitasunak aplikatzen zaizkion objektua esan nahi du.

Beste era batera esanda, une honetan hitz egiten ari garen hedapen-ataza eskuragarri badago http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_build, orduan ataza honetarako API txistuak helbidean daude eskuragarri http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_build/api/

Ondoren, aukera dugu irteera zein formatan jaso. Zentratu gaitezen XML-en, APIak kasu honetan soilik iragaztea ahalbidetzen baitu.

Saia gaitezen lan-exekuzio guztien zerrenda bat lortzen. Batzarraren izena bakarrik interesatzen zaigu (bistaratzeko izena) eta bere emaitza (ondorioz):

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

Egin al da lan?

Orain iragaz ditzagun emaitzarekin amaitzen diren lasterketak soilik SUCCESS. Erabili dezagun argumentua &baztertu eta parametro gisa berdina ez den balio batera pasako diogu bidea SUCCESS. Bai bai. Ezezko bikoitza adierazpena da. Interesatzen ez zaigun guztia baztertzen dugu:

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

Arrakastatsuen zerrendaren pantaila-argazkia
GKEn inplementazio-zeregin bat sortzen dugu plugin, SMS edo erregistrorik gabe. Eman dezagun begirada bat Jenkinsen jakaren azpian

Beno, ondo pasatzeko, ziurtatu iragazkiak ez gaituela engainatu (iragazkiak ez dute inoiz gezurrik esaten!) eta bistaratu "arrakastarik gabeko" zerrenda bat:

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

Arrakastarik ez dutenen zerrendaren pantaila-argazkia
GKEn inplementazio-zeregin bat sortzen dugu plugin, SMS edo erregistrorik gabe. Eman dezagun begirada bat Jenkinsen jakaren azpian

Urruneko zerbitzari bateko karpeta bateko bertsioen zerrenda

Bertsioen zerrenda lortzeko bigarren modu bat dago. Jenkins APIra sartzea baino are gehiago gustatzen zait. Beno, aplikazioa behar bezala eraiki bada, dagokion karpetan paketatu eta biltegian jarri dela esan nahi du. Esaterako, biltegi bat aplikazioen lan-bertsioen biltegiratze lehenetsia da. Atsegin dut. Tira, galde diezaiogun zein bertsio dauden biltegiratuta. Urruneko karpeta kizkurtu, grep eta awk egingo dugu. Inork oneliner interesa badu, orduan spoiler azpian dago.

Lerro bakarreko komandoa
Kontuan izan bi gauza: goiburuan konexioaren xehetasunak pasatzen ditut eta ez ditut karpetako bertsio guztiak behar, eta hilabeteko epean sortutakoak bakarrik hautatzen ditut. Editatu komandoa zure errealitate eta beharretara egokitzeko:

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

Jenkins-en lanpostuak eta lana konfiguratzeko fitxategia konfiguratzea

Bertsioen zerrendaren iturria asmatu dugu. Sar dezagun orain ondoriozko zerrenda zereginean. Niretzat, irtenbide agerikoa zen aplikazioa eraikitzeko zereginean urrats bat gehitzea. Emaitza "arrakasta" balitz egingo litzatekeen urratsa.

Ireki muntaketa-zereginen ezarpenak eta joan behealdera. Egin klik botoietan: Gehitu eraikitze urratsa -> Baldintzapeko urratsa (bakarra). Urratsaren ezarpenetan, hautatu baldintza Gaur egungo eraikuntza-egoera, ezarri balioa SUCCESS, arrakasta izanez gero egin beharreko ekintza Exekutatu shell komandoa.

Eta orain parte dibertigarria. Jenkinsek lan-konfigurazioak fitxategietan gordetzen ditu. XML formatuan. Bidean zehar http://ΠΏΡƒΡ‚ΡŒ-Π΄ΠΎ-задания/config.xml Horren arabera, konfigurazio-fitxategia deskarga dezakezu, behar den moduan editatu eta lortu duzun lekuan jarri berriro.

Gogoratu, goian adostu genuen parametro bat sortuko dugula bertsioen zerrendarako BUILD_VERSION?

Deskargatu dezagun konfigurazio-fitxategia eta begira diezaiogun barruan. Parametroa lekuan dagoela eta nahi den motakoa dela ziurtatzeko.

Pantaila-argazkia spoiler azpian.

Zure config.xml zatiak itxura bera beharko luke. Aukerak elementuaren edukiak oraindik falta direla izan ezik
GKEn inplementazio-zeregin bat sortzen dugu plugin, SMS edo erregistrorik gabe. Eman dezagun begirada bat Jenkinsen jakaren azpian

Ziur zaude? Hori da, idatz dezagun eraikuntza arrakastatsua bada exekutatuko den script bat.
Scriptak bertsioen zerrenda jasoko du, konfigurazio fitxategia deskargatuko du, bertsioen zerrenda idatzi behar dugun lekuan eta, ondoren, berriro jarri. Bai. Hori bai. Idatzi bertsioen zerrenda XML-n dagoeneko bertsioen zerrenda dagoen tokian (etorkizunean izango da, script-a lehen abian jarri ondoren). Badakit oraindik ere adierazpen erregularren zale amorratuak daudela munduan. Ez naiz haiena. Mesedez, instalatu xmlstarler konfigurazioa editatuko den makinara. Iruditzen zait hau ez dela ordaindu beharreko prezio handia sed erabiliz XML editatzea saihesteko.

Spoiler azpian, goiko sekuentzia osorik egiten duen kodea aurkezten dut.

Idatzi urruneko zerbitzariko karpeta batetik bertsioen zerrenda konfiguraziora

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

Jenkins-en bertsioak lortzeko aukera nahiago baduzu eta ni bezain alferra bazara, orduan spoiler azpian kode bera dago, baina Jenkinsen zerrenda bat:

Idatzi Jenkins-etik konfiguraziorako bertsioen zerrenda
Kontuan izan hau: nire muntaiaren izena sekuentzia-zenbaki batek eta bertsio-zenbaki batek osatzen dute, bi puntuz bereizita. Horren arabera, awk-ek beharrezkoa ez den zatia mozten du. Zuretzat, aldatu lerro hau zure beharretara egokitzeko.

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

Teorian, goiko adibideetan oinarrituta idatzitako kodea probatu baduzu, hedapen-atazan dagoeneko bertsioekin goitibeherako zerrenda bat izan beharko zenuke. Spoiler azpian dagoen pantaila-argazkian bezala dago.

Bertsioen zerrenda behar bezala beteta
GKEn inplementazio-zeregin bat sortzen dugu plugin, SMS edo erregistrorik gabe. Eman dezagun begirada bat Jenkinsen jakaren azpian

Dena funtzionatu badu, kopiatu-itsatsi scripta Exekutatu shell komandoa eta gorde aldaketak.

Cloud shell-era konektatzen

Biltzaileak edukiontzietan ditugu. Ansible gure aplikazioak entregatzeko tresna eta konfigurazio kudeatzaile gisa erabiltzen dugu. Horren arabera, edukiontziak eraikitzeko orduan, hiru aukera etortzen zaizkigu burura: Docker Docker-en instalatzea, Docker instalatzea Ansible exekutatzen duen makina batean edo edukiontziak hodeiko kontsola batean eraikitzea. Jenkins-en pluginei buruz isilik egotea adostu genuen artikulu honetan. Gogoratzen?

Erabaki nuen: beno, hodeiko kontsolan edukiontziak "kutxatik kanpo" bildu daitezkeenez, orduan zergatik traba? Mantendu garbi, ezta? Jenkins ontziak hodeiko kontsolan bildu nahi ditut, eta, gero, bertatik kuberera abiarazi. Gainera, Google-k oso kanal aberatsak ditu bere azpiegituren barruan, eta horrek eragin onuragarria izango du hedapenaren abiaduran.

Hodeiko kontsolara konektatzeko, bi gauza behar dituzu: gcloud eta sarbide-eskubideak Google Cloud APIa konexio hori bera egingo den VM instantziarako.

Google hodeitik ez konektatzeko asmoa dutenentzat
Google-k baimen interaktiboa desgaitzeko aukera ematen du bere zerbitzuetan. Honek kontsolara konektatzeko aukera emango dizu kafe-makina batetik ere, *nix exekutatzen ari bada eta kontsola bera badu.

Ohar honen esparruan gai hau zehatzago landu behar badut, idatzi iruzkinetan. Nahiko boto lortzen baditugu, gai honi buruzko eguneraketa bat idatziko dut.

Eskubideak emateko modurik errazena web interfazea da.

  1. Gelditu hodeiko kontsolara konektatuko zaren VM instantzia.
  2. Ireki Instantziaren xehetasunak eta egin klik Aldatu.
  3. Orriaren behealdean, hautatu instantzia atzitzeko esparrua Sarbide osoa Hodeiko API guztietarako.

    screenshot
    GKEn inplementazio-zeregin bat sortzen dugu plugin, SMS edo erregistrorik gabe. Eman dezagun begirada bat Jenkinsen jakaren azpian

  4. Gorde aldaketak eta abiarazi instantzia.

VM kargatzen amaitu ondoren, konektatu SSH bidez eta ziurtatu konexioa errorerik gabe gertatzen dela. Erabili komandoa:

gcloud alpha cloud-shell ssh

Konexio arrakastatsu batek horrelako zerbait du
GKEn inplementazio-zeregin bat sortzen dugu plugin, SMS edo erregistrorik gabe. Eman dezagun begirada bat Jenkinsen jakaren azpian

Inplementatu GKE-n

IaC-ra (Azpiegitura Kode gisa) guztiz aldatzeko modu guztietan saiatzen ari garenez, gure docker fitxategiak Git-en gordetzen dira. Hau da, alde batetik. Eta kubernetes-en inplementazioa yaml fitxategi batek deskribatzen du, zeregin honek bakarrik erabiltzen duena, bera ere kodea bezalakoa dena. Hau beste alde batetik. Oro har, esan nahi dut plana hau da:

  1. Aldagaien balioak hartzen ditugu BUILD_VERSION eta, aukeran, pasatuko diren aldagaien balioak ENV.
  2. Deskargatu dockerfile Git-etik.
  3. Sortu yaml hedatzeko.
  4. Bi fitxategi hauek scp bidez igotzen ditugu hodeiko kontsolara.
  5. Bertan edukiontzi bat eraikitzen dugu eta edukiontzien erregistrora bultzatzen dugu
  6. Karga inplementatzeko fitxategia kuberari aplikatzen diogu.

Izan gaitezen zehatzago. Behin horri buruz hitz egiten hasi ginen ENV, orduan demagun bi parametroren balioak pasatu behar ditugula: PARAM1 ΠΈ PARAM2. Beren zeregina gehitzen dugu hedatzeko, idatzi - Katearen parametroa.

screenshot
GKEn inplementazio-zeregin bat sortzen dugu plugin, SMS edo erregistrorik gabe. Eman dezagun begirada bat Jenkinsen jakaren azpian

Yaml sortuko dugu birbideratze sinple batekin galdu artxibatzeko. Suposatzen da, noski, zure dockerfilean duzula PARAM1 ΠΈ PARAM2karga-izena izango dela awesomeapp, eta zehaztutako bertsioaren aplikazioarekin muntatutako edukiontzia bertan dago Edukiontzien erregistroa bidean gcr.io/awesomeapp/awesomeapp-$BUILD_VERSIONNon $BUILD_VERSION goitibeherako zerrendatik hautatu berri da.

Taldeen zerrenda

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 agentea erabiliz konektatu ondoren gcloud alpha cloud-shell ssh modu interaktiboa ez dago erabilgarri, beraz, komandoak hodeiko kontsolara bidaltzen ditugu parametroa erabiliz --agindu.

Hodeiko kontsolan hasierako karpeta garbitzen dugu dockerfile zaharretik:

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

Jarri deskargatu berri den dockerfile hodeiko kontsolaren etxeko karpetan scp erabiliz:

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

Edukiontzia jaso, etiketatu eta edukiontzien erregistrora eramaten dugu:

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"

Gauza bera egiten dugu inplementazio fitxategiarekin. Kontuan izan beheko komandoek inplementazioa gertatzen den klusterraren fikziozko izenak erabiltzen dituztela (awsm-kluster) eta proiektuaren izena (ikaragarria-proiektua), non kluster kokatzen den.

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"

Ataza exekutatzen dugu, kontsolaren irteera ireki eta edukiontziaren muntaketa arrakastatsua ikustea espero dugu.

screenshot
GKEn inplementazio-zeregin bat sortzen dugu plugin, SMS edo erregistrorik gabe. Eman dezagun begirada bat Jenkinsen jakaren azpian

Eta gero muntatutako edukiontziaren hedapen arrakastatsua

screenshot
GKEn inplementazio-zeregin bat sortzen dugu plugin, SMS edo erregistrorik gabe. Eman dezagun begirada bat Jenkinsen jakaren azpian

Nahita baztertu nuen ezarpena Ingress. Arrazoi sinple batengatik: behin konfiguratuta lan karga izen batekin, funtzionatzen jarraituko du, izen honekin zenbat inplementazio egiten dituzun. Beno, oro har, hau historiaren esparrutik apur bat kanpo dago.

Ondorioen ordez

Goiko urrats guztiak ziurrenik ezin izan ziren egin, baina besterik gabe instalatu besterik ez dago Jenkins-en plugin bat, haien muuulion. Baina arrazoiren batengatik ez zaizkit pluginak gustatzen. Tira, zehatzago esanda, etsipenagatik bakarrik jotzen dut haietara.

Eta niri gai berri bat jasotzea gustatzen zait. Goiko testua hasiera-hasieran deskribatutako arazoa konpontzean egindako aurkikuntzak partekatzeko modu bat ere bada. Partekatu, bera bezala, batere otso latz bat devopetan ez direnekin. Nire aurkikuntzak norbaiti behintzat laguntzen badiote, pozik egongo naiz.

Iturria: www.habr.com

Gehitu iruzkin berria