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 tus thawj coj pab pawg ntawm ib pab pawg tsim kho tau thov kom sim tso lawv lub app tshiab, uas tau raug muab tso rau hauv lub thawv hnub ua ntej. Kuv tau ua li ntawd. Kwv yees li 20 feeb tom qab, ib tug neeg tau hais kom kuv hloov kho lub app vim lawv tau ntxiv ib qho feature uas xav tau heev. Kuv tau ua li ntawd. Ob peb teev tom qab ... zoo, koj tuaj yeem twv seb muaj dab tsi tshwm sim tom ntej ...

Kuv yuav lees tias, kuv tub nkeeg heev (kuv tau lees qhov no ua ntej lawm, puas yog?), thiab vim tias cov thawj coj pab pawg muaj kev nkag mus rau Jenkins, uas yog qhov chaw peb khiav peb cov CI / CD tag nrho, kuv xav tias, "Cia nws xa mus ntau npaum li nws xav tau!" Kuv nco qab qhov kev tso dag: Muab ib tug txiv neej ib tug ntses, thiab nws yuav noj ib hnub; hu nws ua Fed, thiab nws yuav raug pub rau lub neej. " Thiab kuv tawm mus. ua ib txoj haujlwm, uas yuav muaj peev xwm xa ib lub thawv nrog ib daim ntawv thov ntawm txhua qhov version ua tiav rau Kubernetes thiab xa cov nqi rau nws ENV (Kuv yawg, ib tug kws tshawb fawb txog lus thiab tus xib fwb qhia lus Askiv yav dhau los, tam sim no yuav tig nws tus ntiv tes rau ntawm nws lub tuam tsev thiab ntsia kuv nrog kev qhia tawm tom qab nyeem kab lus no.)

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

  1. Hloov kho cov haujlwm hauv Jenkins los ntawm sab hauv txoj haujlwm nws tus kheej lossis los ntawm lwm txoj haujlwm;
  2. Txuas rau lub console huab (Cloud plhaub) los ntawm lub node nrog tus neeg sawv cev Jenkins ntsia;
  3. Tso ib qho workload rau Google Kubernetes Engine.


Qhov tseeb, kuv hais lus tsis muaj tseeb me ntsis, tau kawg. Qhov no xav tias tsawg kawg yog ib feem ntawm koj cov khoom siv hauv Google Cloud, txhais tau tias koj yog tus neeg siv thiab, tau kawg, muaj tus account GCP. Tab sis qhov ntawd tsis yog qhov uas tsab xov xwm no hais txog.

Qhov no yog lwm daim ntawv qhia txog kuv cov teeb meem. Kuv tsuas xav sau cov ntawv no rau ib qho xwm txheej xwb: thaum kuv ntsib teeb meem, kuv tsis paub yuav daws nws li cas thaum xub thawj, thiab cov kev daws teeb meem tsis muaj nyob hauv Google, yog li kuv nrhiav nws ib daim zuj zus thiab thaum kawg daws tau. Yog li ntawd yav tom ntej, thaum kuv hnov ​​​​​​qab kuv ua li cas, kuv tsis tas yuav Google txhua yam dua ib daim zuj zus thiab muab tso ua ke, kuv sau cov ntawv qhia no rau kuv tus kheej.

Disclaimer: 1. Daim ntawv sau "rau kuv tus kheej", rau lub luag haujlwm muaj kev coj ua zoo tshaj plaws Nws tsis ua ib qho kev thov. Kuv zoo siab nyeem cov lus qhia "lossis tej zaum nws yuav zoo dua ua li no" hauv cov lus tawm tswv yim.
2. Yog tias qhov uas siv rau ntawm daim ntawv no suav tias yog ntsev, ces, zoo li kuv cov ntawv sau dhau los, qhov no yog cov kua ntsev tsis muaj zog.

Dynamically hloov kho cov chaw ua haujlwm hauv Jenkins

Kuv xav tias koj yuav nug li no: qhov dynamic job updated muaj feem cuam tshuam li cas rau qhov no? Tsuas yog sau tus nqi ntawm cov string parameter thiab mus!

Kuv cov lus teb: Kuv tub nkeeg heev, thiab kuv tsis nyiam thaum tib neeg yws tias: "Misha, qhov kev xa tawm poob qis, txhua yam ploj lawm!" Koj pib nrhiav, thiab muaj qhov yuam kev hauv qee qhov kev teeb tsa ua haujlwm. Yog li kuv nyiam ua txhua yam kom ua pov thawj tag nrho li sai tau. Yog tias nws ua tau kom tiv thaiv tus neeg siv los ntawm kev nkag mus rau cov ntaub ntawv ncaj qha, muab cov npe ntawm cov nqi xaiv los ntawm hloov chaw, ces kuv muab kev xaiv.

Lub tswv yim yog qhov no: peb tsim ib txoj haujlwm hauv Jenkins, uas ua ntej tso tawm nws yuav ua tau xaiv ib qho version los ntawm daim ntawv teev npe, teev cov nqi rau cov kev txwv xa mus rau lub thawv ntawm ENV, ces nws tsim lub thawv thiab thawb nws mus rau Lub Thawv Sau Npe. Los ntawm qhov ntawd, lub thawv raug tso tawm hauv Kubernetes li workload nrog cov kev cai teev tseg hauv txoj haujlwm.

Peb yuav tsis tham txog cov txheej txheem ntawm kev tsim thiab teeb tsa Jenkins txoj haujlwm; qhov ntawd yog tawm ntawm lub ncauj lus. Peb yuav xav tias txoj haujlwm npaj txhij lawm. Txhawm rau siv cov npe hloov kho tshiab, peb xav tau ob yam: daim ntawv teev npe qhov chaw uas twb muaj lawm nrog cov lej version siv tau ua ntej thiab cov hloov pauv ntawm hom. Kev xaiv parameter hauv txoj haujlwm. Hauv peb qhov piv txwv, cia lub npe hloov pauv BUILD_VERSIONPeb yuav tsis tham txog nws kom meej. Tiam sis cia peb saib ze dua ntawm daim ntawv teev cov ntaub ntawv.

Tsis muaj ntau txoj kev xaiv. Ob qho uas koj xav txog tam sim ntawd:

  • Siv qhov API nkag mus rau Chaw Taws Teeb uas Jenkins muab rau nws cov neeg siv;
  • Thov cov ntsiab lus ntawm cov nplaub tshev chaw khaws ntaub ntawv nyob deb (hauv peb qhov xwm txheej, nws yog JFrog Artifactory, uas tsis tseem ceeb).

API Nkag Mus Rau Chaw Nyob Ze Jenkins

Ua raws li kev lig kev cai zoo kawg nkaus uas tau tsim tsa, kuv xav kom tsis txhob piav qhia ntev.
Kuv tsuas yog pub kuv tus kheej txhais lus pub dawb ntawm ib daim ntawm thawj kab lus xwb nplooj ntawv thawj zaug ntawm cov ntaub ntawv API:

Jenkins muab ib qho API rau kev nkag mus rau nws cov haujlwm nyob deb, uas tshuab nyeem tau. <…> Kev nkag mus rau qhov chaw nyob deb yog muab rau hauv hom REST-zoo li. Qhov no txhais tau tias tsis muaj ib qho chaw nkag mus rau txhua qhov peev xwm, tab sis hloov chaw yog URL zoo li "…/api/", Qhov twg "..." qhia txog yam khoom uas cov peev xwm API siv tau.

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

Tom ntej no, peb muaj kev xaiv hom ntawv tso zis. Peb yuav xaiv XML, vim tias API tsuas yog tso cai rau kev lim dej hauv hom ntawv no.

Cia peb sim ua kom tau ib daim ntawv teev tag nrho cov haujlwm uas tau ua tiav. Peb tsuas xav paub txog lub npe ntawm lub rooj sib txoos xwb (displayName) thiab nws qhov tshwm sim (tshwm sim):

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

Puas ua haujlwm?

Tam sim no peb yuav lim tawm tsuas yog cov kev khiav uas thaum kawg muaj qhov tshwm sim UA TAUPeb siv qhov kev sib cav &tsis suav nrog thiab ua ib qho parameter peb yuav xa nws txoj kev mus rau tus nqi tsis sib npaug rau UA TAUYog, yog. Ob npaug ntawm qhov tsis zoo yog kev lees paub. Peb tshem tawm 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']

Daim duab ntawm daim ntawv teev cov neeg ua tiav
Peb tab tom tsim ib txoj haujlwm xa tawm GKE yam tsis tas siv plugins, SMS, lossis kev sau npe. Peb kuj tau saib Jenkins cov ris tsho hauv qab ua ntej.

Zoo, tsuas yog rau kev lom zem xwb, cia peb xyuas kom tseeb tias lub lim dej tsis dag peb (cov lim dej yeej tsis dag!) thiab tso tawm cov npe ntawm "kev ua tsis tiav":

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

Daim duab ntawm daim ntawv teev cov neeg tsis ua tiav
Peb tab tom tsim ib txoj haujlwm xa tawm GKE yam tsis tas siv plugins, SMS, lossis kev sau npe. Peb kuj tau saib Jenkins cov ris tsho hauv qab ua ntej.

Daim ntawv teev cov versions los ntawm ib daim nplaub tshev ntawm ib lub server nyob deb

Muaj ib txoj kev thib ob kom tau txais daim ntawv teev cov versions. Kuv nyiam nws ntau dua li hu rau Jenkins API. Zoo, yog tias daim ntawv thov tau ua tiav, nws txhais tau tias nws tau ntim thiab muab tso rau hauv lub chaw khaws ntaub ntawv lub nplaub tshev tsim nyog. Zoo li, lub chaw khaws ntaub ntawv yog, los ntawm lub neej ntawd, qhov chaw cia rau cov versions daim ntawv thov ua haujlwm. Yam li. Yog li, cia peb nug nws tias cov versions twg khaws cia. Peb yuav curl, grep, thiab awk lub nplaub tshev chaw taws teeb. Yog tias leej twg xav paub txog qhov unliner, nws nyob hauv qab spoiler.

Ib kab lus txib
Thov nco ntsoov ob yam: Kuv tab tom xa cov ntaub ntawv txuas rau hauv lub header, thiab kuv tsis xav tau txhua qhov versions hauv daim nplaub tshev ncaj qha. Kuv tsuas yog xaiv cov uas tau tsim nyob rau hauv lub hli tas los. Kho cov lus txib kom haum rau koj cov kev 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 haujlwm hauv Jenkins

Peb tau txheeb xyuas qhov chaw ntawm daim ntawv teev npe version. Tam sim no cia peb koom ua ke daim ntawv teev npe uas tau tshwm sim rau hauv txoj haujlwm. Rau kuv, qhov kev daws teeb meem pom tseeb yog ntxiv ib kauj ruam rau txoj haujlwm tsim daim ntawv thov. Ib kauj ruam uas yuav raug ua tiav yog tias qhov tshwm sim yog "kev vam meej."

Qhib cov chaw teeb tsa ua haujlwm thiab txav mus rau hauv qab. Nyem cov nyees khawm: Ntxiv cov kauj ruam tsim -> Kauj ruam muaj xwm txheej (ib qho)Hauv cov kauj ruam teeb tsa, xaiv qhov xwm txheej Qhov xwm txheej tam sim no ntawm kev tsim kho, peb teeb tsa tus nqi UA TAU, qhov kev nqis tes ua yog tias ua tiav Khiav cov lus txib plhaub.

Thiab tam sim no qhov nthuav tshaj plaws. Jenkins khaws cov kev teeb tsa haujlwm hauv cov ntaub ntawv. Hauv hom ntawv XML. Raws txoj kev http://ΠΏΡƒΡ‚ΡŒ-Π΄ΠΎ-задания/config.xml Yog li ntawd, koj tuaj yeem rub tawm cov ntaub ntawv teeb tsa, hloov kho nws raws li qhov xav tau, thiab muab tso rov qab rau qhov chaw koj tau txais los ntawm.

Nco ntsoov, saum toj no peb tau pom zoo 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 sab hauv. Tsuas yog xyuas kom meej tias qhov parameter nyob rau hauv qhov chaw thiab yog hom ntawv raug.

Daim duab thaij hauv qab tus spoiler.

Koj daim config.xml fragment yuav tsum zoo ib yam, tsuas yog tias cov ntsiab lus ntawm cov choices element ploj lawm.
Peb tab tom tsim ib txoj haujlwm xa tawm GKE yam tsis tas siv plugins, SMS, lossis kev sau npe. Peb kuj tau saib Jenkins cov ris tsho hauv qab ua ntej.

Koj puas ntseeg? Zoo, cia peb sau ib tsab ntawv uas yuav khiav yog tias qhov kev tsim kho ua tiav.
Cov ntawv sau yuav tau txais daim ntawv teev cov version, rub tawm cov ntaub ntawv teeb tsa, sau cov npe version rau qhov chaw xav tau, thiab tom qab ntawd muab tso rov qab. Yog lawm. Yog lawm. Sau cov npe version rau XML hauv qhov chaw uas cov npe version twb muaj lawm (qhov no yuav tshwm sim yav tom ntej, tom qab thawj zaug khiav ntawm cov ntawv sau). Kuv paub tias tseem muaj qee tus neeg nyiam kev hais tawm ib txwm muaj. Kuv tsis yog ib tug ntawm lawv. Thov nruab nws. xmlstarler ntawm lub tshuab uas qhov config yuav raug kho. Kuv tsis xav tias qhov no yog tus nqi loj heev uas yuav tsum them rau kev zam kev kho XML nrog sed.

Hauv qab tus spoiler kuv muab cov lej uas ua tiav cov kab lus saum toj no hauv nws tag nrho.

Peb sau ib daim ntawv teev cov versions los ntawm ib daim nplaub tshev ntawm lub server nyob deb rau hauv cov ntaub ntawv 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 ntawm kev tau txais cov qauv los ntawm Jenkins thiab koj tub nkeeg li kuv, ces nyob rau hauv lub spoiler yog tib tus lej, tab sis daim ntawv teev npe yog los ntawm Jenkins:

Peb sau ib daim ntawv teev cov versions los ntawm Jenkins mus rau qhov config
Tsuas yog nco ntsoov qhov no: kuv lub npe sib dhos muaj tus lej serial thiab tus lej version, sib cais los ntawm lub colon. Yog li ntawd, awk txiav tawm qhov tsis tsim nyog. Hloov kab no kom haum rau 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 kev xav, yog tias koj tau sim cov lej raws li cov piv txwv saum toj no, koj yuav tsum muaj daim ntawv teev npe version hauv koj txoj haujlwm xa tawm. Nws zoo li daim duab screenshot hauv qab tus spoiler.

Daim ntawv teev cov version uas tau sau kom raug
Peb tab tom tsim ib txoj haujlwm xa tawm GKE yam tsis tas siv plugins, SMS, lossis kev sau npe. Peb kuj tau saib Jenkins cov ris tsho hauv qab ua ntej.

Yog tias txhua yam ua haujlwm, ces theej-muab tshuaj txhuam cov ntawv sau rau hauv Khiav cov lus txib plhaub thiab txuag cov kev hloov pauv.

Txuas rau Cloud Shell

Peb siv cov neeg tsim khoom uas muaj thawv. Peb siv Ansible ua peb daim ntawv thov xa khoom thiab tus thawj tswj kev teeb tsa. Yog li, thaum nws los txog rau kev tsim cov thawv, peb txoj kev xaiv los rau hauv siab: nruab Docker hauv Docker, nruab Docker ntawm lub tshuab khiav Ansible, lossis tsim cov thawv hauv huab console. Peb tau pom zoo kom nyob ntsiag to txog Jenkins plugins hauv tsab ntawv no. Nco ntsoov?

Kuv txiav txim siab: zoo, yog tias cov thawv tuaj yeem tsim tawm ntawm lub thawv hauv huab console, vim li cas ho txhawj? Khaws nws kom huv si, puas yog? Kuv xav tsim cov thawv nrog Jenkins hauv huab console, thiab tom qab ntawd xa lawv mus rau Kubernetes los ntawm qhov ntawd. Tshwj xeeb tshaj yog txij li Google muaj bandwidth dav heev hauv nws cov khoom siv, uas yuav muaj qhov cuam tshuam zoo rau kev xa tawm ceev.

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

Rau cov neeg uas npaj yuav txuas los ntawm lwm qhov chaw uas tsis yog Google Cloud
Google tso cai rau qhov kev xaiv los kaw qhov kev tso cai sib tham hauv nws cov kev pabcuam. Qhov no yuav tso cai rau koj txuas rau lub console txawm tias los ntawm lub tshuab kas fes, tsuav yog nws khiav ntawm *nix thiab muaj nws tus kheej lub console.

Yog tias koj xav kom kuv piav qhia ntxiv txog qhov teeb meem no hauv tsab ntawv no, thov qhia rau kuv paub hauv cov lus tawm tswv yim. Yog tias kuv tau txais cov upvotes txaus, kuv yuav sau qhov hloov tshiab ntawm qhov teeb meem.

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

  1. Tsum qhov VM piv txwv uas koj yuav txuas rau lub console huab tom qab ntawd.
  2. Qhib Cov Ntaub Ntawv Qhia Txog Qhov Xwm Txheej thiab nyem kho.
  3. Nyob rau hauv qab kawg ntawm nplooj ntawv, xaiv qhov kev nkag mus rau qhov piv txwv Nkag mus rau tag nrho cov Cloud APIs.

    Cov Vijtsam
    Peb tab tom tsim ib txoj haujlwm xa tawm GKE yam tsis tas siv plugins, SMS, lossis kev sau npe. Peb kuj tau saib Jenkins cov ris tsho hauv qab ua ntej.

  4. Txuag cov kev hloov pauv thiab khiav qhov piv txwv.

Thaum lub VM ua tiav kev khau raj, txuas rau nws ntawm SSH thiab xyuas kom meej tias kev sib txuas ua tiav. Siv cov lus txib:

gcloud alpha cloud-shell ssh

Kev sib txuas zoo zoo li no
Peb tab tom tsim ib txoj haujlwm xa tawm GKE yam tsis tas siv plugins, SMS, lossis kev sau npe. Peb kuj tau saib Jenkins cov ris tsho hauv qab ua ntej.

Xa mus rau GKE

Vim peb tab tom siv zog hloov mus rau IaC (Infrastructure as a Code), peb cov Dockerfiles khaws cia rau hauv Git. Qhov ntawd yog ib yam. Thiab qhov Kubernetes deployment yog piav qhia los ntawm cov ntaub ntawv YAML siv los ntawm ib txoj haujlwm, uas nws tus kheej yog code. Qhov ntawd yog lwm yam. Yeej, kuv lub ntsiab lus yog, txoj kev npaj yog qhov no:

  1. Peb coj cov nqi ntawm cov hloov pauv BUILD_VERSION thiab, xaiv tau, cov nqi ntawm cov hloov pauv uas yuav dhau los ntawm ENV.
  2. Rub tawm cov ntaub ntawv docker los ntawm Git.
  3. Tsim cov yaml rau kev xa tawm.
  4. Peb upload ob qho ntaub ntawv no ntawm scp mus rau lub console huab.
  5. Peb tsim ib lub thawv nyob ntawd thiab thawb nws mus rau lub thawv sau npe
  6. Peb siv cov ntaub ntawv xa tawm rau Kubernetes.

Cia peb hais meej dua. Txij li thaum peb tab tom tham txog ENV, ces cia peb xav tias peb yuav tsum dhau cov nqi ntawm ob qho kev ntsuas: PARAM1 ΠΈ PARAM2Peb ntxiv lawv txoj haujlwm xa tawm, hom - Cov Qauv String.

Cov Vijtsam
Peb tab tom tsim ib txoj haujlwm xa tawm GKE yam tsis tas siv plugins, SMS, lossis kev sau npe. Peb kuj tau saib Jenkins cov ris tsho hauv qab ua ntej.

Peb yuav tsim YAML siv kev hloov pauv yooj yim. Ncha rau hauv cov ntaub ntawv. Nws yog xav tias, ntawm chav kawm, tias koj muaj cov hauv qab no hauv koj Dockerfile PARAM1 ΠΈ PARAM2, tias lub npe thauj khoom yuav yog zoo kawg nkaus, thiab lub thawv sib dhos nrog daim ntawv thov ntawm cov version teev tseg nyob rau hauv Kev sau npe rau thawv nyob rau ntawm txoj kev gcr.io/awesomeapp/awesomeapp-$BUILD_VERSIONqhov twg $BUILD_VERSION nyuam qhuav raug xaiv los ntawm daim ntawv teev npe poob.

Daim ntawv teev cov lus txib

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

Tus neeg sawv cev Jenkins tom qab txuas nrog siv gcloud alpha huab-plhaub ssh Hom sib tham tsis muaj, yog li peb xa cov lus txib mus rau lub console huab siv cov parameter β€”kev txib.

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

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

Muab Dockerfile uas nyuam qhuav rub tawm rau hauv lub console lub tsev nplaub tshev siv scp:

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

Peb tsim, cim npe, thiab thawb lub thawv mus rau lub thawv 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 li ntawd nrog cov ntaub ntawv xa tawm. Thov nco ntsoov tias cov lus txib hauv qab no siv cov npe cuav rau lub cluster uas qhov kev xa tawm tab tom tshwm sim (awsm-cluster) thiab lub npe ntawm qhov project (qhov project zoo kawg), qhov chaw uas pawg neeg 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 output, thiab vam tias yuav pom lub thawv tsim tau zoo.

Cov Vijtsam
Peb tab tom tsim ib txoj haujlwm xa tawm GKE yam tsis tas siv plugins, SMS, lossis kev sau npe. Peb kuj tau saib Jenkins cov ris tsho hauv qab ua ntej.

Thiab tom qab ntawd qhov kev xa tawm zoo ntawm lub thawv sib dhos

Cov Vijtsam
Peb tab tom tsim ib txoj haujlwm xa tawm GKE yam tsis tas siv plugins, SMS, lossis kev sau npe. Peb kuj tau saib Jenkins cov ris tsho hauv qab ua ntej.

Kuv txhob txwm tsis quav ntsej qhov chaw teeb tsa IngressVim ib qho laj thawj yooj yim: thaum koj teeb tsa nws lawm workload Yog tias koj muab ib lub npe rau nws, nws yuav tseem ua haujlwm tau txawm tias koj siv lub npe ntawd ntau npaum li cas los xij. Txawm li cas los xij, qhov ntawd yog qhov tsis txaus ntseeg ntawm zaj dab neeg no.

Hloov chaw xaus

Tag nrho cov kauj ruam saum toj no tej zaum yuav raug hla mus thiab koj tuaj yeem tsuas yog nruab qee cov Jenkins plugin, lawv hoooool. Tab sis vim li cas, kuv tsis nyiam plugins. Los yog, kuv tsuas yog siv lawv tawm ntawm kev poob siab.

Kuv kuj nyiam kawm txog tej yam tshiab. Cov ntawv sau saum toj no kuj yog ib txoj hauv kev los qhia tej yam uas kuv tau tshawb pom thaum daws qhov teeb meem uas tau piav qhia thaum pib. Kuv tab tom qhia rau cov neeg uas, zoo li kuv, tsis yog cov neeg nyiam DevOps heev. Yog tias kuv tej yam uas kuv tshawb pom pab tau ib tug neeg, kuv yuav zoo siab.

Tau qhov twg los: www.hab.com

Yuav txhim khu kev qha hosting rau cov chaw nrog DDoS tiv thaiv, VPS VDS servers πŸ”₯ Yuav lub vev xaib hosting txhim khu kev qha nrog kev tiv thaiv DDoS, VPS VDS servers | ProHoster