Qhov teeb meem ntawm "ntse" tu cov duab ntim thiab nws cov kev daws teeb meem hauv werf

Qhov teeb meem ntawm "ntse" tu cov duab ntim thiab nws cov kev daws teeb meem hauv werf

Tsab xov xwm tham txog cov teeb meem ntawm kev ntxuav cov duab uas sib sau ua ke hauv cov ntawv sau npe (Docker Registry thiab nws cov analogues) nyob rau hauv qhov tseeb ntawm niaj hnub CI / CD pipelines rau huab ib haiv neeg daim ntawv thov xa mus rau Kubernetes. Cov txheej txheem tseem ceeb rau qhov cuam tshuam ntawm cov duab thiab cov teeb meem tshwm sim hauv automating tu, txuag chaw thiab ua tau raws li qhov xav tau ntawm pab pawg tau muab. Thaum kawg, siv qhov piv txwv ntawm qhov project Open Source tshwj xeeb, peb yuav qhia koj tias cov teeb meem no tuaj yeem kov yeej li cas.

Taw qhia

Tus naj npawb ntawm cov duab nyob rau hauv ib lub thawv ntawv sau npe tuaj yeem loj hlob sai, siv ntau qhov chaw cia thiab yog li ua rau nws cov nqi nce ntxiv. Txhawm rau tswj, txwv lossis tswj kom muaj peev xwm loj hlob ntawm qhov chaw nyob hauv kev sau npe, nws raug lees txais:

  1. siv tus lej tas rau cov duab;
  2. ntxuav cov duab hauv qee txoj kev.


Thawj qhov txwv yog qee zaum siv tau rau cov pab pawg me. Yog tias cov neeg tsim khoom muaj cov cim ruaj khov txaus (latest, main, test, boris thiab lwm yam), daim ntawv sau npe yuav tsis o ntawm qhov loj thiab ntev koj yuav tsis xav txog kev ntxuav nws txhua. Tom qab tag nrho, tag nrho cov duab tsis cuam tshuam raug tshem tawm, thiab tsuas yog tsis muaj kev ua haujlwm sab laug rau kev tu (txhua yam yog ua los ntawm tus neeg khaws khib nyiab).

Txawm li cas los xij, txoj hauv kev no txwv txoj kev loj hlob heev thiab tsis tshua muaj feem xyuam rau cov haujlwm niaj hnub CI / CD. Ib feem tseem ceeb ntawm txoj kev loj hlob yog automation, uas tso cai rau koj sim, xa tawm thiab xa cov haujlwm tshiab rau cov neeg siv sai dua. Piv txwv li, nyob rau hauv tag nrho peb tej yaam num, ib tug CI pipeline yog cia li tsim nrog txhua yam kev cog lus. Nyob rau hauv nws, cov duab tau sib sau ua ke, sim, dov tawm mus rau ntau yam Kubernetes circuits rau kev debugging thiab ntxiv cov tshev, thiab yog tias txhua yam zoo, cov kev hloov pauv mus txog tus neeg siv kawg. Thiab qhov no tsis yog foob pob hluav taws kev tshawb fawb, tab sis ib qho kev tshwm sim txhua hnub rau ntau tus - feem ntau yuav yog rau koj, txij li thaum koj tau nyeem tsab xov xwm no.

Txij li thaum kho cov kab thiab txhim kho kev ua haujlwm tshiab yog ua tiav nyob rau hauv tib lub sijhawm, thiab kev tshaj tawm tuaj yeem ua tau ntau zaus hauv ib hnub, nws yog qhov pom tseeb tias cov txheej txheem kev txhim kho yog nrog los ntawm ntau qhov kev cog lus, uas txhais tau tias ntau cov duab hauv cov npe. Yog li ntawd, qhov teeb meem ntawm kev txhim kho kev ua haujlwm zoo ntawm kev sau npe tshwm sim, i.e. tshem tawm cov duab tsis cuam tshuam.

Tab sis ua li cas koj txawm txiav txim siab seb daim duab puas cuam tshuam?

Cov txheej txheem rau qhov tseeb ntawm daim duab

Hauv feem ntau ntawm cov xwm txheej, cov txheej txheem tseem ceeb yuav yog:

1. Thawj (qhov pom tseeb tshaj plaws thiab tseem ceeb tshaj plaws ntawm txhua tus) yog cov duab uas tam sim no siv hauv Kubernetes. Tshem tawm cov duab no tuaj yeem ua rau cov nqi tsim khoom lag luam tseem ceeb (piv txwv li, cov duab yuav xav tau rau kev rov ua dua tshiab) lossis tsis pom zoo rau kev siv zog ntawm pab pawg debugging ntawm ib qho ntawm cov voj voog. (Vim li no peb txawm ua ib qho tshwj xeeb Prometheus exporter, uas taug qab qhov tsis muaj cov duab zoo li no hauv ib pawg Kubernetes.)

2. Qhov thib ob (tsis tshua pom tseeb, tab sis kuj tseem ceeb heev thiab rov hais txog kev siv dag zog) - cov duab uas yuav tsum tau rau rollback nyob rau hauv cov ntaub ntawv ntawm kev kuaj pom muaj teeb meem loj nyob rau hauv lub tam sim no version. Piv txwv li, nyob rau hauv cov ntaub ntawv ntawm Helm, cov no yog cov duab uas tau siv nyob rau hauv kev cawmdim versions ntawm qhov kev tso tawm. (Los ntawm txoj kev, los ntawm lub neej ntawd hauv Helm qhov kev txwv yog 256 kev hloov kho, tab sis nws tsis zoo li leej twg yuav tsum tau txuag. xws li a ib tug loj tus naj npawb ntawm versions?..) Tom qab tag nrho, peb, tshwj xeeb tshaj yog, khw versions kom peb siv tau lawv tom qab, i.e. "rov qab" rau lawv yog tias tsim nyog.

3. Peb - tus tsim tawm xav tau: Tag nrho cov duab uas muaj feem xyuam rau lawv txoj haujlwm tam sim no. Piv txwv li, yog tias peb tab tom txiav txim siab txog PR, ces nws ua rau kev txiav txim siab tawm ntawm cov duab sib xws rau qhov kev cog lus zaum kawg thiab hais tias, qhov kev cog lus dhau los: txoj kev no tus tsim tawm tuaj yeem rov qab mus rau txhua txoj haujlwm sai thiab ua haujlwm nrog cov kev hloov tshiab kawg.

4. Plaub - duab uas sib raug rau cov versions ntawm peb daim ntawv thov, i.e. yog cov khoom kawg: v1.0.0, 20.04.01/XNUMX/XNUMX, sierra, thiab lwm yam.

NB: Cov txheej txheem tau teev tseg ntawm no tau tsim los ntawm kev paub txog kev cuam tshuam nrog ntau pab pawg txhim kho los ntawm ntau lub tuam txhab. Txawm li cas los xij, tau kawg, nyob ntawm qhov tshwj xeeb hauv cov txheej txheem txhim kho thiab cov txheej txheem siv (piv txwv li, Kubernetes tsis siv), cov qauv no yuav txawv.

Kev tsim nyog thiab cov kev daws teeb meem uas twb muaj lawm

Cov kev pabcuam nrov nrog cov ntawv sau npe, raws li txoj cai, muab lawv tus kheej cov duab tu cov cai: hauv lawv koj tuaj yeem txhais cov xwm txheej hauv qab uas lub cim raug tshem tawm ntawm lub npe. Txawm li cas los xij, cov xwm txheej no raug txwv los ntawm qhov tsis xws li cov npe, lub sijhawm tsim, thiab tus lej cim npe *.

* Nyob ntawm kev siv lub thawv ntim tshwj xeeb. Peb xav txog qhov muaj peev xwm ntawm cov kev daws teeb meem hauv qab no: Azure CR, Docker Hub, ECR, GCR, GitHub Pob, GitLab Container Registry, Harbor Registry, JFrog Artifactory, Quay.io - raws li lub Cuaj Hlis 2020.

Cov txheej txheem no yog qhov txaus txaus kom txaus siab rau plaub qhov kev ntsuas - uas yog, xaiv cov duab uas sib haum rau cov qauv. Txawm li cas los xij, rau tag nrho lwm cov txheej txheem, ib tus yuav tsum xaiv qee yam kev sib haum xeeb daws teeb meem (ib qho nyuaj dua lossis, hloov pauv, txoj cai yooj yim dua) - nyob ntawm qhov kev cia siab thiab peev nyiaj txiag.

Piv txwv li, qhov thib peb cov txheej txheem - ntsig txog cov kev xav tau ntawm cov neeg tsim khoom - tuaj yeem daws tau los ntawm kev teeb tsa cov txheej txheem hauv pab pawg: cov npe tshwj xeeb ntawm cov duab, tuav cov npe tshwj xeeb tso cai thiab kev pom zoo sab hauv. Tab sis thaum kawg nws tseem yuav tsum tau automated. Thiab yog tias lub peev xwm ntawm cov kev daws teeb meem tsis txaus, koj yuav tsum ua qee yam ntawm koj tus kheej.

Qhov xwm txheej nrog thawj ob lub ntsiab lus zoo sib xws: lawv tsis tuaj yeem txaus siab yam tsis tau txais cov ntaub ntawv los ntawm lub kaw lus sab nraud - qhov twg cov ntawv thov raug xa mus (hauv peb rooj plaub, Kubernetes).

Piv txwv ntawm kev ua haujlwm hauv Git

Cia peb hais tias koj tab tom ua haujlwm zoo li no hauv Git:

Qhov teeb meem ntawm "ntse" tu cov duab ntim thiab nws cov kev daws teeb meem hauv werf

Lub cim nrog lub taub hau hauv daim duab qhia txog cov duab ntim uas tam sim no tau muab tso rau hauv Kubernetes rau txhua tus neeg siv (cov neeg siv kawg, cov neeg sim, cov tswj hwm, thiab lwm yam) lossis siv los ntawm cov neeg tsim khoom rau kev debugging thiab cov hom phiaj zoo sib xws.

Yuav ua li cas yog tias cov cai huv huv tsuas yog tso cai rau cov duab khaws cia (tsis raug tshem tawm) los ntawm cov npe tag?

Qhov teeb meem ntawm "ntse" tu cov duab ntim thiab nws cov kev daws teeb meem hauv werf

Pom tseeb, qhov xwm txheej zoo li no yuav tsis ua rau leej twg zoo siab.

Yuav hloov dab tsi yog cov cai tso cai rau cov duab tsis raug tshem tawm? raws li lub sijhawm ncua sijhawm / tus lej ntawm qhov kev txiav txim zaum kawg?

Qhov teeb meem ntawm "ntse" tu cov duab ntim thiab nws cov kev daws teeb meem hauv werf

Qhov tshwm sim tau dhau los ua qhov zoo dua, tab sis tseem nyob deb ntawm qhov zoo tagnrho. Tom qab tag nrho, peb tseem muaj cov neeg tsim khoom uas xav tau cov duab hauv kev sau npe (lossis txawm tias siv hauv K8s) los daws cov kab...

Txhawm rau sau cov xwm txheej tam sim no ntawm kev ua lag luam: cov haujlwm muaj nyob hauv cov ntawv sau npe tsis muaj qhov yooj yim txaus thaum ntxuav, thiab qhov laj thawj tseem ceeb rau qhov no yog tsis muaj txoj hauv kev los cuam tshuam nrog lub ntiaj teb sab nraud. Nws hloov tawm tias cov pab pawg uas xav tau qhov hloov pauv tau raug yuam kom nws tus kheej siv cov duab tshem tawm "los ntawm sab nraud", siv Docker Registry API (lossis cov API haiv neeg ntawm qhov kev coj ua).

Txawm li cas los xij, peb tab tom nrhiav kev daws teeb meem thoob ntiaj teb uas yuav ua kom cov duab huv huv rau ntau pawg siv cov npe sib txawv ...

Peb txoj kev mus rau universal duab tu

Qhov kev xav tau no los ntawm qhov twg? Qhov tseeb yog tias peb tsis yog ib pab pawg neeg tsim tawm, tab sis yog ib pab neeg uas ua haujlwm ntau ntawm lawv ib zaug, pab daws cov teeb meem ntawm CI / CD. Thiab cov cuab yeej tseem ceeb rau qhov no yog Open Source utility werf. Nws peculiarity yog tias nws tsis ua ib qho kev ua haujlwm, tab sis nrog cov txheej txheem xa mus tas li ntawm txhua theem: los ntawm kev sib dhos mus rau kev xa tawm.

Kev tshaj tawm cov duab rau hauv daim ntawv teev npe * (tam sim ntawd tom qab lawv tsim) yog qhov ua haujlwm pom tseeb ntawm cov khoom siv zoo li no. Thiab txij li thaum cov duab tau muab tso rau hauv qhov chaw cia, yog tias koj qhov chaw cia tsis txwv - koj yuav tsum tau ua lub luag haujlwm rau lawv cov kev tu tom ntej. Yuav ua li cas peb ua tiav hauv qhov no, txaus siab rau tag nrho cov txheej txheem teev tseg, yuav tau tham ntxiv.

* Txawm hais tias kev sau npe lawv tus kheej yuav txawv (Docker Registry, GitLab Container Registry, Harbor, thiab lwm yam), lawv cov neeg siv ntsib teeb meem tib yam. Kev daws universal nyob rau hauv peb rooj plaub tsis yog nyob ntawm qhov kev siv ntawm cov npe, vim khiav tawm sab nraud ntawm cov npe ntawm lawv tus kheej thiab muab tus cwj pwm zoo ib yam rau txhua tus.

Txawm hais tias peb tab tom siv werf ua piv txwv, peb cia siab tias cov txheej txheem siv yuav muaj txiaj ntsig zoo rau lwm pab pawg uas ntsib teeb meem zoo sib xws.

Yog li peb tau tibneeg hu tauj coob sab nraud kev siv cov txheej txheem rau kev ntxuav cov duab - tsis yog cov peev txheej uas twb tau tsim los rau hauv cov npe rau cov thawv. Thawj kauj ruam yog siv Docker Registry API los tsim tib txoj cai tseem ceeb rau tus naj npawb ntawm cov cim npe thiab lub sijhawm ntawm lawv tsim (hais los saum toj no). Ntxiv rau lawv tso cai rau cov npe raws li cov duab siv nyob rau hauv deployed infrastructure, i.e. Kubernetes. Rau qhov tom kawg, nws tau txaus los siv Kubernetes API los rov hais dua los ntawm tag nrho cov peev txheej siv thiab tau txais cov npe ntawm qhov tseem ceeb image.

Qhov kev daws teeb meem tsis tseem ceeb no tau daws qhov teeb meem tseem ceeb tshaj plaws (txheej txheem No. 1), tab sis tsuas yog qhov pib ntawm peb txoj kev taug kev los txhim kho lub tshuab ntxuav. Tom ntej no - thiab nthuav ntau ntxiv - kauj ruam yog qhov kev txiav txim siab Koom nrog cov duab luam tawm nrog Git keeb kwm.

Tagging schemes

Yuav pib nrog, peb xaiv txoj hauv kev uas cov duab kawg yuav tsum khaws cov ntaub ntawv tsim nyog rau kev ntxuav, thiab tsim cov txheej txheem ntawm tagging schemes. Thaum luam tawm ib daim duab, tus neeg siv xaiv ib qho kev xaiv tagging (git-branch, git-commit los yog git-tag) thiab siv tus nqi sib xws. Hauv CI systems, cov txiaj ntsig no tau teeb tsa los ntawm kev hloov pauv ib puag ncig. Qhov tseeb daim duab kawg tau txuam nrog ib qho tshwj xeeb Git primitive, khaws cov ntaub ntawv tsim nyog rau kev ntxuav hauv cov ntawv lo.

Txoj hauv kev no tau ua rau muaj cov cai tswjfwm uas tso cai rau Git siv los ua ib qho ntawm qhov tseeb:

  • Thaum rho tawm ib ceg / cim npe hauv Git, cov duab cuam tshuam hauv kev sau npe tau raug rho tawm.
  • Tus naj npawb ntawm cov duab cuam tshuam nrog Git cim npe thiab kev cog lus tuaj yeem tswj tau los ntawm tus naj npawb ntawm cov cim npe siv nyob rau hauv cov txheej txheem xaiv thiab lub sij hawm uas cuam tshuam tau tsim.

Zuag qhia tag nrho, qhov kev ua tiav ua tiav tau txaus siab rau peb cov kev xav tau, tab sis qhov kev sib tw tshiab sai sai tos peb. Qhov tseeb yog tias thaum siv tagging schemes raws li Git primitives, peb ntsib ib tug xov tooj ntawm shortcomings. (Vim tias lawv cov lus piav qhia dhau ntawm cov kab lus no, txhua tus tuaj yeem paub lawv tus kheej nrog cov ntsiab lus no.) Yog li ntawd, tau txiav txim siab hloov mus rau txoj hauv kev zoo dua rau kev sau npe (cov ntsiab lus-raws li tagging), peb yuav tsum rov xav txog kev siv cov duab tu.

Tshiab algorithm

Vim li cas? Nrog cov ntsiab lus-raws li tagging, txhua lub cim tuaj yeem ua tiav ntau yam kev cog lus hauv Git. Thaum ntxuav cov duab, koj tsis tuaj yeem xav tias tsuas los ntawm kev cog lus qhov twg cov cim tshiab tau ntxiv rau hauv kev sau npe.

Rau qhov tshiab tu algorithm, nws tau txiav txim siab mus deb ntawm tagging schemes thiab tsim cov txheej txheem meta-duab, txhua lub khw muag khoom ib pawg ntawm:

  • kev cog lus rau qhov kev tshaj tawm tau ua tiav (nws tsis muaj teeb meem txawm tias daim duab tau ntxiv, hloov pauv lossis tseem zoo li qub hauv lub thawv sau npe);
  • thiab peb tus lej suav nrog rau cov duab sib dhos.

Hauv lwm lo lus, nws tau muab txuas cov ntawv luam tawm nrog kev cog lus hauv Git.

Thaum kawg configuration thiab general algorithm

Thaum teeb tsa kev tu, cov neeg siv tam sim no tau nkag mus rau cov cai uas xaiv cov duab tam sim no. Txhua txoj cai li no tau txhais:

  • ntau cov ntaub ntawv, i.e. Git tags lossis Git ceg uas siv thaum luam theej duab;
  • thiab qhov txwv ntawm cov duab tshawb nrhiav rau txhua qhov siv los ntawm cov teeb.

Txhawm rau ua piv txwv, qhov no yog qhov kev teeb tsa txoj cai pib pib zoo li:

cleanup:
  keepPolicies:
  - references:
      tag: /.*/
      limit:
        last: 10
  - references:
      branch: /.*/
      limit:
        last: 10
        in: 168h
        operator: And
    imagesPerReference:
      last: 2
      in: 168h
      operator: And
  - references:  
      branch: /^(main|staging|production)$/
    imagesPerReference:
      last: 10

Qhov kev teeb tsa no muaj peb txoj cai uas ua raws li cov cai hauv qab no:

  1. Txuag cov duab rau lub xeem 10 Git tags (los ntawm tag hnub tsim).
  2. Txuag tsis pub ntau tshaj 2 cov duab luam tawm hauv lub lim tiam dhau los tsis pub ntau tshaj 10 xov nrog kev ua si hauv lub lim tiam dhau los.
  3. Txuag 10 duab rau cov ceg ntoo main, staging ΠΈ production.

Qhov kawg algorithm boils mus rau cov kauj ruam hauv qab no:

  • Retrieving manifests los ntawm lub thawv sau npe.
  • Tsis suav nrog cov duab siv hauv Kubernetes, vim Peb twb tau xaiv lawv ua ntej los ntawm kev pov npav K8s API.
  • Tshawb xyuas Git keeb kwm thiab tsis suav nrog cov duab raws li cov cai teev tseg.
  • Tshem tawm cov duab seem.

Rov qab mus rau peb qhov piv txwv, qhov no yog qhov tshwm sim nrog werf:

Qhov teeb meem ntawm "ntse" tu cov duab ntim thiab nws cov kev daws teeb meem hauv werf

Txawm li cas los xij, txawm tias koj tsis siv werf, ib txoj hauv kev zoo sib xws rau kev tu cov duab siab heev - hauv ib qho kev siv lossis lwm qhov (raws li kev nyiam tshaj plaws rau cov duab tagging) - tuaj yeem siv rau lwm lub tshuab / khoom siv. Ua li no, nws yog txaus kom nco ntsoov cov teeb meem uas tshwm sim thiab nrhiav tau cov cib fim nyob rau hauv koj pawg uas tso cai rau koj mus integrate lawv cov kev daws teeb meem raws li smoothly ua tau. Peb cia siab tias txoj kev uas peb tau taug kev yuav pab koj saib koj cov ntaub ntawv tshwj xeeb nrog cov ntsiab lus tshiab thiab kev xav.

xaus

  • Tsis ntev los sis tom qab, cov pab pawg feem ntau ntsib teeb meem ntawm kev sau npe dhau.
  • Thaum tshawb nrhiav cov kev daws teeb meem, nws yog thawj zaug uas yuav tsum tau txiav txim siab cov txheej txheem rau qhov cuam tshuam ntawm daim duab.
  • Cov cuab yeej muab los ntawm cov kev pabcuam ntim npe nrov tso cai rau koj los npaj kev ntxuav yooj yim heev uas tsis suav nrog "sab nraum ntiaj teb": cov duab siv hauv Kubernetes thiab qhov tshwj xeeb ntawm pab pawg ua haujlwm.
  • Ib qho yooj yim thiab ua tau zoo algorithm yuav tsum muaj kev nkag siab txog cov txheej txheem CI / CD thiab ua haujlwm tsis yog nrog Docker cov ntaub ntawv duab xwb.

PS

Nyeem kuj ntawm peb blog:

Tau qhov twg los: www.hab.com

Ntxiv ib saib