Bothata ba ho hloekisa "bohlale" ba litšoantšo tsa setshelo le tharollo ea eona ho werf

Bothata ba ho hloekisa "bohlale" ba litšoantšo tsa setshelo le tharollo ea eona ho werf

Sengoliloeng se bua ka mathata a ho hloekisa litšoantšo tse bokelloang ka har'a li-registries (Docker Registry le li-analogues tsa eona) ho linnete tsa liphaephe tsa sejoale-joale tsa CI / CD bakeng sa lits'ebetso tsa tlhaho tsa leru tse isoa Kubernetes. Mekhoa e ka sehloohong ea bohlokoa ba litšoantšo le mathata a bakoang ke ho hloekisa ka mokhoa o itekanetseng, ho boloka sebaka le ho finyella litlhoko tsa lihlopha li fanoa. Qetellong, re sebelisa mohlala oa morero o itseng oa Open Source, re tla u bolella hore na mathata ana a ka hlōloa joang.

Selelekela

Palo ea litšoantšo ho ngolisoang ea setshelo e ka hola ka potlako, ea nka sebaka se eketsehileng sa polokelo mme ka hona e eketsa litšenyehelo tsa eona haholo. Ho laola, ho fokotsa kapa ho boloka kholo e amohelehang ea sebaka se ngolisoang, se amoheloa:

  1. sebelisa palo e tsitsitseng ea li-tag bakeng sa litšoantšo;
  2. hloekisa litšoantšo ka tsela e itseng.


Moeli oa pele ka linako tse ling o amoheleha ho lihlopha tse nyenyane. Haeba bahlahisi ba na le li-tag tsa nako e telele tse lekaneng (latest, main, test, boris joalo-joalo), registry e ke ke ea ruruha ka boholo mme ka nako e telele u ke ke ua tlameha ho nahana ka ho e hloekisa ho hang. Ha e le hantle, litšoantšo tsohle tse se nang thuso li hlakoloa, 'me ha ho na mosebetsi o setseng bakeng sa ho hloekisa (ntho e' ngoe le e 'ngoe e etsoa ke moqosi oa lithōle oa kamehla).

Leha ho le joalo, mokhoa ona o fokotsa haholo nts'etsopele mme ha o sebetse hangata mererong ea sejoale-joale ea CI/CD. Karolo ea bohlokoa ea tsoelo-pele e ne e boiketsetso, e u lumellang hore u leke, u sebelise le ho fana ka ts'ebetso e ncha ho basebelisi kapele haholo. Mohlala, mererong eohle ea rona, phaephe ea CI e iketsetsa boitlamo bo bong le bo bong. Ho eona, setšoantšo se bokelloa, se lekoa, se fetisetsoa lipotolohong tse fapaneng tsa Kubernetes bakeng sa ho lokisa liphoso le licheke tse setseng, 'me haeba tsohle li lokile, liphetoho li fihla ho mosebelisi oa ho qetela. 'Me sena ha e sa le saense ea rocket, empa ke ketsahalo ea letsatsi le letsatsi ho ba bangata - mohlomong ho uena, kaha u bala sehlooho sena.

Kaha ho lokisa liphoso le ho nts'etsapele ts'ebetso e ncha ho etsoa ka mokhoa o ts'oanang, 'me ho lokolloa ho ka etsoa makhetlo a' maloa ka letsatsi, ho hlakile hore ts'ebetso ea nts'etsopele e tsamaisana le palo e kholo ea boitlamo, ho bolelang hore palo e kholo ea litšoantšo ho ngolisoang. Ka lebaka leo, taba ea ho hlophisa ho hloekisa ka katleho ea registry e hlaha, i.e. ho tlosa ditshoantsho tse sa lokelang.

Empa u ka tseba joang hore na setšoantšo se nepahetse?

Litekanyetso tsa bohlokoa ba setšoantšo

Maemong a mangata, litekanyetso tsa mantlha e tla ba:

1. Ea pele (e totobetseng ka ho fetisisa le e nyatsang ka ho fetisisa) ke litšoantšo tse e sebelisoa hona joale Kubernetes. Ho tlosa litšoantšo tsena ho ka fella ka litšenyehelo tse kholo tsa nako ea tlhahiso (mohlala, litšoantšo li ka 'na tsa hlokahala bakeng sa ho pheta-pheta) kapa ho hlokomoloha boiteko ba sehlopha ba ho lokisa li-loop. (Ka lebaka lena re bile re etsa e khethehileng Prometheus morekisi, e latelang ho ba sieo ha litšoantšo tse joalo sehlopheng sefe kapa sefe sa Kubernetes.)

2. Ea bobeli (e sa totobalang haholo, empa hape e bohlokoa haholo hape e amana le ho tlatlapa) - litšoantšo tseo e hlokahalang bakeng sa ho khutlisetsoa morao ha ho fumanoa mathata a tebileng phetolelong ea hajoale. Ka mohlala, tabeng ea Helm, tsena ke litšoantšo tse sebelisoang liphetolelong tse bolokiloeng tsa tokollo. (Ka tsela, ka ho sa feleng ho Helm moeli ke lintlafatso tse 256, empa ha ho na monyetla oa hore ho na le motho ea hlileng a hlokang ho boloka. joalo ka palo e kholo ea liphetolelo? ..) Ha e le hantle, rona, ka ho khetheha, re boloka liphetolelo e le hore re ka li sebelisa hamorao, ke hore. “kgutlisetsa morao” ho bona ha ho hlokahala.

3. Ea boraro - litlhoko tsa moqapi: Litšoantšo tsohle tse amanang le mosebetsi oa bona oa hajoale. Mohlala, haeba re nahana ka PR, hoa utloahala ho siea setšoantšo se tsamaellanang le boitlamo ba ho qetela mme, re re, boitlamo bo fetileng: ka tsela ena mohlahlami a ka khutlela mosebetsing ofe kapa ofe mme a sebetsa ka liphetoho tsa morao-rao.

4. Ea bone - litšoantšo tseo e lumellana le mefuta ea ts'ebeliso ea rona, ke. ke lihlahisoa tsa ho qetela: v1.0.0, 20.04.01/XNUMX/XNUMX, sierra, joalo-joalo.

TLHOKOMELISO: Mekhoa e hlalositsoeng mona e entsoe ho ipapisitsoe le boiphihlelo ba ho sebelisana le lihlopha tse ngata tsa nts'etsopele tse tsoang lik'hamphaning tse fapaneng. Leha ho le joalo, ha e le hantle, ho itšetlehile ka lintlha tse tobileng tsa mekhoa ea tsoelo-pele le lisebelisoa tse sebelisoang (mohlala, Kubernetes ha e sebelisoe), mekhoa ena e ka fapana.

Ho tšoaneleha le litharollo tse teng

Litšebeletso tse tummeng tse nang le li-registries tsa lijana, e le molao, li fana ka maano a tsona a ho hloekisa litšoantšo: ho tsona u ka hlalosa maemo ao ho eona letšoao le tlosoang ho ngolisoang. Leha ho le joalo, maemo ana a lekanyelitsoe ke liparamente tse kang mabitso, nako ea pōpo, le palo ea li-tag*.

* E ipapisitse le ts'ebetso e ikhethileng ea ngoliso ea lijana. Re ile ra nahana ka menyetla ea litharollo tse latelang: Azure CR, Docker Hub, ECR, GCR, GitHub Packages, GitLab Container Registry, Harbour Registry, JFrog Artifactory, Quay.io - ho tloha ka Loetse'2020.

Sehlopha sena sa litekanyetso se lekane ho khotsofatsa ntlha ea bone - ke hore, ho khetha litšoantšo tse lumellanang le liphetolelo. Leha ho le joalo, bakeng sa litekanyetso tse ling kaofela, motho o tlameha ho khetha mofuta o itseng oa tharollo ea ho sekisetsa (leano le thata kapa, ka lehlakoreng le leng, le bonolo haholoanyane) - ho latela litebello le bokhoni ba lichelete.

Ka mohlala, ntlha ea boraro - e amanang le litlhoko tsa bahlahisi - e ka rarolloa ka ho hlophisa mekhoa ka har'a lihlopha: mabitso a khethehileng a litšoantšo, ho boloka lethathamo le khethehileng la tumello le litumellano tsa ka hare. Empa qetellong e ntse e hloka ho iketsetsa. 'Me haeba bokhoni ba litharollo tse lokiselitsoeng li sa lekana, u tlameha ho iketsetsa ntho e itseng.

Boemo bo nang le mekhoa e 'meli ea pele bo tšoana: ba ke ke ba khotsofatsoa ntle le ho fumana data ho tsoa tsamaisong ea kantle - moo likopo li sebelisoang teng (ho rona, Kubernetes).

Setšoantšo sa ts'ebetso ea mosebetsi ho Git

Ha re re u sebetsa ntho e kang ena ho Git:

Bothata ba ho hloekisa "bohlale" ba litšoantšo tsa setshelo le tharollo ea eona ho werf

Setšoantšo se nang le hlooho setšoantšong se bontša litšoantšo tsa setshelo tse sebelisoang hona joale ho Kubernetes bakeng sa basebelisi leha e le bafe (basebedisi ba ho qetela, bahlahlobi, batsamaisi, joalo-joalo) kapa ba sebelisoa ke bahlahisi bakeng sa ho lokisa liphoso le merero e tšoanang.

Ho etsahala'ng haeba maano a ho hloekisa a lumella feela hore litšoantšo li bolokehe (eseng ho hlakoloa) ka mabitso a fanoeng?

Bothata ba ho hloekisa "bohlale" ba litšoantšo tsa setshelo le tharollo ea eona ho werf

Ho hlakile hore boemo bo joalo bo ke ke ba thabisa mang kapa mang.

Ho tla fetoha eng haeba maano a lumella hore litšoantšo li se ke tsa hlakoloa? ho ya ka nako e itseng / palo ya boitlamo ba ho qetela?

Bothata ba ho hloekisa "bohlale" ba litšoantšo tsa setshelo le tharollo ea eona ho werf

Phello e fetohile e ntle haholo, empa e ntse e le hōle le ho loka. Ntle le moo, re ntse re na le bahlahisi ba hlokang litšoantšo ho registry (kapa tse kentsoeng ho li-K8s) ho lokisa liphoso ...

Ho akaretsa boemo ba hona joale ba 'maraka: mesebetsi e fumanehang ka har'a li-registries ha e fane ka phetoho e lekaneng ha u hloekisa,' me lebaka le ka sehloohong la sena ke ha ho mokhoa oa ho sebelisana le lefatše le kantle. Hoa etsahala hore lihlopha tse hlokang ho feto-fetoha ho joalo li qobelloa ho kenya ts'ebetsong ka mokhoa o ikemetseng ho tlosoa ha setšoantšo "ho tsoa ka ntle", ho sebelisa Docker Registry API (kapa API ea tlhaho ea ts'ebetsong e lumellanang).

Leha ho le joalo, re ne re batla tharollo ea bokahohle e neng e tla itlhoekisa ka bo eona bakeng sa lihlopha tse fapaneng tse sebelisang liregistries tse fapaneng ...

Tsela ea rona ea ho hloekisa litšoantšo lefatšeng ka bophara

Tlhokahalo ee e tsoa hokae? Taba ke hore ha re sehlopha se arohaneng sa bahlahisi, empa ke sehlopha se sebeletsang bongata ba bona ka nako e le 'ngoe, se thusang ho rarolla mathata a CI/CD ka botlalo. 'Me sesebelisoa sa mantlha sa tekheniki bakeng sa sena ke sesebelisoa sa Open Source werf. Ntho e ikhethang ea eona ke hore ha e etse mosebetsi o le mong, empa e tsamaisana le mekhoa e tsoelang pele ea ho fana ka mekhahlelo ka mekhahlelo eohle: ho tloha kopanong ho ea ho tse ling.

Ho phatlalatsa litšoantšo ho registry* (hang ka mor'a hore li hahuoe) ke mosebetsi o hlakileng oa ts'ebeliso e joalo. 'Me kaha litšoantšo li behiloe moo bakeng sa polokelo, joale - haeba polokelo ea hau e se na moeli - u lokela ho ikarabella bakeng sa ho hloekisa ka mor'a moo. Hore na re fihletse katleho joang ho sena, ho khotsofatsa litekanyetso tsohle tse boletsoeng, ho tla tšohloa ho ea pele.

* Leha liregistries ka botsona li ka fapana (Docker Registry, GitLab Container Registry, Harbor, joalo-joalo), basebelisi ba tsona ba tobana le mathata a tšoanang. Tharollo ea bokahohle molemong oa rona ha e itšetlehe ka ts'ebetsong ea registry, hobane e sebetsa ka ntle ho liregistries ka botsona mme e fana ka boitšoaro bo ts'oanang ho bohle.

Leha re sebelisa werf joalo ka mohlala oa ts'ebetsong, re ts'epa hore mekhoa e sebelisitsoeng e tla ba molemo ho lihlopha tse ling tse tobaneng le mathata a tšoanang.

Kahoo re ile ra tšoareha kantle ts'ebetsong ea mokhoa oa ho hloekisa litšoantšo - ho e-na le bokhoni boo bo seng bo ntse bo hahiloe ka har'a li-registries bakeng sa lijana. Mohato oa pele e ne e le ho sebelisa Docker Registry API ho theha melaoana e tšoanang ea pele bakeng sa palo ea li-tag le nako ea ho bopa ha tsona (tse boletsoeng ka holimo). Ho eketsoa ho tsona lumella lenane le ipapisitseng le litšoantšo tse sebelisoang meahong e sebelisoang, ke. Kubernetes. Bakeng sa ho qetela, ho ne ho lekane ho sebelisa Kubernetes API ho pheta-pheta lisebelisoa tsohle tse sebelisoang le ho fumana lethathamo la litekanyetso. image.

Tharollo ena e sa reng letho e rarolle bothata bo boima ka ho fetisisa (tekanyetso No. 1), empa e ne e le qalo feela ea leeto la rona la ho ntlafatsa mochine oa ho hloekisa. Mohato o latelang - mme o monate le ho feta - e bile qeto amahanya litšoantšo tse hatisitsoeng le nalane ea Git.

Merero ea ho fana ka li-tagging

Ho qala, re khethile mokhoa oo setšoantšo sa ho qetela se lokelang ho boloka tlhahisoleseding e hlokahalang bakeng sa ho hloekisa, 'me re hahile mokhoa oa ho etsa li-tagging. Ha o hatisa setšoantšo, mosebelisi o khethile khetho e itseng ea ho tšoaea (git-branch, git-commit kapa git-tag) le ho sebelisa boleng bo lumellanang. Lits'ebetsong tsa CI, litekanyetso tsena li ne li beoa ka bohona ho ipapisitse le maemo a fapaneng a tikoloho. Haele hantle setšoantšo sa ho qetela se ne se amahanngoa le Git ea khale, ho boloka lintlha tse hlokahalang bakeng sa ho hloekisa ka lileibole.

Mokhoa ona o ile oa fella ka letoto la maano a lumellang Git hore e sebelisoe e le mohloli o le mong oa 'nete:

  • Ha o hlakola lekala / tag ho Git, litšoantšo tse amanang le registry li ile tsa hlakoloa ka bo eona.
  • Palo ea litšoantšo tse amanang le li-tag tsa Git le boitlamo li ka laoloa ke palo ea li-tag tse sebelisitsoeng ho schema se khethiloeng le nako eo boitlamo bo amanang bo entsoeng ka eona.

Ka kakaretso, ts'ebetsong e hlahisitsoeng e ile ea khotsofatsa litlhoko tsa rona, empa phephetso e ncha e ne e re emetse kapele. Taba ke hore ha re ntse re sebelisa merero ea ho tšoaea e ipapisitse le li-primitives tsa Git, re ile ra kopana le mefokolo e mengata. (Kaha tlhaloso ea bona e kaholimo ho sengoloa sena, motho e mong le e mong a ka tloaelana le lintlha mona.) Ka hona, ha re se re nkile qeto ea ho fetohela ho mokhoa o atlehileng haholoanyane oa ho kenya li-tagging (tagging e thehiloeng ho litaba), re ile ra tlameha ho nahana hape ka ts'ebetsong ea ho hloekisa litšoantšo.

Algorithm e ncha

Hobaneng? Ka tag e thehiloeng ho litaba, tag ka 'ngoe e ka khotsofatsa boitlamo bo bongata ho Git. Ha u hloekisa litšoantšo, u ke ke ua hlola u nahana feela ho tloha boitlamo moo tag e ncha e kentsoeng ho ngolisoang.

Bakeng sa algorithm e ncha ea ho hloekisa, ho ile ha etsoa qeto ea ho tloha ho merero ea ho etsa li-tagging le ho haha mokhoa oa ho etsa litšoantšo, e 'ngoe le e 'ngoe ea tsona e boloka sehlopha sa:

  • boitlamo boo khatiso e entsoeng ho bona (ho sa tsotellehe hore na setšoantšo se ekelitsoe, se fetotsoe kapa se ntse se le joalo ho ngoliso ea lijana);
  • le sesupo sa rona sa kahare se tsamaellanang le setšoantšo se kopaneng.

Ka mantsoe a mang, e ne e fanoe ho hokahanya li-tag tse hatisitsoeng le li-commit ho Git.

Tlhophiso ea ho qetela le algorithm e akaretsang

Ha o lokisa ho hloekisa, basebelisi joale ba na le phihlello ea maano a khethang litšoantšo tsa hajoale. Leano le leng le le leng le joalo le hlalosoa:

  • litšupiso tse ngata, i.e. Li-tag tsa Git kapa makala a Git a sebelisoang nakong ea ho hlahlojoa;
  • le moeli oa litšoantšo tse batlisisitsoeng bakeng sa referense e 'ngoe le e 'ngoe ho tloha sete.

Ho etsa mohlala, sena ke kamoo tlhophiso ea leano la kamehla e qalileng ho shebahala kateng:

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

Tokiso ena e na le maano a mararo a lumellanang le melao e latelang:

  1. Boloka setšoantšo bakeng sa li-tag tse 10 tsa ho qetela tsa Git (ka letsatsi la tlhahiso ea li-tag).
  2. Se boloke litšoantšo tse fetang 2 tse phatlalalitsoeng bekeng e fetileng bakeng sa likhoele tse sa feteng 10 tse nang le liketsahalo bekeng e fetileng.
  3. Boloka litšoantšo tse 10 bakeng sa makala main, staging и production.

Algorithm ea ho qetela e itšetlehile ka mehato e latelang:

  • Ho fumana liponahatso ho tsoa ho ngoliso ea linkho.
  • Ntle le litšoantšo tse sebelisoang ho Kubernetes, hobane Re se re li khethile esale pele ka ho khetha K8s API.
  • Ho hlahloba nalane ea Git le ho kenyelletsa litšoantšo ho latela melaoana e boletsoeng.
  • E tlosa litšoantšo tse setseng.

Ha re khutlela papisong ea rona, sena ke se etsahalang ka werf:

Bothata ba ho hloekisa "bohlale" ba litšoantšo tsa setshelo le tharollo ea eona ho werf

Leha ho le joalo, le haeba u sa sebelise werf, mokhoa o ts'oanang oa ho hloekisa litšoantšo tse tsoetseng pele - ts'ebetsong e 'ngoe kapa e' ngoe (ho ea ka mokhoa o ratoang oa ho kenya litšoantšo) - o ka sebelisoa ho litsamaiso / lisebelisoa tse ling. Ho etsa sena, ho lekane ho hopola mathata a hlahang le ho fumana menyetla eo ka har'a stack ea hau e u lumellang hore u kopanye tharollo ea bona ka mokhoa o bonolo kamoo ho ka khonehang. Re tšepa hore tsela eo re e tsamaileng e tla u thusa ho sheba nyeoe ea hau ka lintlha tse ncha le mehopolo.

fihlela qeto e

  • Ha nako e ntse e ea, lihlopha tse ngata li kopana le bothata ba ho tlatsa ngoliso.
  • Ha u batla litharollo, ho hlokahala pele ho fumana litekanyetso tsa bohlokoa ba setšoantšo.
  • Lisebelisoa tse fanoang ke lits'ebeletso tse tsebahalang tsa ho ngolisa lijana li u lumella ho hlophisa tlhoekiso e bonolo haholo e sa nahaneleng "lefatše le kantle": litšoantšo tse sebelisoang ho Kubernetes le tse ikhethang tsa mosebetsi oa sehlopha.
  • Algorithm e feto-fetohang le e sebetsang e tlameha ho ba le kutloisiso ea lits'ebetso tsa CI/CD mme e se sebetse feela ka data ea setšoantšo sa Docker.

PES

Bala hape ho blog ea rona:

Source: www.habr.com

Eketsa ka tlhaloso