Mamorona asa fametrahana ao amin'ny GKE tsy misy plugins, SMS na fisoratana anarana. Andeha hojerentsika ny palitao Jenkins

Nanomboka izany rehetra izany rehefa nangataka anay ny lehiben'ny ekipan'ny fampandrosoana anay mba hanandrana ny fampiharana vaovaon'izy ireo, izay efa voatahiry ny andro talohan'izay. Navoakako izany. Rehefa afaka 20 minitra teo ho eo, dia nisy fangatahana fanavaozana ny fampiharana, satria nisy zavatra tena nilaina nampiana tao. Nohavaoziko. Aorian'ny adiny roa hafa... eny, azonao vinaniana izay hitranga manaraka...

Tsy maintsy ekeko fa kamo be aho (tsy niaiky izany ve aho teo aloha? Tsia?), Ary noho ny zava-misy fa ny mpitarika ny ekipa dia afaka miditra amin'i Jenkins, izay ananantsika ny CI / CD rehetra, dia nieritreritra aho hoe: avelao izy hametraka araka izay tiany! Tsaroako vazivazy hoe: omeo trondro ny lehilahy iray dia hohaniny indray andro; miantsoa olona iray Fed dia ho Fed izy mandritra ny androm-piainany. Ary nandeha milalao tetika amin'ny asa, izay afaka mametraka kaontenera misy ny fampiharana ny dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikan-dikanteny Kuber sy handefasana ny soatoavina rehetra ao aminy. Env (Ny raibeko, filΓ΄lΓ΄gy, mpampianatra anglisy taloha, dia nanodinkodina ny rantsan-tanany teo amin'ny tempoliny ary nijery ahy tamin'ny fomba mazava rehefa avy namaky ity fehezanteny ity).

Noho izany, amin'ity fanamarihana ity dia hilaza aminao ny fomba nianarako aho:

  1. Havaozy tsikelikely ny asa ao Jenkins avy amin'ny asa na avy amin'ny asa hafa;
  2. Ampifandraiso amin'ny console cloud (Cloud shell) avy amin'ny node iray misy ny Jenkins agent napetraka;
  3. Alefaso amin'ny Google Kubernetes Engine.


Raha ny marina, mazava ho azy fa somary tsy mivadika aho. Heverina fa manana ampahany farafaharatsiny amin'ny fotodrafitrasa ao amin'ny rahona Google ianao, ary noho izany dia mpampiasa azy ianao ary mazava ho azy fa manana kaonty GCP ianao. Tsy izany anefa no resahin’ity naoty ity.

Ity ny taratasy fitaka manaraka ahy. Tranga iray ihany no tiako hanoratra naoty toy izany: Nisedra olana aho, tamin'ny voalohany dia tsy haiko ny fomba hamahana azy, ny vahaolana dia tsy natao tamin'ny google efa vonona, ka dia nojereko tamin'ny google ny ampahany ary namaha ny olana tamin'ny farany. Ary amin'ny ho avy, rehefa adinoko ny fomba nanaovako azy, dia tsy mila mi-google ny zava-drehetra indray aho isaky ny manambatra azy, dia manoratra hosoka toy izany ny tenako.

Disclaimer: 1. Ny naoty dia nosoratana "ho ahy", ho an'ny anjara fampiharana tsara indrindra tsy mihatra. Faly aho mamaky ny safidy "tsara kokoa ny manao izany" ao amin'ny fanehoan-kevitra.
2. Raha heverina ho sira ny ampahany amin'ny naoty, dia toy ny naotiko rehetra teo aloha, ity dia vahaolana sira malemy.

Fanavaozana amin'ny fomba mavitrika ny toe-draharaha ao amin'ny Jenkins

Hitako mialoha ny fanontanianao: inona no ifandraisan'ny fanavaozana asa mavitrika amin'izany? Ampidiro amin'ny tanana ny sandan'ny mari-pamantarana tady dia mandehana ianao!

Namaly aho hoe: tena kamo aho, tsy tiako raha mitaraina izy ireo: Misha, miharatsy ny fametrahana, tsy misy intsony ny zava-drehetra! Manomboka mitady ianao, ary misy typo amin'ny sandan'ny mari-pamantarana fanombohana asa sasany. Noho izany, aleoko manao ny zava-drehetra araka izay azo atao. Raha azo atao ny manakana ny mpampiasa tsy hiditra mivantana amin'ny alΓ lan'ny fanomezana lisitr'ireo soatoavina azo isafidianana, dia mandamina ny fifantenana aho.

Ny drafitra dia izao: mamorona asa ao Jenkins izahay, izay, alohan'ny hanombohana, dia afaka misafidy dikan-teny avy amin'ny lisitra, mamaritra ny soatoavina ho an'ny mari-pamantarana alefa amin'ny container amin'ny alΓ lan'ny Env, dia angoniny ny kaontenera ary atsipiny ao amin'ny Rejistra Container. Avy eo dia alefa amin'ny cuber as ny kaontenera asan'izy miaraka amin'ny masontsivana voalaza ao amin'ny asa.

Tsy handinika ny fizotran'ny famoronana sy fametrahana asa ao Jenkins izahay, tsy lohahevitra izany. Heverintsika fa efa vonona ny asa. Mba hampiharana lisitra nohavaozina miaraka amin'ny dikan-teny dia mila zavatra roa isika: lisitry ny loharano efa misy miaraka amin'ny laharan'ny dikan-tsarimihetsika manan-kery ary ny fari-piainana toy ny Parameter safidy amin'ny asa. Amin'ny ohatra ataontsika, avelao ny fari-piainana nomena anarana BUILD_VERSION, tsy hiresaka amin’ny an-tsipiriany momba izany isika. Fa andeha hojerentsika akaiky ny lisitry ny loharano.

Tsy dia misy safidy maro. Nisy zavatra roa tonga tao an-tsaina avy hatrany:

  • Ampiasao ny API fidirana lavitra izay atolotr'i Jenkins ho an'ireo mpampiasa azy;
  • Angataho ny votoatin'ny lahatahiry fitehirizana lavitra (raha ny anay dia JFrog Artifactory ity, izay tsy zava-dehibe).

Jenkins Remote Access API

Araka ny fomban-drazana tena tsara napetraka dia aleoko misoroka ny fanazavana lava be.
Dikanteny maimaim-poana amin'ny andalana voalohany ihany no avelako pejy voalohany amin'ny antontan-taratasy API:

Jenkins dia manome API ho an'ny fidirana azo vakiana amin'ny milina lavitra amin'ny asany. <...> Ny fidirana lavitra dia atolotra amin'ny fomba mitovy amin'ny REST. Midika izany fa tsy misy teboka fidirana tokana amin'ny endri-javatra rehetra, fa URL toy ny ".../api/", Aiza"..." dia midika hoe zavatra ampiharana ny fahaizan'ny API.

Raha lazaina amin'ny teny hafa, raha misy ny asa fanapariahana resahina amin'izao fotoana izao http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_build, dia misy ny sioka API ho an'ity asa ity ao amin'ny http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_build/api/

Manaraka izany dia manana safidy amin'ny endrika ahoana no handraisana ny vokatra. Andao hifantoka amin'ny XML, satria ny API ihany no mamela ny sivana amin'ity tranga ity.

Andeha hojerentsika fotsiny ny lisitry ny asa rehetra. Ny anaran'ny fivoriambe ihany no mahaliana anay (anarana isehoana) sy ny vokany (vokatra):

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

Nahomby ve izany?

Andeha isika hanivana ireo hazakazaka izay miafara amin'ny vokatra ihany FETY. Andao hampiasa ny hevitra &hanisotra ary amin'ny maha-parametra antsika dia handalo azy ny lalana mankany amin'ny sanda tsy mitovy FETY. Eny eny. A double negative dia fanambarana. Esorinay daholo izay tsy mahaliana anay:

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

Pikantsary amin'ny lisitry ny fahombiazana
Mamorona asa fametrahana ao amin'ny GKE tsy misy plugins, SMS na fisoratana anarana. Andeha isika hijery ny palitao Jenkins

Eny, ho an'ny fialamboly fotsiny, andao ho azo antoka fa tsy namitaka antsika ny sivana (tsy mandainga mihitsy ny sivana!) ary mampiseho lisitr'ireo "tsy nahomby":

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

Pikantsary amin'ny lisitry ny tsy nahomby
Mamorona asa fametrahana ao amin'ny GKE tsy misy plugins, SMS na fisoratana anarana. Andeha isika hijery ny palitao Jenkins

Lisitry ny dikan-teny avy amin'ny lahatahiry iray amin'ny mpizara lavitra

Misy fomba faharoa hahazoana lisitry ny dikan-teny. Tiako kokoa noho ny fidirana amin'ny Jenkins API izany. Eny, satria raha nahomby ilay fampiharana, dia midika izany fa voafono ary napetraka ao amin'ny tahiry ao amin'ny lahatahiry mety. Tahaka ny, ny tahiry dia fitahirizana default amin'ny dikan-teny miasa. Toy ny. Eny ary, andeha hanontany azy hoe inona ny dikan-teny ao anaty tahiry. Hikororoka, grep ary awk ny lahatahiry lavitra izahay. Raha misy olona liana amin'ny oneliner, dia eo ambanin'ny spoiler.

baiko andalana iray
Azafady, mariho ny zavatra roa: Mampita ny antsipirian'ny fifandraisana ao amin'ny lohapejy aho ary tsy mila ny dikan-teny rehetra avy amin'ny lahatahiry, ary ireo izay noforonina tao anatin'ny iray volana ihany no nofidiko. Ahitsio ny baiko hifanaraka amin'ny zava-misy sy ilainao:

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

Mametraka asa sy rakitra fikirakirana asa ao Jenkins

Hitanay ny loharanon'ny lisitry ny dikan-teny. Andeha isika izao hampiditra ny lisitry ny vokatra ao amin'ny asa. Ho ahy, ny vahaolana mazava dia ny manampy dingana iray amin'ny asa fananganana fampiharana. Ny dingana hotanterahina raha toa ka "fahombiazana" ny vokatra.

Sokafy ny firafitry ny asa fivoriambe ary midira mankany amin'ny farany ambany. Tsindrio ny bokotra: Ampio dingana fananganana -> dingana misy fepetra (tokana). Ao amin'ny fikandrana dingana, safidio ny fepetra Sata fananganana ankehitriny, mametraka ny sandany FETY, ny hetsika hatao raha mahomby Alefaso ny baiko shell.

Ary izao ny ampahany mahafinaritra. Jenkins dia mitahiry ny fandrindrana asa ao anaty rakitra. Amin'ny endrika XML. Teny an-dalana http://ΠΏΡƒΡ‚ΡŒ-Π΄ΠΎ-задания/config.xml Arak'izany dia azonao atao ny misintona ny rakitra fanamafisana, manitsy azy araka izay ilaina ary avereno any amin'ny toerana nahazoanao azy.

Tsarovy fa nifanaiky tetsy ambony izahay fa hamorona paramètre ho an'ny lisitry ny dikan-teny BUILD_VERSION?

Andao hisintona ny fichier configuration ary hojerentsika ny ao anatiny. Mba hahazoana antoka fotsiny fa ny parameter dia eo amin'ny toerany sy ny karazana tiana.

Pikantsary eo ambanin'ny spoiler.

Tokony hitovy amin'izany ny sombiny config.xml anao. Afa-tsy hoe mbola tsy hita ny votoatin'ny singa safidy
Mamorona asa fametrahana ao amin'ny GKE tsy misy plugins, SMS na fisoratana anarana. Andeha isika hijery ny palitao Jenkins

Azonao antoka ve izany? Izay ihany, andao hanoratra script izay hotanterahina raha mahomby ny fananganana.
Hahazo lisitry ny dikan-teny ny script, alaivo ny rakitra fikirakirana, soraty ao amin'ny toerana ilaintsika ny lisitry ny dikan-teny, ary avereno avy eo. Eny. Marina izany. Manorata lisitry ny dikan-teny amin'ny XML eo amin'ny toerana efa misy lisitry ny dikan-teny (dia ho avy, aorian'ny fandefasana voalohany ny script). Fantatro fa mbola misy mpankafy masiaka ny fanehoan-kevitra mahazatra eto amin'izao tontolo izao. Tsy an'izy ireo aho. Apetraho azafady xmlstarler mankany amin'ny milina izay hanovana ny config. Amiko dia tsy lafo loatra izany mba hialana amin'ny fanitsiana XML amin'ny fampiasana sed.

Eo ambanin'ny mpandroba, dia manolotra ny code izay manatanteraka ny filaharana etsy ambony aho manontolo.

Manorata lisitry ny dikan-teny avy amin'ny lahatahiry iray amin'ny mpizara lavitra mankany amin'ny 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

Raha tianao ny safidy hahazoana dikan-teny avy amin'i Jenkins ary kamo toa ahy ianao, dia eo ambanin'ny mpandroba dia ny kaody mitovy, fa lisitra avy amin'i Jenkins:

Manorata lisitry ny dikan-teny avy amin'i Jenkins mankany amin'ny config
Ataovy ao an-tsaina fotsiny izao: ny anaram-pivorianako dia misy laharan'ny filaharana sy laharan'ny dikan-teny, misaraka amin'ny tsinay. Noho izany, awk dia manapaka ny ampahany tsy ilaina. Ho anao, ovay ity andalana ity hifanaraka amin'ny filanao.

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

Amin'ny teoria, raha nanandrana ny kaody nosoratana mifototra amin'ireo ohatra etsy ambony ianao, dia amin'ny asa fametrahana dia tokony efa manana lisitra midina misy dikan-teny ianao. Toy ny amin'ny pikantsary eo ambanin'ny mpandroba.

Lisitry ny dikan-teny vita tsara
Mamorona asa fametrahana ao amin'ny GKE tsy misy plugins, SMS na fisoratana anarana. Andeha isika hijery ny palitao Jenkins

Raha mandeha ny zava-drehetra, dia kopia-mametaka ny script ao Alefaso ny baiko shell ary tehirizo ny fanovana.

Mifandray amin'ny Cloud shell

Manana mpanangona ao anaty kaontenera izahay. Mampiasa ny Ansible izahay ho fitaovana fanaterana fampiharana sy mpitantana ny fandrindrana. Noho izany, raha ny momba ny fananganana kaontenera dia misy safidy telo tonga ao an-tsaina: apetraho ao amin'ny Docker ny Docker, apetraho amin'ny milina mandeha Ansible i Docker, na manangana container ao anaty console cloud. Nanaiky izahay hangina momba ny plugins ho an'i Jenkins ato amin'ity lahatsoratra ity. Tadidinao?

Nanapa-kevitra aho: tsara, satria azo angonina ao amin'ny console cloud ny kaontenera "avy ao anaty boaty", maninona no manelingelina? Ataovy madio tsara, sa tsy izany? Te-hanangona ny kaontenera Jenkins ao amin'ny console cloud aho, ary avy eo dia apetraho ao anaty cuber avy eo. Ankoatra izany, Google dia manana fantsona tena manankarena ao anatin'ny fotodrafitrasany, izay hisy fiantraikany tsara amin'ny hafainganam-pandehan'ny fametrahana.

Raha te hifandray amin'ny console cloud dia mila zavatra roa ianao: gcloud ary ny zo hidirana amin'ny Google Cloud API ho an'ny ohatra VM izay hanaovana io fifandraisana io ihany.

Ho an'ireo izay mikasa ny hifandray tsy avy amin'ny Google cloud mihitsy
Google dia mamela ny mety hanesorana ny fanomezan-dΓ lana mifanandrify amin'ny serivisy. Izany dia ahafahanao mifandray amin'ny console na dia amin'ny milina kafe aza, raha mandeha *nix izy ary manana console mihitsy.

Raha toa ka misy ilana ahy ny handrakotra ity olana ity amin'ny antsipiriany kokoa ao anatin'ity naoty ity dia manorata ao amin'ny fanehoan-kevitra. Raha mahazo vato ampy isika dia hanoratra fanavaozana momba ity lohahevitra ity.

Ny fomba tsotra indrindra hanomezana zo dia amin'ny alΓ lan'ny interface interface.

  1. Atsaharo ny ohatra VM izay hifandraisanao amin'ny console cloud avy eo.
  2. Sokafy Instance Details ary tsindrio ataovy tsara.
  3. Eo amin'ny faran'ny pejy, safidio ny sahan'ny fidirana ohatra Fidirana feno amin'ny Cloud API rehetra.

    БкÑ € инÑоÑ,
    Mamorona asa fametrahana ao amin'ny GKE tsy misy plugins, SMS na fisoratana anarana. Andeha isika hijery ny palitao Jenkins

  4. Tehirizo ny fanovanao ary atombohy ny ohatra.

Raha vantany vao vita ny VM dia ampifandraiso amin'ny SSH ary ataovy azo antoka fa tsy misy hadisoana ny fifandraisana. Ampiasao ny baiko:

gcloud alpha cloud-shell ssh

Ny fifandraisana mahomby dia toa tahaka izao
Mamorona asa fametrahana ao amin'ny GKE tsy misy plugins, SMS na fisoratana anarana. Andeha isika hijery ny palitao Jenkins

Apetraho amin'ny GKE

Koa satria miezaka amin'ny fomba rehetra azo atao isika mba hifindra tanteraka amin'ny IaC (Infrastucture as a Code), dia voatahiry ao amin'ny Git ny rakitra docker. Izany dia amin'ny lafiny iray. Ary ny fametrahana ao amin'ny kubernetes dia faritana amin'ny rakitra yaml, izay ampiasaina amin'ity asa ity ihany, izay mitovy amin'ny code ihany koa. Ity dia avy amin'ny andaniny. Amin'ny ankapobeny, ny tiako holazaina dia izao ny drafitra:

  1. Raisinay ny sandan'ny variables BUILD_VERSION ary, raha tsy izany, ny sandan'ny fari-piainana izay handalo Env.
  2. Ampidino ny dockerfile avy amin'ny Git.
  3. Mamorona yaml ho an'ny fametrahana.
  4. Mampakatra ireo rakitra roa ireo amin'ny alΓ lan'ny scp mankany amin'ny console cloud izahay.
  5. Manangana kaontenera eo izahay ary manosika azy ao amin'ny rejisitra Container
  6. Mampihatra ny rakitra fandefasana entana amin'ny cuber izahay.

Aoka ho voafaritra kokoa. Indray mandeha dia nanomboka niresaka momba ny Env, dia eritrereto hoe mila mandalo ny sandan'ny paramètre roa isika: PARAM1 и PARAM2. Ampiantsika ny asany amin'ny fametrahana, karazana - String Parameter.

БкÑ € инÑоÑ,
Mamorona asa fametrahana ao amin'ny GKE tsy misy plugins, SMS na fisoratana anarana. Andeha isika hijery ny palitao Jenkins

Hamorona yaml miaraka amin'ny redirection tsotra izahay RuNet mametraka. Heverina, mazava ho azy, fa manana ao amin'ny dockerfile anao ianao PARAM1 ΠΈ PARAM2fa ny anaran'ny entana dia ho awesomeapp, ary ny kaontenera tafavory miaraka amin'ny fampiharana ny dikan-teny voafaritra dia mipetraka ao Rejistra kaontenera eny an-dΓ lana gcr.io/awesomeapp/awesomeapp-$BUILD_VERSIONizay $BUILD_VERSION vao nofantenana avy amin'ny lisitra midina.

Lisitry ny ekipa

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 agent rehefa avy nifandray tamin'ny fampiasana gcloud alpha cloud-shell ssh Tsy misy ny maodely interactive, noho izany dia mandefa baiko amin'ny console cloud izahay amin'ny fampiasana ny parameter --baiko.

Manadio ny lahatahiry an-trano ao amin'ny console cloud avy amin'ny dockerfile taloha izahay:

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

Apetraho ao amin'ny lahatahiry an-tranon'ny console cloud ny dockerfile vao alaina amin'ny alΓ lan'ny scp:

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

Manangona, manisy marika ary manosika ny kaontenera any amin'ny rejisitra Container izahay:

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"

Manao toy izany koa izahay amin'ny rakitra fametrahana. Mariho fa ny baiko etsy ambany dia mampiasa anarana noforonin'ny cluster misy ny fametrahana (awsm-cluster) sy ny anaran'ny tetikasa (awesome-tetikasa), izay misy ny 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"

Manao ny asa izahay, sokafy ny vokatra console ary manantena ny hahita ny fivorian'ny fitoeran-javatra mahomby.

БкÑ € инÑоÑ,
Mamorona asa fametrahana ao amin'ny GKE tsy misy plugins, SMS na fisoratana anarana. Andeha isika hijery ny palitao Jenkins

Ary avy eo dia nahomby ny fametrahana ny kaontenera nivory

БкÑ € инÑоÑ,
Mamorona asa fametrahana ao amin'ny GKE tsy misy plugins, SMS na fisoratana anarana. Andeha isika hijery ny palitao Jenkins

Niniako tsy noraharahiako ilay toerana Ingress. Noho ny antony tsotra iray: rehefa apetrakao asan'izy miaraka amin'ny anarana nomena, dia hijanona ho miasa izy io, na firy na firy ny fametrahana an'io anarana io ataonao. Eny ary, amin'ny ankapobeny, ity dia mihoatra lavitra noho ny tantara.

Raha tokony ho fehin-kevitra

Ireo dingana rehetra voalaza etsy ambony ireo dia mety tsy ho vita, fa nametraka plugin fotsiny ho an'i Jenkins, ny muuulion. Saingy noho ny antony tsy tiako ny plugins. Raha ny marimarina kokoa, noho ny famoizam-po fotsiny no ianteherako amin'izy ireo.

Ary tiako ny maka lohahevitra vaovao ho ahy. Ity lahatsoratra etsy ambony ity koa dia fomba iray hizarana ny zavatra hitako nandritra ny famahana ny olana voalaza tany am-boalohany. Zarao amin'ireo izay, toa azy, dia tsy amboadia mahatsiravina amin'ny devops. Raha manampy olona farafaharatsiny ny zavatra hitako dia ho faly aho.

Source: www.habr.com

Add a comment