Peb tsim txoj haujlwm xa tawm hauv GKE yam tsis muaj plugins, SMS lossis sau npe. Cia peb saib hauv qab Jenkins lub tsho

Txhua yam pib thaum pab pawg thawj coj ntawm ib pab pawg txhim kho thov kom peb sim lawv daim ntawv thov tshiab, uas tau ntim rau hnub ua ntej. kuv tso nws. Tom qab li 20 feeb, tau txais ib daim ntawv thov kom hloov kho daim ntawv thov, vim hais tias ib qho tseem ceeb heev tau ntxiv rau ntawd. Kuv rov ua dua tshiab. Tom qab ob peb teev ... zoo, koj tuaj yeem twv seb yuav pib tshwm sim tom ntej ...

Kuv yuav tsum lees, kuv tub nkeeg heev (Kuv puas tsis lees paub qhov no ua ntej? Tsis yog?), thiab muab qhov tseeb tias pab pawg ua haujlwm tau nkag mus rau Jenkins, uas peb muaj tag nrho CI / CD, Kuv xav tias: cia nws xa mus raws li ntau npaum li nws xav! Kuv nco qab hais tias: muab ib tug txiv neej ib tug ntses thiab nws yuav noj rau ib hnub; hu ib tug neeg Fed thiab nws yuav Fed tag nrho nws lub neej. Thiab tau mus ua si tricks ntawm txoj hauj lwm, uas yuav tuaj yeem xa mus rau lub thawv uas muaj daim ntawv thov ntawm ib qho kev ua tiav ua tiav rau hauv Kuber thiab hloov cov txiaj ntsig rau nws. ENV (Kuv yawg, ib tug kws qhia lus Askiv, tus kws qhia lus Askiv yav dhau los, tam sim no yuav nplawm nws tus ntiv tes rau ntawm nws lub tuam tsev thiab saib kuv zoo siab tom qab nyeem kab lus no).

Yog li, hauv daim ntawv no kuv yuav qhia koj li cas kuv tau kawm:

  1. Dynamically hloov kho txoj haujlwm hauv Jenkins los ntawm txoj haujlwm nws tus kheej lossis los ntawm lwm txoj haujlwm;
  2. Txuas mus rau huab console (Hloov plhaub) los ntawm lub pob nrog tus neeg sawv cev Jenkins ntsia;
  3. Xa ua haujlwm rau Google Kubernetes Cav.


Qhov tseeb, kuv yog, ntawm chav kawm, ua me ntsis disingenuous. Nws yog xav tias koj muaj tsawg kawg yog ib feem ntawm cov infrastructure hauv Google huab, thiab, yog li ntawd, koj yog nws cov neeg siv thiab, ntawm chav kawm, koj muaj ib tug GCP account. Tab sis qhov ntawd tsis yog qhov ntawv no hais txog.

Nov yog kuv daim ntawv cuav tom ntej. Kuv tsuas yog xav sau cov ntawv no hauv ib rooj plaub: Kuv tau ntsib teeb meem, Kuv pib tsis paub yuav daws li cas, kev daws teeb meem tsis yog googled npaj ua, yog li kuv googled nws hauv qhov chaw thiab thaum kawg daws qhov teeb meem. Thiab yog li ntawd yav tom ntej, thaum kuv hnov ​​​​qab tias kuv tau ua li cas, kuv tsis tas yuav google txhua yam ntxiv ib zaug thiab muab sau ua ke, kuv sau kuv tus kheej li cov ntawv dag.

Disclaimer: 1. Daim ntawv sau "rau kuv tus kheej", rau lub luag haujlwm muaj kev coj ua zoo tshaj plaws tsis siv. Kuv zoo siab nyeem cov "nws yuav zoo dua ua li no" cov kev xaiv hauv cov lus.
2. Yog hais tias daim ntawv thov ntawm daim ntawv no suav hais tias yog ntsev, ces, zoo li tag nrho kuv cov ntawv sau dhau los, qhov no yog cov tshuaj ntsev tsis muaj zog.

Dynamically hloov kho chaw ua haujlwm hauv Jenkins

Kuv pom koj cov lus nug: Dab tsi yog qhov hloov kho txoj haujlwm dynamic tau ua nrog nws? Sau tus nqi ntawm txoj hlua parameter manually thiab tawm koj mus!

Kuv teb tias: Kuv tub nkeeg tiag tiag, kuv tsis nyiam nws thaum lawv yws: Misha, kev xa tawm poob, txhua yam ploj mus! Koj pib saib, thiab muaj ib qho typo nyob rau hauv tus nqi ntawm qee qhov kev tso tawm haujlwm. Yog li ntawd, kuv xav ua txhua yam kom zoo li qhov ua tau. Yog tias nws tuaj yeem tiv thaiv tus neeg siv los ntawm kev nkag mus rau cov ntaub ntawv ncaj qha los ntawm kev muab cov npe ntawm cov txiaj ntsig xaiv los ntawm, ces kuv npaj cov kev xaiv.

Txoj kev npaj yog qhov no: peb tsim ib txoj hauj lwm hauv Jenkins, uas, ua ntej launching, peb tuaj yeem xaiv ib qho version ntawm daim ntawv teev npe, qhia qhov tseem ceeb rau cov tsis tau dhau mus rau lub thawv ntawm ENV, ces nws sau lub thawv thiab thawb nws mus rau hauv lub Thawv Registry. Tom qab ntawd los ntawm muaj lub thawv yog launched nyob rau hauv cuber li workload nrog rau cov parameter uas tau teev tseg hauv txoj haujlwm.

Peb yuav tsis xav txog cov txheej txheem ntawm kev tsim thiab teeb tsa txoj haujlwm hauv Jenkins, qhov no tsis yog lub ntsiab lus. Peb yuav xav tias txoj haujlwm tiav lawm. Txhawm rau siv cov npe hloov tshiab nrog cov qauv, peb xav tau ob yam: ib daim ntawv teev npe uas twb muaj lawm nrog cov lej ua ntej siv tau thiab qhov sib txawv xws li Kev xaiv parameter hauv txoj haujlwm. Hauv peb qhov piv txwv, cia lub npe sib txawv BUILD_VERSION, peb yuav tsis nyob ntawm nws nyob rau hauv kom meej. Tab sis cia peb saib ze rau ntawm daim ntawv teev npe.

Tsis muaj ntau txoj kev xaiv. Ob yam tam sim ntawd los rau hauv siab:

  • Siv cov chaw taws teeb nkag API uas Jenkins muab rau nws cov neeg siv;
  • Thov cov ntsiab lus ntawm cov chaw khaws ntaub ntawv chaw taws teeb (hauv peb rooj plaub qhov no yog JFrog Artifactory, uas tsis tseem ceeb).

Jenkins Chaw Taws Teeb Nkag API

Raws li cov kev lig kev cai tsim tau zoo, kuv xav kom tsis txhob muaj cov lus piav qhia ntev.
Kuv yuav tso cai rau kuv tus kheej tsuas yog kev txhais lus dawb ntawm ib daim ntawm thawj kab lus thawj nplooj ntawv ntawm API cov ntaub ntawv:

Jenkins muab API rau tej thaj chaw deb tshuab-nyeem tau rau nws cov functionality. <…> Kev nkag mus rau tej thaj chaw deb muaj nyob rau hauv REST-zoo li style. Qhov no txhais tau hais tias tsis muaj ib qho taw qhia rau txhua qhov nta, tab sis hloov qhov URL zoo li ".../api/", Qhov twg"..." txhais tau hais tias cov khoom uas API muaj peev xwm siv tau.

Hauv lwm lo lus, yog tias txoj haujlwm xa tawm peb tab tom tham txog tam sim no muaj nyob ntawm http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_build, ces API xuav rau txoj haujlwm no muaj nyob ntawm http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_build/api/

Tom ntej no, peb muaj kev xaiv nyob rau hauv daim ntawv twg thiaj li tau txais cov zis. Cia peb tsom mus rau XML, txij li API tsuas tso cai rau kev lim dej hauv qhov no.

Cia li sim ua kom tau txais cov npe ntawm txhua txoj haujlwm khiav haujlwm. Peb tsuas yog txaus siab rau lub npe sib dhos (displayName) thiab nws cov txiaj ntsig (tshwm sim):

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

Nws puas tau ua haujlwm tawm?

Tam sim no cia peb lim tsuas yog cov khiav uas xaus nrog qhov tshwm sim UA TAU. Wb siv qhov kev sib cav & cais tawm thiab raws li qhov parameter peb yuav dhau nws txoj hauv kev mus rau tus nqi tsis sib npaug UA TAU. Yog lawm. Qhov ob tsis zoo yog ib nqe lus. Peb cais txhua yam uas tsis txaus siab rau peb:

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

Screenshot ntawm cov npe ntawm kev vam meej
Peb tsim ib txoj haujlwm xa tawm hauv GKE yam tsis muaj plugins, SMS lossis sau npe. Cia peb saib hauv qab Jenkins lub tsho

Zoo, tsuas yog kev lom zem, cia peb xyuas kom meej tias cov lim tsis dag peb (filters yeej tsis dag!) thiab tso cov npe ntawm "tsis ua tiav":

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

Screenshot ntawm cov npe ntawm cov tsis ua tiav
Peb tsim ib txoj haujlwm xa tawm hauv GKE yam tsis muaj plugins, SMS lossis sau npe. Cia peb saib hauv qab Jenkins lub tsho

Daim ntawv teev cov versions los ntawm ib daim nplaub tshev ntawm ib lub chaw taws teeb server

Muaj ib txoj hauv kev thib ob kom tau txais cov npe ntawm cov qauv. Kuv nyiam nws ntau dua li nkag mus rau Jenkins API. Zoo, vim hais tias yog tias daim ntawv thov tau ua tiav tiav, nws txhais tau tias nws tau ntim thiab muab tso rau hauv qhov chaw cia rau hauv daim nplaub tshev tsim nyog. Zoo li, lub chaw cia khoom yog lub neej ntawd cia ntawm kev ua haujlwm ntawm cov ntawv thov. Zoo li. Zoo, cia peb nug nws seb versions nyob rau hauv cia. Peb yuav curl, grep thiab awk lub chaw taws teeb nplaub tshev. Yog hais tias leej twg xav nyob rau hauv lub oneliner, ces nws yog nyob rau hauv lub spoiler.

Ib kab lus txib
Thov nco ntsoov ob yam: Kuv dhau qhov kev sib txuas cov ntsiab lus nyob rau hauv header thiab kuv tsis xav tau tag nrho cov versions ntawm lub nplaub tshev, thiab kuv xaiv tsuas yog cov uas tau tsim nyob rau hauv ib lub hlis. Kho cov lus txib kom haum koj qhov tseeb thiab xav tau:

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

Teeb tsa cov haujlwm thiab cov ntaub ntawv teeb tsa txoj haujlwm hauv Jenkins

Peb nrhiav tau lub hauv paus ntawm daim ntawv teev cov versions. Tam sim no cia peb muab cov npe tshwm sim rau hauv txoj haujlwm. Rau kuv, kev daws teeb meem yog ntxiv ib kauj ruam hauv daim ntawv thov tsim ua haujlwm. Cov kauj ruam uas yuav raug tua yog tias qhov tshwm sim yog "kev vam meej".

Qhib cov kev teeb tsa ua haujlwm sib dhos thiab txav mus rau hauv qab kawg. Nyem rau ntawm cov khawm: Ntxiv cov kauj ruam tsim -> Cov kauj ruam xwm txheej (ib zaug). Hauv cov kauj ruam nqis, xaiv qhov xwm txheej Tam sim no tsim cov xwm txheej, teem tus nqi UA TAU, qhov kev txiav txim yuav tsum tau ua yog ua tiav Khiav lub plhaub hais kom ua.

Thiab tam sim no qhov kev lom zem. Jenkins khaws cov haujlwm teeb tsa hauv cov ntaub ntawv. Hauv XML hom. Nrog txoj kev http://ΠΏΡƒΡ‚ΡŒ-Π΄ΠΎ-задания/config.xml Raws li, koj tuaj yeem rub tawm cov ntaub ntawv teeb tsa, kho nws raws li qhov tsim nyog thiab muab nws rov qab rau qhov koj tau txais.

Nco ntsoov, peb tau pom zoo saum toj no tias peb yuav tsim ib qho parameter rau daim ntawv teev cov versions BUILD_VERSION?

Cia peb rub tawm cov ntaub ntawv teeb tsa thiab saib hauv nws. Tsuas yog kom paub tseeb tias qhov parameter nyob rau hauv qhov chaw thiab ntawm qhov xav tau hom.

Screenshot nyob rau hauv spoiler.

Koj qhov config.xml fragment yuav tsum zoo tib yam. Tsuas yog hais tias cov ntsiab lus ntawm cov txheej txheem xaiv tseem ploj lawm
Peb tsim ib txoj haujlwm xa tawm hauv GKE yam tsis muaj plugins, SMS lossis sau npe. Cia peb saib hauv qab Jenkins lub tsho

Koj puas paub tseeb? Qhov ntawd yog nws, cia peb sau ib tsab ntawv uas yuav raug tua yog tias kev tsim ua tiav.
Tsab ntawv yuav tau txais ib daim ntawv teev cov versions, download tau cov ntaub ntawv configuration, sau cov npe ntawm versions rau nws nyob rau hauv qhov chaw uas peb xav tau, thiab ces muab tso rov qab. Yog lawm. Yog lawm. Sau ib daim ntawv teev cov versions hauv XML nyob rau hauv qhov chaw uas twb muaj ib daim ntawv teev cov versions (yuav nyob rau hauv lub neej yav tom ntej, tom qab thawj tso tawm ntawm tsab ntawv). Kuv paub tias tseem muaj cov kiv cua hnyav ntawm cov lus hais tsis tu ncua hauv ntiaj teb. Kuv tsis koom nrog lawv. Thov nruab xmlstarler mus rau lub tshuab qhov chaw config yuav raug kho. Nws zoo nkaus li kuv tias qhov no tsis yog tus nqi loj los them kom tsis txhob kho XML siv sed.

Hauv qab tus spoiler, kuv nthuav qhia cov cai uas ua raws li cov lus saum toj no hauv nws tag nrho.

Sau ib daim ntawv teev cov versions los ntawm ib daim nplaub tshev ntawm cov chaw taws teeb server mus rau 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

Yog tias koj nyiam qhov kev xaiv tau txais versions los ntawm Jenkins thiab koj yog tub nkeeg ib yam li kuv, tom qab ntawd nyob rau hauv cov kab ke yog tib txoj cai, tab sis ib daim ntawv teev npe los ntawm Jenkins:

Sau ib daim ntawv teev cov versions ntawm Jenkins mus rau config
Tsuas yog nco ntsoov qhov no: kuv lub npe sib dhos muaj tus lej sib txuas thiab tus lej version, sib cais los ntawm txoj hnyuv. Raws li, awk txiav tawm qhov tsis tsim nyog. Rau koj tus kheej, hloov cov kab no kom haum koj cov kev xav tau.

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

Hauv txoj kev xav, yog tias koj tau sim cov cai sau raws li cov piv txwv saum toj no, tom qab ntawd hauv kev xa tawm txoj haujlwm koj yuav tsum muaj cov npe poob qis nrog cov qauv. Nws zoo li nyob rau hauv lub screenshot hauv qab spoiler.

Ua tiav daim ntawv teev cov versions
Peb tsim ib txoj haujlwm xa tawm hauv GKE yam tsis muaj plugins, SMS lossis sau npe. Cia peb saib hauv qab Jenkins lub tsho

Yog tias txhua yam ua haujlwm, ces luam-muab cov ntawv rau hauv Khiav lub plhaub hais kom ua thiab txuag kev hloov.

Txuas rau Huab plhaub

Peb muaj cov neeg siv khoom hauv cov thawv ntim khoom. Peb siv Ansible ua peb daim ntawv thov xa cov cuab yeej thiab tus thawj tswj kev teeb tsa. Raws li, thaum nws los txog rau lub tsev ntim khoom, peb txoj kev xaiv tuaj rau hauv lub siab: nruab Docker hauv Docker, nruab Docker ntawm lub tshuab khiav Ansible, lossis tsim cov ntim hauv huab console. Peb pom zoo kom nyob twj ywm txog plugins rau Jenkins hauv kab lus no. Nco ntsoov?

Kuv txiav txim siab: zoo, txij li cov thawv "tawm ntawm lub thawv" tuaj yeem sau rau hauv huab console, yog vim li cas thab? Khaws nws huv si, txoj cai? Kuv xav sau Jenkins ntim hauv huab console, thiab tom qab ntawd tso lawv mus rau hauv cuber los ntawm qhov ntawd. Ntxiv mus, Google muaj cov kev nplua nuj nyob hauv nws cov txheej txheem, uas yuav muaj txiaj ntsig zoo ntawm kev xa mus sai.

Txhawm rau txuas rau huab console, koj xav tau ob yam: gcloud ua thiab nkag tau cov cai rau Google Cloud API rau VM piv txwv uas qhov kev sib txuas no yuav raug ua.

Rau cov neeg uas npaj yuav txuas tsis yog los ntawm Google huab txhua
Google tso cai rau muaj peev xwm ua tsis tau kev tso cai sib tham sib hauv nws cov kev pabcuam. Qhov no yuav tso cai rau koj txuas mus rau lub console txawm tias los ntawm lub tshuab kas fes, yog tias nws khiav * nix thiab muaj lub console nws tus kheej.

Yog tias muaj kev xav tau rau kuv los npog qhov teeb meem no kom ntxaws ntxiv nyob rau hauv lub moj khaum ntawm daim ntawv no, sau rau hauv cov lus. Yog tias peb tau txais kev pov npav txaus, kuv yuav sau qhov hloov tshiab ntawm lub ncauj lus no.

Txoj kev yooj yim tshaj plaws los muab txoj cai yog los ntawm lub vev xaib interface.

  1. Nres qhov VM piv txwv uas koj yuav txuas mus rau huab console.
  2. Qhib Instance Details thiab nias kho.
  3. Hauv qab kawg ntawm nplooj ntawv, xaiv qhov piv txwv nkag mus Nkag mus rau tag nrho Cloud APIs.

    Cov Vijtsam
    Peb tsim ib txoj haujlwm xa tawm hauv GKE yam tsis muaj plugins, SMS lossis sau npe. Cia peb saib hauv qab Jenkins lub tsho

  4. Txuag koj cov kev hloov pauv thiab tso qhov piv txwv.

Thaum VM tau ua tiav kev thauj khoom, txuas rau nws ntawm SSH thiab xyuas kom meej tias qhov kev sib txuas tshwm sim yam tsis muaj qhov yuam kev. Siv cov lus txib:

gcloud alpha cloud-shell ssh

Kev sib txuas ua tiav zoo li qhov no
Peb tsim ib txoj haujlwm xa tawm hauv GKE yam tsis muaj plugins, SMS lossis sau npe. Cia peb saib hauv qab Jenkins lub tsho

Xa mus rau GKE

Txij li thaum peb tau mob siab rau txhua txoj hauv kev kom hloov mus rau IaC (Infrastucture as a Code), peb cov ntaub ntawv docker tau khaws cia hauv Git. Qhov no yog nyob ntawm ib sab tes. Thiab kev xa tawm hauv kubernetes tau piav qhia los ntawm yaml cov ntaub ntawv, uas tsuas yog siv los ntawm txoj haujlwm no, uas nws tus kheej kuj zoo li cov cai. Qhov no yog los ntawm lwm sab. Feem ntau, kuv txhais tau tias, txoj kev npaj yog qhov no:

  1. Peb coj qhov tseem ceeb ntawm qhov sib txawv BUILD_VERSION thiab, optionally, qhov tseem ceeb ntawm cov variables uas yuav dhau mus ENV.
  2. Rub tawm dockerfile los ntawm Git.
  3. Tsim yaml rau kev xa tawm.
  4. Peb upload ob qho ntawm cov ntaub ntawv no ntawm scp mus rau huab console.
  5. Peb tsim ib lub thawv rau ntawd thiab thawb nws mus rau hauv lub thawv ntawv sau npe
  6. Peb siv cov ntaub ntawv thauj khoom xa mus rau cuber.

Cia peb hais ntxiv. Ib zaug peb pib tham txog ENV, ces xav tias peb yuav tsum dhau qhov tseem ceeb ntawm ob qhov kev txwv: PARAM 1 ΠΈ PARAM 2. Peb ntxiv lawv txoj haujlwm rau kev xa tawm, hom - Txoj hlua Parameter.

Cov Vijtsam
Peb tsim ib txoj haujlwm xa tawm hauv GKE yam tsis muaj plugins, SMS lossis sau npe. Cia peb saib hauv qab Jenkins lub tsho

Peb yuav tsim yaml nrog ib tug yooj yim redirection Ncha ua ntaub ntawv. Nws yog assumed, ntawm chav kawm, uas koj muaj nyob rau hauv koj dockerfile PARAM 1 ΠΈ PARAM 2tias lub npe load yuav yog zoomapp, thiab lub thawv sib dhos nrog daim ntawv thov ntawm cov ntawv teev npe nyob hauv Thawv sau npe ntawm txoj kev gcr.io/awesomeapp/awesomeapp-$BUILD_VERSIONqhov twg $BUILD_VERSION tsuas yog xaiv los ntawm daim ntawv teev npe.

Pab neeg sau npe

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 tus neeg sawv cev tom qab txuas siv gcloud alpha huab-plhaub ssh Kev sib tham sib hom tsis muaj, yog li peb xa cov lus txib mus rau huab console siv qhov ntsuas --cov lus txib.

Peb ntxuav lub tsev nplaub tshev hauv huab console los ntawm cov qub dockerfile:

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

Muab cov dockerfile uas nyuam qhuav rub tawm hauv tsev nplaub tshev ntawm huab console siv scp:

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

Peb sau, sau npe thiab thawb lub thawv rau lub thawv ntawv sau npe:

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"

Peb ua tib yam nrog cov ntaub ntawv xa tawm. Thov nco ntsoov tias cov lus txib hauv qab no siv cov npe tsis tseeb ntawm pawg uas qhov kev xa tawm tshwm sim (aws-cluster) thiab lub npe qhov project (txaus ntshai-qhov project), qhov twg pawg nyob.

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"

Peb khiav txoj haujlwm, qhib lub console tso zis thiab cia siab tias yuav pom kev ua tiav ntawm lub thawv ntim khoom.

Cov Vijtsam
Peb tsim ib txoj haujlwm xa tawm hauv GKE yam tsis muaj plugins, SMS lossis sau npe. Cia peb saib hauv qab Jenkins lub tsho

Thiab tom qab ntawd ua tiav kev xa tawm ntawm lub thawv sib dhos

Cov Vijtsam
Peb tsim ib txoj haujlwm xa tawm hauv GKE yam tsis muaj plugins, SMS lossis sau npe. Cia peb saib hauv qab Jenkins lub tsho

Kuv txhob txwm tsis quav ntsej qhov teeb tsa Ingress. Rau ib qho laj thawj yooj yim: ib zaug koj teeb tsa workload Nrog lub npe muab, nws yuav nyob twj ywm ua haujlwm, txawm tias muaj pes tsawg qhov kev xa tawm nrog lub npe no koj ua. Zoo, feem ntau, qhov no yog me ntsis dhau ntawm keeb kwm.

Hloov chaw xaus

Tag nrho cov kauj ruam saum toj no tej zaum yuav tsis tau ua tiav, tab sis tsuas yog ntsia ib co plugin rau Jenkins, lawv muuulion. Tab sis rau qee yam kuv tsis nyiam plugins. Zoo, ntau precisely, kuv resort rau lawv tsuas yog tawm ntawm desperation.

Thiab kuv tsuas yog nyiam khaws qee lub ntsiab lus tshiab rau kuv. Cov ntawv sau saum toj no kuj yog ib txoj hauv kev los qhia cov kev tshawb pom uas kuv tau ua thaum daws qhov teeb meem tau piav qhia thaum pib. Qhia rau cov neeg uas, zoo li nws, tsis yog txhua tus hma nyob rau hauv devops. Yog tias kuv qhov kev tshawb pom pab tsawg kawg ib tus neeg, kuv yuav txaus siab.

Tau qhov twg los: www.hab.com

Ntxiv ib saib