Sipò pou monorepo ak multirepo nan werf ak kisa Docker Rejis la gen pou wè ak li

Sipò pou monorepo ak multirepo nan werf ak kisa Docker Rejis la gen pou wè ak li

Sijè a nan yon mono-repozitwa te diskite plis pase yon fwa epi, kòm yon règ, lakòz konfli trè aktif. Pa kreye werf kòm yon zouti sous louvri ki fèt pou amelyore pwosesis pou konstwi kòd aplikasyon soti nan Git rive nan imaj Docker (epi answit bay yo nan Kubernetes), nou pa panse anpil sou ki chwa ki pi bon. Pou nou, li se prensipal bay tout sa ki nesesè pou sipòtè nan opinyon diferan (si sa a pa kontredi bon sans, nan kou).

Dènye sipò mono-repo werf a se yon bon egzanp sa a. Men, anvan, ann chèche konnen ki jan sipò sa a jeneralman gen rapò ak lè l sèvi avèk werf ak sa Rejis Docker a gen fè ak li ...

Pwoblèm

Ann imajine yon sitiyasyon konsa. Konpayi an gen anpil ekip devlopman k ap travay sou pwojè endepandan. Pifò aplikasyon yo kouri sou Kubernetes epi se poutèt sa yo nan kontenè. Pou estoke resipyan, imaj, ou bezwen yon rejis. Kòm yon rejis konsa, konpayi an itilize Docker Hub ak yon sèl kont COMPANY. Menm jan ak pifò sistèm depo kòd sous, Docker Hub pa pèmèt yerachi depo enbrike, tankou COMPANY/PROJECT/IMAGE. Nan ka sa a... ki jan ou ka estoke aplikasyon ki pa monolitik nan rejis la ak limit sa a san yo pa kreye yon kont separe pou chak pwojè?

Sipò pou monorepo ak multirepo nan werf ak kisa Docker Rejis la gen pou wè ak li

Petèt, sitiyasyon ki dekri a abitye yon moun premye men, men ann konsidere pwoblèm nan òganize depo aplikasyon an jeneral, i.e. san referans a egzanp ki anwo a ak Docker Hub.

Solisyon

Si aplikasyon an monolitik, vini nan yon sèl imaj, Lè sa a, pa gen okenn kesyon epi nou tou senpleman sove imaj yo nan rejis veso pwojè a.

Lè yon aplikasyon prezante kòm plizyè eleman, mikwosèvis, Lè sa a, yon sèten apwòch obligatwa. Sou egzanp yon aplikasyon entènèt tipik ki gen de imaj: frontend и backend - opsyon posib yo se:

  1. Sere imaj yo nan depo separe yo:

    Sipò pou monorepo ak multirepo nan werf ak kisa Docker Rejis la gen pou wè ak li

  2. Sere tout bagay nan yon sèl depo, epi konsidere non imaj la nan tag la, pou egzanp, jan sa a:

    Sipò pou monorepo ak multirepo nan werf ak kisa Docker Rejis la gen pou wè ak li

NB: Aktyèlman, gen yon lòt opsyon ak ekonomize nan diferan depo, PROJECT-frontend и PROJECT-backend, men nou pa pral konsidere li akòz konpleksite sipò, òganizasyon ak distribisyon dwa ant itilizatè yo.

sipò werf

Okòmansman, werf te limite tèt li nan depo enbrike - erezman, pifò rejis sipòte karakteristik sa a. Kòmanse nan vèsyon an v1.0.4-alpha.3, te ajoute travay ak rejis nan ki nidifikasyon pa sipòte, ak Docker Hub se youn nan yo. Soti nan pwen sa a, itilizatè a gen yon chwa sou fason pou estoke imaj aplikasyon yo.

Aplikasyon disponib anba opsyon --images-repo-mode=multirepo|monorepo (default multirepo, i.e. depo nan depo enbrike). Li defini modèl yo nan ki imaj yo estoke nan rejis la. Li se ase yo chwazi mòd nan vle lè w ap itilize kòmandman debaz yo, ak tout lòt bagay ap rete san okenn chanjman.

Paske pifò opsyon werf ka mete varyab anviwònman yo, nan sistèm CI / CD, mòd nan depo anjeneral fasil yo mete globalman pou tout pwojè a. Pa egzanp, nan ka GitLab jis ajoute yon varyab anviwònman nan anviwònman pwojè yo: Anviwònman -> CI / CD -> Varyab: WERF_IMAGES_REPO_MODE: multirepo|monorepo.

Si nou pale sou pibliye imaj ak woule aplikasyon (ou ka li sou pwosesis sa yo an detay nan atik dokiman ki enpòtan yo: Pibliye pwosesis и Deplwaye pwosesis), Lè sa a, mòd nan sèlman detèmine modèl la pa ki ou ka travay ak imaj la.

Dyab la se nan detay yo

Diferans lan ak difikilte prensipal la lè w ajoute yon nouvo metòd depo se nan pwosesis pou netwaye rejis la (pou karakteristik purge ki sipòte pa werf, gade Pwosesis netwayaj).

Lè w netwaye, werf pran an kont imaj yo itilize nan grap Kubernetes, ansanm ak règleman itilizatè a konfigirasyon. Règleman yo baze sou divizyon tags nan estrateji. Estrateji ki sipòte kounye a:

  1. 3 estrateji ki lye pa primitif Git tankou tag, branch, ak commit;
  2. 1 estrateji pou tags abitrè koutim.

Nou sove enfòmasyon sou estrateji tag la lè nou pibliye imaj la nan etikèt imaj final la. Siyifikasyon nan tèt li se sa yo rele an meta tag - Obligatwa pou aplike kèk nan règleman yo. Pou egzanp, lè w ap efase yon branch oswa yon tag nan yon depo Git, li lojik pou efase ki gen rapò pa itilize imaj ki soti nan rejis la, ki kouvri pa yon pati nan règleman nou yo.

Lè yo sove nan yon sèl depo (monorepo), nan tag imaj la, anplis tag meta a, non imaj la ka estoke tou: PROJECT:frontend-META-TAG. Pou separe yo, nou pa t 'entwodui okenn separateur espesifik, men tou senpleman te ajoute valè ki nesesè nan etikèt la nan imaj final la lè pibliye.

NB: Si w enterese nan gade tout bagay ki dekri nan kòd sous werf la, Lè sa a, pwen an kòmanse kapab PR 1684.

Nan atik sa a, nou pa pral peye plis atansyon sou pwoblèm yo ak jistifikasyon nan apwòch nou an: sou estrateji etikèt, estoke done nan etikèt ak pwosesis la pibliye an jeneral - tout bagay sa yo dekri an detay nan yon rapò resan pa Dmitry Stolyarov: "werf se zouti nou an pou CI/CD nan Kubernetes'.

Rezime

Mank sipò pou rejis san yo pa t 'yon faktè bloke pou nou oswa itilizatè werf yo konnen nou - apre tout, ou ka toujou ogmante yon rejis imaj separe (oswa chanje nan yon Rejis Container kondisyonèl nan Google Cloud) ... Sepandan, retire yon restriksyon sa a te sanble lojik pou zouti a vin pi pratik pi laj kominote DevOps la. Aplike li, nou te fè fas a difikilte prensipal la nan retravay mekanis netwayaj rejis veso a. Kounye a ke tout bagay pare, li se bèl reyalize ke li te vin pi fasil pou yon moun, epi nou (kòm devlopè prensipal yo nan pwojè a) pa pral gen okenn difikilte aparan nan plis sipòte karakteristik sa a.

Rete avèk nou epi trè byento nou pral di w sou lòt inovasyon nan werf!

PS

Li tou sou blog nou an:

Sous: www.habr.com

Add nouvo kòmantè