Monorepositories: thov, yuav tsum

Monorepositories: thov, yuav tsum

Kev txhais cov lus uas tau npaj rau cov menyuam kawm ntawv "DevOps kev coj ua thiab cov cuab yeej" nyob rau hauv OTUS kev kawm project.

Koj yuav tsum xaiv lub monorepository vim tias tus cwj pwm nws txhawb nqa hauv koj pawg yog pob tshab thiab sib koom lub luag haujlwm, tshwj xeeb tshaj yog thaum pab pawg loj hlob. Txawm li cas los xij, koj yuav tsum tau nqis peev hauv kev siv cuab yeej, tab sis nws ib txwm zoo dua yog tias tus cwj pwm tsis zoo yog tus cwj pwm koj xav tau hauv koj cov lus txib.

Vim li cas peb tham txog qhov no?

Matt Klein sau tsab xov xwm "Monorepos: Thov tsis txhob!"β€Š (tus neeg txhais lus ceeb toom: txhais lus ntawm HabrΓ© "Monorepositories: thov tsis txhob"). Kuv nyiam Matt, Kuv xav tias nws ntse heev thiab koj yuav tsum nyeem nws qhov kev xav. Nws thawj zaug tshaj tawm qhov kev xaiv tsa hauv Twitter:

Monorepositories: thov, yuav tsum

Neeg txhais lus:
Hnub Xyoo Tshiab no, kuv yuav los sib cav txog qhov tsis txaus ntseeg monorepositories. 2019 pib tawm ntsiag to. Nyob rau hauv tus ntsuj plig ntawm no, kuv muab koj ib daim ntawv ntsuam xyuas. Leej twg yog cov kiv cua loj? Cov neeg txhawb nqa:
- Monorepo
- xeb
- Kev xaiv tsa tsis raug / ob qho tib si

Kuv cov lus teb yog, "Kuv yog ob leeg ntawm cov neeg ntawd." Es tsis txhob tham txog yuav ua li cas Rust yog tshuaj, cia saib vim li cas kuv xav tias nws tsis ncaj ncees lawm txog monorepositories. Me ntsis txog koj tus kheej. Kuv yog CTO ntawm Chef Software. Peb muaj li ntawm 100 engineers, code puag rov qab txog 11-12 xyoo, thiab 4 cov khoom tseem ceeb. Ib txhia ntawm cov cai no yog nyob rau hauv ib tug polyrepository (kuv txoj hauj lwm pib), ib txhia yog nyob rau hauv ib tug monorepository (kuv txoj hauj lwm tam sim no).

Ua ntej kuv pib: txhua qhov kev sib cav kuv ua ntawm no yuav siv tau rau ob hom chaw cia khoom. Hauv kuv lub tswv yim, tsis muaj qhov laj thawj vim li cas koj yuav tsum xaiv ib hom chaw cia khoom dua lwm qhov. Koj tuaj yeem ua txhua yam kev ua haujlwm. Kuv zoo siab los tham txog nws, tab sis kuv tsis txaus siab rau cov laj thawj kev tsim khoom vim li cas ib qho zoo dua rau lwm tus.

Kuv pom zoo nrog thawj ntu ntawm Matt lub ntsiab lus:

Vim hais tias ntawm qhov ntsuas, lub monorepository yuav daws tau txhua yam teeb meem tib yam uas polyrepository daws, tab sis tib lub sij hawm yuam koj kom nruj ua ke koj cov cai thiab xav tau kev siv zog zoo kawg los ua kom muaj peev xwm ntawm koj qhov kev tswj hwm version.

Koj yuav tau daws cov teeb meem tib yam tsis hais seb koj xaiv lub monorepository lossis polyrepository. Koj tso tawm li cas? Koj txoj hauv kev rau kev hloov tshiab yog dab tsi? Rov qab compatibility? Hla qhov project dependencies? Dab tsi architectural styles tau txais? Koj tswj hwm koj li kev tsim thiab sim kev tsim kho li cas? Cov npe tsis muaj qhov kawg. Thiab koj yuav daws tau lawv tag nrho thaum koj loj hlob. Tsis muaj cheese dawb.

Kuv xav tias Matt qhov kev sib cav zoo ib yam li cov kev xav sib koom los ntawm ntau tus engineers (thiab cov thawj coj) kuv hwm. Qhov no tshwm sim los ntawm kev xav ntawm tus engineer ua haujlwm ntawm cov khoom siv lossis pab pawg ua haujlwm ntawm cov khoom siv. Koj hnov ​​tej yam zoo li:

  • Lub codebase yog loj - Kuv tsis xav tau tag nrho cov khib nyiab no.
  • Nws nyuaj dua rau kev sim vim kuv yuav tsum sim tag nrho cov khib nyiab no uas kuv tsis xav tau.
  • Nws yog qhov nyuaj dua los ua haujlwm nrog cov neeg sab nraud.
  • Kuv xav tau kuv tus kheej virtual version tswj tshuab.

Tau kawg, tag nrho cov ntsiab lus no yog kev ncaj ncees. Qhov no tshwm sim nyob rau hauv ob qho tib si - nyob rau hauv lub polyrepository kuv muaj kuv tus kheej junk, ntxiv rau qhov yuav tsum tau rau lub build... Kuv kuj yuav xav tau lwm yam junk. Yog li kuv "tsuas yog" tsim cov cuab yeej uas kuaj xyuas tag nrho qhov project. Los yog kuv tsim ib tug fake monorepository nrog submodules. Peb tuaj yeem taug kev ncig qhov no txhua hnub. Tab sis kuv xav tias Matt qhov kev sib cav tsis nco txog qhov laj thawj tseem ceeb, uas kuv tau rov qab hnyav heev rau qhov kev pom zoo ntawm monorepository:

Nws provokes kev sib txuas lus thiab qhia txog teeb meem

Thaum peb cais cov chaw cia khoom, peb tsim ib qho teeb meem ntawm kev sib koom tes thiab pob tshab. Qhov no suav nrog txoj kev uas peb xav txog cov pab pawg (tshwj xeeb tshaj yog txoj kev uas cov tswv cuab xav txog lawv): peb muaj lub luag haujlwm rau qee yam. Peb ua hauj lwm nyob rau hauv cov txheeb ze cais. Cov ciam teb raug kho ntawm kuv pab neeg thiab cov khoom uas peb tab tom ua haujlwm.

Raws li kev tsim vaj tsev ua ntau dua, ib pab neeg tsis tuaj yeem tswj hwm nws ib leeg. Tsawg tus engineers muaj tag nrho cov kab ke hauv lawv lub taub hau. Cia peb hais tias koj tswj hwm qhov sib koom ua ke A uas yog siv los ntawm Pab Pawg B, C, thiab D. Pab Pawg A tab tom rov kho dua, txhim kho API, thiab tseem hloov pauv kev siv sab hauv. Yog li ntawd, cov kev hloov pauv tsis rov qab sib haum. Koj muaj lus qhia dab tsi?

  • Nrhiav txhua qhov chaw uas API qub siv.
  • Puas muaj qhov chaw uas API tshiab siv tsis tau?
  • Koj puas tuaj yeem kho thiab sim lwm yam khoom kom paub tseeb tias lawv tsis tawg?
  • Cov pab pawg no puas tuaj yeem kuaj koj cov kev hloov pauv tam sim no?

Thov nco ntsoov tias cov lus nug no yog ywj siab ntawm hom repository. Koj yuav tsum nrhiav cov pab pawg B, C thiab D. Koj yuav tsum tham nrog lawv, nrhiav lub sijhawm, nkag siab lawv qhov tseem ceeb. Tsawg kawg peb vam tias koj yuav.

Tsis muaj leej twg xav ua qhov no tiag. Qhov no yog qhov kev lom zem tsawg dua li kho qhov damn API. Nws yog txhua tus tib neeg thiab ntxhov. Hauv polyrepository, koj tuaj yeem hloov pauv yooj yim, muab rau cov neeg ua haujlwm ntawm cov khoom ntawd (tej zaum tsis yog B, C lossis D) rau kev tshuaj xyuas, thiab txuas mus ntxiv. Pab pawg B, C thiab D tuaj yeem nyob nrog lawv cov qauv tam sim no rau tam sim no. Lawv yuav raug hloov dua tshiab thaum lawv paub txog koj qhov kev txawj ntse!

Nyob rau hauv lub monorepository, lub luag hauj lwm yog hloov los ntawm lub neej ntawd. Pab Pawg A hloov lawv cov khoom thiab, yog tias tsis ceev faj, tam sim ntawd tawg B, C thiab D. Qhov no ua rau B, C thiab D tshwm sim ntawm A lub qhov rooj, xav tsis thoob vim li cas Pab Pawg A tsoo lub rooj sib txoos. Qhov no qhia A tias lawv hla tsis tau kuv daim ntawv teev npe saum toj no. Lawv yuav tsum tham txog yam lawv yuav ua. B, C thiab D puas tuaj yeem txav tau? Yuav ua li cas yog tias B thiab C tuaj yeem ua tau, tab sis D tau raug cuam tshuam nrog kev cuam tshuam ntawm cov qub algorithm tus cwj pwm?

Tom qab ntawd peb yuav tsum tham txog yuav ua li cas peb yuav tawm ntawm qhov xwm txheej no:

  1. Kev them nyiaj yug rau ntau yam APIs sab hauv, thiab yuav kos lub qub algorithm li deprecated kom txog thaum D tuaj yeem tso tseg tsis siv nws.
  2. Kev them nyiaj yug rau ntau qhov kev tso tawm versions, ib qho nrog cov qub interface, ib qho nrog tus tshiab.
  3. Ncua qhov kev tso tawm ntawm A qhov kev hloov pauv mus txog rau thaum B, C, thiab D tuaj yeem txais tau ib txhij.

Cia peb hais tias peb tau xaiv 1, ob peb APIs. Hauv qhov no, peb muaj ob daim ntawv code. Qub thiab tshiab. Yooj yim heev hauv qee qhov xwm txheej. Peb tshawb xyuas cov cai qub rov qab rau hauv, kos nws raws li tsis pom zoo, thiab pom zoo rau lub sijhawm tshem tawm nrog pab pawg D. Qhov tseem ceeb zoo ib yam rau poly thiab mono repositories.

Txhawm rau tso tawm ntau lub version, peb xav tau ib ceg. Tam sim no peb muaj ob yam - A1 thiab A2. Pab pawg B thiab C siv A2 thiab D siv A1. Peb xav tau txhua yam khoom kom npaj rau kev tso tawm vim tias kev ruaj ntseg hloov tshiab thiab lwm yam kev kho kab mob yuav tsum tau ua ua ntej D tuaj yeem mus tom ntej. Nyob rau hauv ib lub polyrepository, peb tuaj yeem nkaum qhov no nyob rau hauv ib ceg ntev ntev uas xav tias zoo. Nyob rau hauv ib tug monorepository, peb yuam kom cov code tsim nyob rau hauv ib tug tshiab module. Pab pawg D tseem yuav tau hloov pauv rau "qub" tivthaiv. Txhua tus tuaj yeem pom tus nqi peb them ntawm no - tam sim no peb muaj ob npaug ntau npaum li cov lej, thiab txhua qhov kev kho kab mob uas siv rau A1 thiab A2 yuav tsum siv rau ob leeg. Nrog rau txoj kev mus rau hauv ib qho polyrepository, qhov no yog zais tom qab cherry-xaiv. Peb xav tias tus nqi qis dua vim tias tsis muaj qhov sib npaug. Los ntawm cov tswv yim pom zoo, tus nqi yog tib yam: koj yuav tsim, tso tawm, thiab tuav ob qho tib si codebases kom txog thaum koj tuaj yeem rho tawm ib qho ntawm lawv. Qhov txawv yog tias nrog monorepository qhov mob no ncaj qha thiab pom. Qhov no tseem phem dua, thiab qhov zoo.

Thaum kawg, peb tau mus rau qhov thib peb. Tso ncua sij hawm. Nws muaj peev xwm hloov tau los ntawm A yuav txhim kho lub neej ntawm Pab Pawg A. Qhov tseem ceeb, tab sis tsis ceev. Peb puas tuaj yeem ncua sijhawm? Hauv polyrepository, peb thawb qhov no los pin cov khoom qub. Tau kawg peb tab tom qhia qhov no rau Pab Pawg D. Cia li nyob ntawm qhov qub version kom txog thaum koj ntes tau! Qhov no teem koj mus ua si lub coward. Pab Pawg A txuas ntxiv ua haujlwm ntawm lawv cov khoom, tsis quav ntsej qhov tseeb tias Pab Pawg D tab tom siv cov ntawv tshaj tawm tshiab (uas yog Pab Pawg D qhov teeb meem, lawv ruam). Lub caij no, Pab Pawg D hais lus tsis zoo txog Pab Pawg A tus cwj pwm tsis zoo rau kev ruaj ntseg, yog tias lawv tham txog nws txhua. Lub hli dhau mus. Thaum kawg, Pab Pawg D txiav txim siab saib qhov ua tau ntawm qhov hloov tshiab, tab sis A tsuas yog muaj kev hloov pauv ntau dua. Pab Pawg A NW nyuam qhuav nco qab thaum twg lossis yuav ua li cas lawv tsoo D. Kev txhim kho yuav mob ntau dua thiab yuav siv sijhawm ntev dua. Uas xa nws ntxiv mus rau qhov tseem ceeb pawg. Txog hnub peb muaj teeb meem kev ruaj ntseg hauv A uas yuam kom peb ua ib ceg. Pab Pawg A yuav tsum rov qab mus rau lub sijhawm, nrhiav lub ntsiab lus thaum D tau ruaj khov, kho qhov teeb meem nyob ntawd, thiab npaj rau kev tso tawm. Qhov no yog qhov kev xaiv de facto neeg ua, thiab nws yog nyob deb ntawm qhov phem tshaj. Nws zoo nkaus li zoo rau Pab Pawg A thiab Pab Pawg D tsuav yog peb tuaj yeem tsis quav ntsej ib leeg.

Hauv ib qho monorepository, qhov thib peb yog qhov tsis yog qhov kev xaiv. Koj raug yuam kom ua raws li qhov xwm txheej ntawm ib qho ntawm ob txoj hauv kev. Koj yuav tsum pom cov nqi ntawm kev muaj ob ceg tso tawm. Kawm los tiv thaiv koj tus kheej los ntawm kev hloov tshiab uas cuam tshuam rov qab sib raug zoo. Tab sis qhov tseem ceeb tshaj plaws: koj tsis tuaj yeem zam kev sib tham nyuaj.

Hauv kuv qhov kev paub, thaum pab pawg loj, nws tsis tuaj yeem khaws tag nrho cov kab ke hauv siab, thiab qhov ntawd yog qhov tseem ceeb tshaj plaws. Koj yuav tsum txhim kho qhov pom kev tsis sib haum xeeb hauv qhov system. Koj yuav tsum nquag ua haujlwm kom pab pawg saib deb ntawm lawv cov khoom thiab saib kev ua haujlwm ntawm lwm pab pawg thiab cov neeg siv khoom.

Yog lawm, koj tuaj yeem tsim cov cuab yeej uas sim daws qhov teeb meem polyrepository. Tab sis kuv qhov kev paub qhia kev xa mus tas li thiab automation hauv cov lag luam loj qhia kuv qhov no: tus cwj pwm tsis zoo uas tsis siv cov cuab yeej ntxiv yog tus cwj pwm uas koj xav pom. Tus cwj pwm tsis zoo ntawm polyrepository yog kev sib cais, uas yog tag nrho cov ntsiab lus. Tus cwj pwm tsis zoo ntawm monorepository yog sib koom lub luag haujlwm thiab pob tshab, uas yog tag nrho cov ntsiab lus. Nyob rau hauv ob qho tib si, kuv yuav tsim ib lub cuab yeej uas yuav du tawm cov npoo ntxhib. Raws li ib tug thawj coj, kuv yuav xaiv ib tug monorepository txhua txhua lub sij hawm vim hais tias cov cuab yeej yuav tsum tau los txhawb cov kab lis kev cai kuv xav tau, thiab kab lis kev cai los ntawm me me kev txiav txim siab thiab pab neeg ua hauj lwm txhua hnub.

Tsuas yog cov neeg siv sau npe tuaj yeem koom nrog hauv daim ntawv ntsuam xyuas. Kos npe rau hauvthov.

Leej twg yog cov fanatics loj tshaj? Cov neeg txhawb nqa:

  • Monorepo

  • xeb

  • Kev xaiv tsa tsis raug / ob qho tib si

33 cov neeg siv pov npav. 13 cov neeg siv txwv tsis pub siv.

Tau qhov twg los: www.hab.com

Ntxiv ib saib