Proċess ta 'żvilupp u ttestjar ma' Docker u Gitlab CI

Nipproponi li taqra t-traskrizzjoni tar-rapport minn Alexander Sigachev minn Inventos "Proċess ta 'żvilupp u ttestjar ma' Docker + Gitlab CI"

Dawk li għadhom qed jibdew jimplimentaw il-proċess ta 'żvilupp u ttestjar ibbażat fuq Docker + Gitlab CI spiss jistaqsu mistoqsijiet bażiċi. Fejn tibda? Kif torganizza? Kif tittestja?

Dan ir-rapport huwa tajjeb għax jitkellem b'mod strutturat dwar il-proċess ta 'żvilupp u ttestjar bl-użu ta' Docker u Gitlab CI. Ir-rapport innifsu huwa mill-2017. Naħseb li minn dan ir-rapport tista' titgħallem il-baŜi, il-metodoloġija, l-idea, l-esperjenza tal-użu.

Min jimpurtah, jekk jogħġbok taħt il-qattus.

Jisimni Alexander Sigachev. Jien naħdem għal Inventos. Ngħidlek dwar l-esperjenza tiegħi tal-użu ta' Docker u kif qed nimplimentawha gradwalment fuq proġetti fil-kumpanija.

Suġġett tal-preżentazzjoni: Proċess ta' żvilupp bl-użu ta' Docker u Gitlab CI.

Proċess ta 'żvilupp u ttestjar ma' Docker u Gitlab CI

Din hija t-tieni taħdita tiegħi dwar Docker. Fiż-żmien tal-ewwel rapport, użajna biss Docker fl-Iżvilupp fuq magni tal-iżviluppatur. In-numru ta 'impjegati li użaw Docker kien ta' madwar 2-3 persuni. Bil-mod il-mod, inkisbet esperjenza u mxejna ftit aktar. Link għal tagħna l-ewwel rapport.

X'se jkun hemm f'dan ir-rapport? Se naqsmu l-esperjenza tagħna dwar liema rake ġabarna, liema problemi solvejna. Mhux kullimkien kienet sabiħa, iżda tħalliet timxi 'l quddiem.

Il-motto tagħna huwa: dock dak kollu li nistgħu nieħdu idejna fuqu.

Proċess ta 'żvilupp u ttestjar ma' Docker u Gitlab CI

Liema problemi qed insolvu?

Meta jkun hemm diversi timijiet f'kumpanija, il-programmatur huwa riżors kondiviż. Hemm stadji meta programmatur jinġibed minn proġett wieħed u jingħata għal xi żmien għal proġett ieħor.

Sabiex il-programmatur jifhem malajr, jeħtieġ li tniżżel il-kodiċi tas-sors tal-proġett u jniedi l-ambjent kemm jista 'jkun malajr, li jippermettilu jimxi aktar biex isolvi l-problemi ta' dan il-proġett.

Normalment, jekk tibda mill-bidu, allura hemm ftit dokumentazzjoni fil-proġett. L-informazzjoni dwar kif twaqqaf hija disponibbli biss għall-anzjani. L-impjegati jistabbilixxu l-post tax-xogħol tagħhom waħedhom f'ġurnata jew jumejn. Biex tħaffef dan, użajna Docker.

Ir-raġuni li jmiss hija l-istandardizzazzjoni tas-settings fl-Iżvilupp. Fl-esperjenza tiegħi, l-iżviluppaturi dejjem jieħdu l-inizjattiva. F'kull ħames każ, jiddaħħal dominju tad-dwana, pereżempju, vasya.dev. Bilqiegħda ħdejh hemm il-proxxmu Petya, li d-dominju tiegħu huwa petya.dev. Huma jiżviluppaw websajt jew xi komponent tas-sistema bl-użu ta 'dan l-isem tad-dominju.

Meta s-sistema tikber u dawn l-ismijiet tad-dominju jibdew jidħlu f'konfigurazzjonijiet, allura jqum kunflitt tal-ambjent tal-Iżvilupp u l-mogħdija tas-sit tinkiteb mill-ġdid.

L-istess jiġri bl-issettjar tad-database. Xi ħadd ma jolqotx bis-sigurtà u jaħdem b'password tal-għeruq vojta. Fl-istadju tal-installazzjoni, MySQL talab lil xi ħadd għal password u l-password irriżulta li kien 123. Ħafna drabi jiġri li l-konfigurazzjoni tad-database qed tinbidel kontinwament skont l-impenn tal-iżviluppatur. Xi ħadd ikkoreġa, xi ħadd ma kkoreġix il-konfigurazzjoni. Kien hemm tricks meta ħadna xi tip ta 'konfigurazzjoni tat-test .gitignore u kull żviluppatur kellu jinstalla d-database. Dan għamilha diffiċli biex tibda. Huwa meħtieġ, fost affarijiet oħra, li tiftakar dwar id-database. Id-database trid tiġi inizjalizzata, trid tiddaħħal password, utent irid jiġi rreġistrat, trid tinħoloq tabella, eċċ.

Problema oħra hija verżjonijiet differenti tal-libreriji. Ħafna drabi jiġri li żviluppatur jaħdem bi proġetti differenti. Hemm proġett Legacy li beda ħames snin ilu (mill-2017 - nota ed.). Fiż-żmien tat-tnedija, bdejna bil-MySQL 5.5. Hemm ukoll proġetti moderni fejn nippruvaw nimplimentaw verżjonijiet aktar moderni ta 'MySQL, pereżempju, 5.7 jew aktar (fl-2017 - nota ed.)

Kull min jaħdem bil-MySQL jaf li dawn il-libreriji jġibu magħhom dipendenzi. Huwa pjuttost problematiku li tmexxi 2 bażijiet flimkien. Mill-inqas, klijenti antiki huma problematiċi biex jgħaqqdu mad-database l-ġdida. Dan imbagħad joħloq diversi problemi.

Il-problema li jmiss hija meta żviluppatur jaħdem fuq magna lokali, juża riżorsi lokali, fajls lokali, RAM lokali. L-interazzjoni kollha fil-ħin tal-iżvilupp ta 'soluzzjoni għall-problemi titwettaq fil-qafas tal-fatt li taħdem fuq magna waħda. Eżempju huwa meta jkollna servers backend fil-Produzzjoni 3, u l-iżviluppatur jiffranka fajls fid-direttorju tal-għeruq u minn hemm nginx jieħu fajls biex jirrispondi għat-talba. Meta kodiċi bħal dan jidħol fil-Produzzjoni, jirriżulta li l-fajl huwa preżenti fuq wieħed mit-3 servers.

Id-direzzjoni tal-mikroservizzi qed tiżviluppa issa. Meta naqsmu l-applikazzjonijiet kbar tagħna f'xi komponenti żgħar li jinteraġixxu ma 'xulxin. Dan jippermettilek tagħżel teknoloġiji għal munzell speċifiku ta 'kompiti. Jippermettilek ukoll taqsam ix-xogħol u r-responsabbiltajiet bejn l-iżviluppaturi.

Frondend-iżviluppatur, li qed jiżviluppa fuq JS, kważi m'għandu l-ebda influwenza fuq Backend. L-iżviluppatur backend, min-naħa tiegħu, jiżviluppa, fil-każ tagħna, Ruby on Rails u ma jfixkilx Frondend. L-interazzjoni titwettaq bl-użu tal-API.

Bħala bonus, bl-għajnuna ta 'Docker, stajna nirriċiklaw ir-riżorsi fuq Staging. Kull proġett, minħabba l-ispeċifiċitajiet tiegħu, kien jeħtieġ ċerti settings. Fiżikament, kien meħtieġ li jiġi allokat jew server virtwali u kkonfigurathom separatament, jew li jaqsmu xi tip ta 'ambjent varjabbli u proġetti setgħu, skond il-verżjoni tal-libreriji, jinfluwenzaw lil xulxin.

Proċess ta 'żvilupp u ttestjar ma' Docker u Gitlab CI

Għodda. X'nużaw?

  • Docker innifsu. Id-Dockerfile jiddeskrivi d-dipendenzi ta' applikazzjoni waħda.
  • Docker-compose huwa pakkett li jiġbor flimkien ftit mill-applikazzjonijiet Docker tagħna.
  • Aħna nużaw GitLab biex naħżnu l-kodiċi tas-sors.
  • Aħna nużaw GitLab-CI għall-integrazzjoni tas-sistema.

Proċess ta 'żvilupp u ttestjar ma' Docker u Gitlab CI

Ir-rapport jikkonsisti f'żewġ partijiet.

L-ewwel parti se titkellem dwar kif Docker tħaddem fuq il-magni tal-iżviluppaturi.

It-tieni parti se titkellem dwar kif jinteraġixxu ma 'GitLab, kif inwettqu t-testijiet u kif noħorġu għal Staging.

Proċess ta 'żvilupp u ttestjar ma' Docker u Gitlab CI

Docker hija teknoloġija li tippermetti (bl-użu ta' approċċ dikjarattiv) li tiddeskrivi l-komponenti meħtieġa. Dan huwa eżempju Dockerfile. Hawnhekk niddikjaraw li qed nirtu mill-immaġni uffiċjali Ruby:2.3.0 Docker. Fiha verżjoni Ruby 2.3 installata. Aħna ninstallaw il-libreriji tal-bini meħtieġa u NodeJS. Niddeskrivu li noħolqu direttorju /app. Issettja d-direttorju tal-app bħala d-direttorju tax-xogħol. F'dan id-direttorju npoġġu l-minimu meħtieġ Gemfile u Gemfile.lock. Imbagħad nibnu l-proġetti li jinstallaw din l-immaġni tad-dipendenza. Nindikaw li l-kontenitur se jkun lest biex jisma 'fuq il-port estern 3000. L-aħħar kmand huwa l-kmand li jniedi direttament l-applikazzjoni tagħna. Jekk inwettqu l-kmand tal-bidu tal-proġett, l-applikazzjoni se tipprova tmexxi u tmexxi l-kmand speċifikat.

Proċess ta 'żvilupp u ttestjar ma' Docker u Gitlab CI

Dan huwa eżempju minimu ta 'fajl docker-compose. F'dan il-każ, nuru li hemm konnessjoni bejn żewġ kontenituri. Dan huwa direttament fis-servizz tad-database u s-servizz tal-web. L-applikazzjonijiet tal-web tagħna f'ħafna każijiet jeħtieġu xi tip ta 'database bħala backend għall-ħażna tad-dejta. Peress li qed nużaw il-MySQL, l-eżempju huwa bil-MySQL - iżda xejn ma jwaqqafna milli nużaw xi database oħra (PostgreSQL, Redis).

Nieħdu mis-sors uffiċjali miċ-ċentru Docker l-immaġni ta 'MySQL 5.7.14 mingħajr bidliet. Aħna niġbru l-immaġni li hija responsabbli għall-applikazzjoni tal-web tagħna mid-direttorju attwali. Tiġbor immaġini għalina matul l-ewwel tnedija. Imbagħad imexxi l-kmand li qed inwettqu hawn. Jekk immorru lura, naraw li l-kmand tat-tnedija permezz Puma ġie definit. Puma huwa servizz miktub bir-Ruby. Fit-tieni każ, aħna override. Dan il-kmand jista’ jkun arbitrarju skont il-bżonnijiet jew il-kompiti tagħna.

Aħna niddeskrivu wkoll li għandna bżonn ngħaddu port fuq il-magna ospitanti tal-iżviluppatur tagħna minn 3000 sa 3000 fuq il-port tal-kontejners. Dan isir awtomatikament bl-użu ta 'iptables u l-mekkaniżmu tiegħu, li huwa direttament inkorporat f'Docker.

L-iżviluppatur jista 'wkoll, bħal qabel, jaċċessa kwalunkwe indirizz IP disponibbli, pereżempju, 127.0.0.1 huwa l-indirizz IP lokali jew estern tal-magna.

L-aħħar linja tgħid li l-kontenitur tal-web jiddependi fuq il-kontenitur db. Meta nsejħu l-bidu tal-kontenitur tal-web, docker-compose l-ewwel jibda d-database għalina. Diġà fil-bidu tad-database (fil-fatt, wara t-tnedija tal-kontenitur! Dan ma jiggarantixxix il-prontezza tad-database) se tniedi l-applikazzjoni, backend tagħna.

Dan jevita żbalji meta d-database ma tittellax u jiffranka r-riżorsi meta nwaqqfu l-kontenitur tad-database, u b'hekk inħelsu riżorsi għal proġetti oħra.

Proċess ta 'żvilupp u ttestjar ma' Docker u Gitlab CI

Dak li jagħtina l-użu tad-dockerization tad-database fuq il-proġett. Aħna nirranġaw il-verżjoni tal-MySQL għall-iżviluppaturi kollha. Dan jevita xi żbalji li jistgħu jseħħu meta l-verżjonijiet jiddiverġu, meta s-sintassi, il-konfigurazzjoni, is-settings default jinbidlu. Dan jippermettilek tispeċifika hostname komuni għad-database, login, password. Qed nimxu 'l bogħod miż-żoo ta' l-ismijiet u l-kunflitti fil-fajls tal-konfigurazzjoni li kellna qabel.

Għandna l-opportunità li nużaw konfigurazzjoni aktar ottimali għall-ambjent tal-Iżvilupp, li se tkun differenti mill-default. MySQL huwa kkonfigurat għal magni dgħajfa b'mod awtomatiku u l-prestazzjoni tiegħu barra mill-kaxxa hija fqira ħafna.

Proċess ta 'żvilupp u ttestjar ma' Docker u Gitlab CI

Docker jippermettilek tuża l-interpretu Python, Ruby, NodeJS, PHP tal-verżjoni mixtieqa. Aħna neħles mill-ħtieġa li nużaw xi tip ta 'maniġer tal-verżjoni. Preċedentement, Ruby uża pakkett rpm li jippermettilek tibdel il-verżjoni skont il-proġett. Jippermetti wkoll, grazzi għall-kontenitur Docker, li jemigra bla xkiel il-kodiċi u verżjoni tiegħu flimkien mad-dipendenzi. M'għandniex problema nifhmu l-verżjoni kemm tal-interpretu kif ukoll tal-kodiċi. Biex taġġorna l-verżjoni, baxxi l-kontenitur il-qadim u għolli l-kontenitur il-ġdid. Jekk xi ħaġa marret ħażin, nistgħu nbaxxu l-kontenitur il-ġdid, ngħollu l-kontenitur il-qadim.

Wara li tinbena l-immaġni, il-kontenituri kemm fl-Iżvilupp kif ukoll fil-Produzzjoni se jkunu l-istess. Dan hu veru speċjalment għal installazzjonijiet kbar.

Proċess ta 'żvilupp u ttestjar ma' Docker u Gitlab CI Fuq Frontend nużaw JavaScipt u NodeJS.

Issa għandna l-aħħar proġett fuq ReacJS. L-iżviluppatur mexxa kollox fil-kontenitur u żviluppa bl-użu ta 'hot-reload.

Sussegwentement, jitnieda l-kompitu tal-assemblaġġ JavaScipt u l-kodiċi miġbur fi statiċi jingħata permezz ta 'riżorsi li jsalvaw nginx.

Proċess ta 'żvilupp u ttestjar ma' Docker u Gitlab CI

Hawnhekk tajt l-iskema tal-aħħar proġett tagħna.

Liema kompiti ġew solvuti? Kellna bżonn nibnu sistema li magħha jinteraġixxu l-apparati mobbli. Huma jirċievu data. Possibbiltà waħda hija li tibgħat notifiki push lil dan l-apparat.

X’għamilna għal dan?

Aħna maqsuma fl-applikazzjoni komponenti bħal: il-parti admin fuq JS, il-backend, li jaħdem permezz tal-interface REST taħt Ruby on Rails. Il-backend jinteraġixxi mad-database. Ir-riżultat li jiġi ġġenerat jingħata lill-klijent. Il-pannell tal-amministrazzjoni jinteraġixxi mal-backend u d-database permezz tal-interface REST.

Kellna wkoll il-ħtieġa li nibagħtu notifiki push. Qabel dan, kellna proġett li implimenta mekkaniżmu li huwa responsabbli biex iwassal notifiki lill-pjattaformi mobbli.

Aħna żviluppajna l-iskema li ġejja: operatur mill-browser jinteraġixxi mal-pannell tal-amministrazzjoni, il-pannell tal-amministrazzjoni jinteraġixxi mal-backend, il-kompitu huwa li tibgħat notifiki Push.

Notifiki push jinteraġixxu ma 'komponent ieħor li huwa implimentat f'NodeJS.

Jinbnew kjuwijiet u mbagħad jintbagħtu notifiki skont il-mekkaniżmu tagħhom.

Żewġ databases huma mfassla hawn. Bħalissa, bl-għajnuna ta 'Docker, nużaw 2 databases indipendenti li mhumiex relatati ma' xulxin bl-ebda mod. Barra minn hekk, għandhom netwerk virtwali komuni, u data fiżika hija maħżuna f'direttorji differenti fuq il-magna tal-iżviluppatur.

Proċess ta 'żvilupp u ttestjar ma' Docker u Gitlab CI

L-istess imma fin-numri. Dan huwa fejn l-użu mill-ġdid tal-kodiċi huwa importanti.

Jekk qabel tkellimna dwar l-użu mill-ġdid tal-kodiċi fil-forma ta 'libreriji, allura f'dan l-eżempju, is-servizz tagħna li jirrispondi għan-notifiki Push jerġa' jintuża bħala server komplut. Jipprovdi API. U l-iżvilupp il-ġdid tagħna diġà jinteraġixxi magħha.

Dak iż-żmien, konna nużaw il-verżjoni 4 ta 'NodeJS. Issa (fl-2017 - nota ed.) fl-iżviluppi riċenti nużaw il-verżjoni 7 ta 'NodeJS. M'hemm l-ebda problema f'komponenti ġodda biex jinvolvu verżjonijiet ġodda tal-libreriji.

Jekk meħtieġ, tista' tiffattura mill-ġdid u tgħolli l-verżjoni NodeJS mis-servizz ta' notifika Push.

U jekk nistgħu nżommu l-kompatibilità tal-API, allura jkun possibbli li tibdilha ma 'proġetti oħra li kienu użati qabel.

Proċess ta 'żvilupp u ttestjar ma' Docker u Gitlab CI

X'għandek bżonn biex iżżid Docker? Aħna nżidu Dockerfile mar-repożitorju tagħna, li jiddeskrivi d-dipendenzi meħtieġa. F'dan l-eżempju, il-komponenti huma mqassma loġikament. Dan huwa s-sett minimu ta 'żviluppatur backend.

Meta noħolqu proġett ġdid, noħolqu Dockerfile, niddeskrivu l-ekosistema mixtieqa (Python, Ruby, NodeJS). F'docker-compose, jiddeskrivi d-dipendenza meħtieġa - id-database. Aħna niddeskrivu li għandna bżonn database ta 'tali verżjoni jew tali, naħżnu data hemm u hemm.

Aħna nużaw it-tielet kontenitur separat b'nginx biex iservu statiku. Huwa possibbli li jittellgħu stampi. Backend ipoġġihom f'volum ippreparat minn qabel, li huwa mmuntat ukoll f'kontenitur b'nginx, li jagħti l-istatiku.

Biex taħżen il-konfigurazzjoni nginx, mysql, żidna folder Docker li fih naħżnu l-konfigurazzjonijiet meħtieġa. Meta żviluppatur jagħmel git clone ta 'repożitorju fuq il-magna tiegħu, huwa diġà għandu proġett lest għall-iżvilupp lokali. M'hemm l-ebda dubju liema port jew liema settings tapplika.

Proċess ta 'żvilupp u ttestjar ma' Docker u Gitlab CI

Sussegwentement, għandna diversi komponenti: admin, inform-API, notifiki push.

Sabiex nibdew dan kollu, ħloqna repożitorju ieħor, li sejjaħna dockerized-app. Bħalissa nużaw diversi repożitorji qabel kull komponent. Huma biss loġikament differenti - f'GitLab jidher qisu folder, iżda fuq il-magna tal-iżviluppatur, folder għal proġett speċifiku. Livell wieħed 'l isfel huma l-komponenti li se jiġu kkombinati.

Proċess ta 'żvilupp u ttestjar ma' Docker u Gitlab CI

Dan huwa eżempju tal-kontenut biss ta 'dockerized-app. Aħna nġibu wkoll id-direttorju Docker hawn, li fih nimlew il-konfigurazzjonijiet meħtieġa għall-interazzjonijiet tal-komponenti kollha. Hemm README.md li jiddeskrivi fil-qosor kif jitmexxa l-proġett.

Hawnhekk applikajna żewġ fajls docker-compose. Dan isir sabiex tkun tista 'taħdem f'passi. Meta żviluppatur jaħdem bil-qalba, m'għandux bżonn notifiki push, huwa sempliċement iniedi fajl docker-compose u, għaldaqstant, ir-riżorsa tiġi ffrankata.

Jekk ikun hemm bżonn li jiġu integrati man-notifiki push, allura jiġu mnedija docker-compose.yaml u docker-compose-push.yaml.

Peress li docker-compose.yaml u docker-compose-push.yaml huma f'folder, jinħoloq awtomatikament netwerk virtwali wieħed.

Proċess ta 'żvilupp u ttestjar ma' Docker u Gitlab CI

Deskrizzjoni tal-komponenti. Dan huwa fajl aktar avvanzat li huwa responsabbli għall-ġbir tal-komponenti. X'inhu notevoli hawn? Hawnhekk nintroduċu l-komponent tal-bilanċ.

Din hija immaġni Docker lesta li tħaddem nginx u applikazzjoni li tisma 'fuq is-socket Docker. Dinamika, hekk kif il-kontenituri jinxtegħlu u jintfew, jirriġenera l-konfigurazzjoni nginx. Aħna nqassmu l-immaniġġjar tal-komponenti b'ismijiet ta 'dominju tat-tielet livell.

Għall-ambjent tal-Iżvilupp, nużaw id-dominju .dev - api.informer.dev. Applikazzjonijiet b'dominju .dev huma disponibbli fuq il-magna lokali tal-iżviluppatur.

Barra minn hekk, il-konfigurazzjonijiet huma trasferiti għal kull proġett u l-proġetti kollha huma mnedija flimkien fl-istess ħin.

Proċess ta 'żvilupp u ttestjar ma' Docker u Gitlab CI

Grafikament, jirriżulta li l-klijent huwa l-browser tagħna jew xi għodda li biha nagħmlu talbiet lill-balancer.

Il-balancer tal-isem tad-dominju jiddetermina liema kontenitur għandu jikkuntattja.

Jista 'jkun nginx, li jagħti lill-admin JS. Dan jista 'jkun nginx, li jagħti l-API, jew fajls statiċi, li jingħataw lil nginx fil-forma ta' uploads ta 'immaġni.

Id-dijagramma turi li l-kontenituri huma konnessi minn netwerk virtwali u moħbija wara prokura.

Fuq il-magna tal-iżviluppatur, tista 'aċċess għall-kontenitur li tkun taf l-IP, iżda fil-prinċipju ma nużawx dan. M'hemm prattikament l-ebda ħtieġa għal aċċess dirett.

Proċess ta 'żvilupp u ttestjar ma' Docker u Gitlab CI

Liema eżempju għandek tħares lejn biex dockerize l-applikazzjoni tiegħek? Fl-opinjoni tiegħi, eżempju tajjeb huwa l-immaġni uffiċjali tad-docker għal MySQL.

Huwa pjuttost sfida. Hemm ħafna verżjonijiet. Iżda l-funzjonalità tagħha tippermettilek tkopri ħafna ħtiġijiet li jistgħu jinqalgħu fil-proċess ta 'żvilupp ulterjuri. Jekk tqatta 'ħin u tara kif dan kollu jinteraġixxi, allura naħseb li ma jkollokx problemi fl-awtoimplimentazzjoni.

Hub.docker.com normalment ikun fih links għal github.com, li fih dejta mhux ipproċessata direttament li minnha tista' tibni l-immaġni lilek innifsek.

Aktar f'dan ir-repożitorju hemm skript docker-endpoint.sh, li huwa responsabbli għall-inizjalizzazzjoni inizjali u għal aktar ipproċessar tat-tnedija tal-applikazzjoni.

F'dan l-eżempju wkoll, hemm il-ħila li tikkonfigura bl-użu ta 'varjabbli ambjentali. Billi tiddefinixxi varjabbli tal-ambjent meta tħaddem kontenitur wieħed jew permezz ta 'docker-compose, nistgħu ngħidu li għandna bżonn nissettjaw password vojta għal docker biex telimina fuq MySQL jew dak kollu li rridu.

Hemm għażla li tinħoloq password każwali. Aħna ngħidu li għandna bżonn utent, irridu nissettjaw password għall-utent, u għandna bżonn noħolqu database.

Fil-proġetti tagħna, aħna kemmxejn unifikati l-Dockerfile, li huwa responsabbli għall-inizjalizzazzjoni. Hemmhekk ikkoreġejna għall-bżonnijiet tagħna biex nagħmluha biss estensjoni tad-drittijiet tal-utent li tuża l-applikazzjoni. Dan ippermetta li sempliċement noħolqu database mill-console tal-applikazzjoni aktar tard. L-applikazzjonijiet Ruby għandhom kmand biex joħolqu, jimmodifikaw u jħassru databases.

Proċess ta 'żvilupp u ttestjar ma' Docker u Gitlab CI

Dan huwa eżempju ta' kif tidher verżjoni speċifika ta' MySQL fuq github.com. Tista 'tiftaħ id-Dockerfile u tara kif l-installazzjoni għaddejja hemmhekk.

docker-endpoint.sh huwa l-iskript responsabbli għall-punt tad-dħul. Matul l-inizjalizzazzjoni inizjali, huma meħtieġa xi passi ta 'preparazzjoni, u dawn l-azzjonijiet kollha jittieħdu biss fl-iskript tal-inizjalizzazzjoni.

Proċess ta 'żvilupp u ttestjar ma' Docker u Gitlab CI

Ejja ngħaddu għat-tieni parti.

Biex taħżen il-kodiċi tas-sors, aħna qalbu għal gitlab. Din hija sistema pjuttost qawwija li għandha interface viżwali.

Wieħed mill-komponenti ta 'Gitlab huwa Gitlab CI. Jippermettilek tiddeskrivi sekwenza ta' kmandi li aktar tard jintużaw biex torganizza sistema ta' kunsinna ta' kodiċi jew tmexxi ttestjar awtomatiku.

Taħdita Gitlab CI 2 https://goo.gl/uohKjI - rapport mill-klabb Ruby Russia - pjuttost dettaljat u forsi jinteressak.

Proċess ta 'żvilupp u ttestjar ma' Docker u Gitlab CI

Issa se nħarsu lejn dak li hu meħtieġ sabiex nattiva Gitlab CI. Sabiex nibdew Gitlab CI, għandna bżonn biss li npoġġu l-fajl .gitlab-ci.yml fl-għerq tal-proġett.

Hawnhekk niddeskrivu li rridu nwettqu sekwenza ta 'stati bħal test, skjerament.

Aħna nwettqu skripts li jsejħu direttament docker-compose biex nibnu l-applikazzjoni tagħna. Dan huwa biss eżempju backend.

Sussegwentement, ngħidu li huwa meħtieġ li tmexxi migrazzjonijiet biex tibdel id-database u tmexxi testijiet.

Jekk l-iskripts jiġu esegwiti b'mod korrett u ma jirritornax kodiċi ta 'żball, allura s-sistema tipproċedi għat-tieni stadju tal-iskjerament.

L-istadju tal-iskjerament bħalissa huwa implimentat għall-istadji. Aħna ma organizzajnax bidu mill-ġdid mingħajr perijodi ta' waqfien.

Aħna nefnu bil-forza l-kontenituri kollha, u mbagħad nerġgħu ngħollu l-kontenituri kollha, miġbura fl-ewwel stadju waqt l-ittestjar.

Qegħdin inħaddmu għall-varjabbli ambjentali attwali l-migrazzjonijiet tad-database li nkitbu mill-iżviluppaturi.

Hemm nota li dan japplika biss għall-fergħa kaptan.

Meta tbiddel fergħat oħra ma tiġix eżegwita.

Huwa possibbli li jiġu organizzati rollouts minn fergħat.

Proċess ta 'żvilupp u ttestjar ma' Docker u Gitlab CI

Biex norganizzaw dan aktar, irridu ninstallaw Gitlab Runner.

Din l-utilità hija miktuba f'Golang. Huwa fajl wieħed, kif inhu komuni fid-dinja Golang, li ma teħtieġ l-ebda dipendenzi.

Mal-istartjar, nirreġistraw il-Gitlab Runner.

Ikollna ċ-ċavetta fl-interface tal-web Gitlab.

Imbagħad insejħu l-kmand tal-inizjalizzazzjoni fuq il-linja tal-kmand.

Stabbilixxi Gitlab Runner b'mod interattiv (Shell, Docker, VirtualBox, SSH)

Il-kodiċi fuq Gitlab Runner se jesegwixxi fuq kull impenn, skont l-issettjar .gitlab-ci.yml.

Proċess ta 'żvilupp u ttestjar ma' Docker u Gitlab CI

Kif jidher viżwalment f'Gitlab fl-interface tal-web. Wara li kkonnettja GItlab CI, għandna bandiera li turi l-istat tal-bini fil-mument.

Naraw li sar commit 4 minuti ilu, li għadda mit-testijiet kollha u ma ġab l-ebda problemi.

Proċess ta 'żvilupp u ttestjar ma' Docker u Gitlab CI

Nistgħu nagħtu ħarsa aktar mill-qrib lejn il-bini. Hawnhekk naraw li diġà għaddew żewġ stati. L-istatus tal-ittestjar u l-istatus tal-iskjerament fuq l-istadju.

Jekk nikklikkjaw fuq bini speċifiku, allura jkun hemm output tal-console tal-kmandi li tmexxew fil-proċess skont .gitlab-ci.yml.

Proċess ta 'żvilupp u ttestjar ma' Docker u Gitlab CI

Dan huwa kif tidher l-istorja tal-prodott tagħna. Naraw li kien hemm tentattivi ta’ suċċess. Meta jiġu sottomessi t-testijiet, ma tipproċedix għall-pass li jmiss u l-kodiċi tal-istadju ma jiġix aġġornat.

Proċess ta 'żvilupp u ttestjar ma' Docker u Gitlab CI

Liema kompiti solvejna fuq l-istadju meta implimentajna docker? Is-sistema tagħna tikkonsisti f'komponenti u kellna bżonn nibdew mill-ġdid, parti biss mill-komponenti li ġew aġġornati fir-repożitorju, u mhux is-sistema kollha.

Biex nagħmlu dan, kellna nkissru kollox f'folders separati.

Wara li għamilna dan, kellna problema bil-fatt li Docker-compose joħloq l-ispazju tan-netwerk tiegħu stess għal kull daddy u ma jarax il-komponenti tal-proxxmu.

Sabiex nidħlu, ħloqna n-netwerk f'Docker manwalment. Kien miktub f'Docker-compose li tuża netwerk bħal dan għal dan il-proġett.

Għalhekk, kull komponent li jibda b'din il-malja jara komponenti f'partijiet oħra tas-sistema.

Il-kwistjoni li jmiss qed taqsam l-istadji fuq proġetti multipli.

Peress li biex dan kollu jidher sabiħ u kemm jista 'jkun qrib il-produzzjoni, tajjeb li tuża l-port 80 jew 443, li jintuża kullimkien fil-WEB.

Proċess ta 'żvilupp u ttestjar ma' Docker u Gitlab CI

Kif solvejna? Assenjajna Gitlab Runner wieħed għall-proġetti ewlenin kollha.

Gitlab jippermettilek tmexxi diversi Gitlab Runners distribwiti, li sempliċiment jieħdu l-kompiti kollha wara xulxin b'mod kaotiku u jmexxuhom.

Sabiex ma jkollniex dar, illimitajna l-grupp tal-proġetti tagħna għal Gitlab Runner wieħed, li jlaħħaq mingħajr problemi mal-volumi tagħna.

Aħna mċaqalqa nginx-proxy fi skript tal-istartjar separat u żidna grilji għall-proġetti kollha fiha.

Il-proġett tagħna għandu grid waħda, u l-balancer għandu diversi grilji skont l-ismijiet tal-proġetti. Hija tista 'prokura aktar permezz ta' ismijiet ta 'dominju.

It-talbiet tagħna jiġu permezz tad-dominju fuq il-port 80 u jiġu solvuti fi grupp ta 'kontejners li jservi dan id-dominju.

Proċess ta 'żvilupp u ttestjar ma' Docker u Gitlab CI

Liema problemi oħra kien hemm? Dan huwa dak li l-kontenituri kollha jaħdmu bħala root b'mod awtomatiku. Dan huwa għerq mhux ugwali għall-għerq ospitanti tas-sistema.

Madankollu, jekk tidħol fil-kontenitur, ikun root u l-fajl li noħolqu f'dan il-kontenitur jieħu d-drittijiet tal-għeruq.

Jekk l-iżviluppatur daħal fil-kontenitur u għamel xi kmandi hemmhekk li jiġġeneraw fajls, imbagħad ħalla l-kontenitur, allura għandu fajl fid-direttorju tax-xogħol tiegħu li ma jkollux aċċess għalih.

Kif tista’ tiġi solvuta? Tista 'żżid utenti li se jkunu fil-kontenitur.

Liema problemi qamu meta żidna l-utent?

Meta noħolqu utent, ħafna drabi ma jkollniex l-istess ID tal-grupp (UID) u ID tal-utent (GID).

Biex issolvi din il-problema fil-kontenitur, nużaw utenti b'ID 1000.

Fil-każ tagħna, dan ħabat mal-fatt li kważi l-iżviluppaturi kollha jużaw l-OS Ubuntu. U fuq Ubuntu, l-ewwel utent għandu ID ta '1000.

Proċess ta 'żvilupp u ttestjar ma' Docker u Gitlab CI

Għandna pjanijiet?

Aqra d-dokumentazzjoni ta' Docker. Il-proġett qed jiżviluppa b'mod attiv, id-dokumentazzjoni qed tinbidel. Id-dejta li waslet xahrejn jew tliet xhur ilu diġà bil-mod il-mod qed issir skaduta.

Uħud mill-problemi li solvejna huma possibilment diġà solvuti b'mezzi standard.

Għalhekk irrid immur aktar 'il quddiem diġà biex immur direttament għall-orkestrazzjoni.

Eżempju wieħed huwa l-mekkaniżmu integrat ta’ Docker imsejjaħ Docker Swarm, li joħroġ mill-kaxxa. Irrid inmexxi xi ħaġa fil-produzzjoni bbażata fuq it-teknoloġija Docker Swarm.

Il-kontenituri li jbid jagħmluha inkonvenjenti li taħdem biz-zkuk. Issa ż-zkuk huma iżolati. Huma mxerrda madwar kontenituri. Waħda mill-kompiti hija li tagħmel aċċess konvenjenti għar-zkuk permezz tal-interface tal-web.

Proċess ta 'żvilupp u ttestjar ma' Docker u Gitlab CI

Sors: www.habr.com

Żid kumment