Proseso sa pag-uswag ug pagsulay sa Docker ug Gitlab CI

Gisugyot nako nga basahon ang transcript sa taho ni Alexander Sigachev gikan sa Inventos "Proseso sa pag-uswag ug pagsulay sa Docker + Gitlab CI"

Kadtong bag-o lang nagsugod sa pagpatuman sa proseso sa pag-uswag ug pagsulay base sa Docker + Gitlab CI kanunay nga mangutana sa mga batakang pangutana. Asa magsugod? Unsaon pag-organisar? Unsaon pagsulay?

Maayo kini nga taho tungod kay naghisgot kini sa usa ka structured nga paagi bahin sa proseso sa pag-uswag ug pagsulay gamit ang Docker ug Gitlab CI. Ang taho mismo gikan sa 2017. Sa akong hunahuna nga gikan niini nga taho makakat-on ka sa mga sukaranan, pamaagi, ideya, kasinatian sa paggamit.

Kinsa ang nagpakabana, palihug sa ilawom sa iring.

Ako si Alexander Sigachev. Nagtrabaho ko sa Inventos. Isulti ko kanimo ang bahin sa akong kasinatian sa paggamit sa Docker ug kung giunsa namon kini hinay-hinay nga gipatuman sa mga proyekto sa kompanya.

Hilisgutan sa presentasyon: Proseso sa pag-uswag gamit ang Docker ug Gitlab CI.

Proseso sa pag-uswag ug pagsulay sa Docker ug Gitlab CI

Kini ang akong ikaduha nga pakigpulong bahin sa Docker. Sa panahon sa unang taho, gigamit ra namo ang Docker sa Development sa mga makina sa developer. Ang gidaghanon sa mga empleyado nga migamit sa Docker mga 2-3 ka tawo. Sa hinay-hinay, ang kasinatian naangkon ug mibalhin kami og gamay. Link sa among unang report.

Unsay mahitabo niini nga report? Ipaambit namo ang among kasinatian mahitungod sa unsa nga rake ang among nakolekta, unsa nga mga problema ang among nasulbad. Dili bisan asa kini matahum, apan gitugotan nga magpadayon.

Ang among motto mao: i-dock ang tanan nga among makuha sa among mga kamot.

Proseso sa pag-uswag ug pagsulay sa Docker ug Gitlab CI

Unsang mga problema ang atong gisulbad?

Kung adunay daghang mga team sa usa ka kompanya, ang programmer usa ka gipaambit nga kapanguhaan. Adunay mga yugto kung ang usa ka programmer gikuha gikan sa usa ka proyekto ug gihatag sa pipila ka panahon sa lain nga proyekto.

Aron dali nga masabtan sa programmer, kinahanglan niya nga i-download ang source code sa proyekto ug ilunsad ang palibot sa labing madali, nga magtugot kaniya sa paglihok sa dugang nga pagsulbad sa mga problema sa kini nga proyekto.

Kasagaran, kung magsugod ka gikan sa wala, nan adunay gamay nga dokumentasyon sa proyekto. Ang kasayuran kung giunsa ang pag-set up magamit ra sa mga tigulang. Ang mga empleyado nagpahimutang sa ilang trabahoan sa ilang kaugalingon sa usa o duha ka adlaw. Aron mapadali kini, gigamit namon ang Docker.

Ang sunod nga rason mao ang standardisasyon sa mga setting sa Development. Sa akong kasinatian, ang mga nag-develop kanunay nga naghimo sa inisyatiba. Sa matag ikalima nga kaso, usa ka custom nga domain ang gisulod, pananglitan, vasya.dev. Naglingkod tapad niya ang iyang silingan nga si Petya, kansang domain kay petya.dev. Naghimo sila og usa ka website o pipila ka bahin sa sistema gamit kini nga ngalan sa domain.

Sa diha nga ang sistema motubo ug kini nga mga ngalan sa domain magsugod sa pagsulod ngadto sa mga kumpigurasyon, usa ka panagbangi sa Development environment mitungha ug ang agianan sa site gisulat pag-usab.

Ang sama nga mahitabo sa mga setting sa database. Ang usa ka tawo wala magsamok sa seguridad ug nagtrabaho sa usa ka walay sulod nga root password. Sa yugto sa pag-instalar, ang MySQL nangutana sa usa ka tawo alang sa usa ka password ug ang password nahimo nga 123. Kanunay nga mahitabo nga ang database config kanunay nga nag-usab depende sa pasalig sa developer. Naay nag correct, naay wala nag correct sa config. Adunay mga limbong sa dihang gikuha namo ang usa ka matang sa pagsulay nga config sa .gitignore ug ang matag developer kinahanglang mag-instalar sa database. Kini nakapalisud sa pagsugod. Kini mao ang gikinahanglan, sa taliwala sa ubang mga butang, sa paghinumdom mahitungod sa database. Ang database kinahanglan nga magsugod, usa ka password kinahanglan nga ibutang, usa ka user kinahanglan nga magparehistro, usa ka lamesa kinahanglan nga gibuhat, ug uban pa.

Ang laing problema mao ang lain-laing mga bersyon sa mga librarya. Kanunay nga mahitabo nga ang usa ka developer nagtrabaho sa lainlaing mga proyekto. Adunay usa ka Legacy nga proyekto nga nagsugod lima ka tuig na ang milabay (gikan sa 2017 - ed. nota). Sa panahon sa paglansad, nagsugod kami sa MySQL 5.5. Adunay usab mga modernong proyekto diin kami naningkamot sa pagpatuman sa mas modernong mga bersyon sa MySQL, pananglitan, 5.7 o labaw pa (sa 2017 - ed. note)

Ang bisan kinsa nga nagtrabaho sa MySQL nahibal-an nga kini nga mga librarya nagdala sa mga dependency uban kanila. Kini mao ang hinoon problema sa pagdagan 2 base sa tingub. Labing menos, ang mga daan nga kliyente adunay problema sa pagkonektar sa bag-ong database. Kini sa baylo nagmugna og daghang mga problema.

Ang sunod nga problema mao kung ang usa ka developer nagtrabaho sa usa ka lokal nga makina, gigamit niya ang mga lokal nga kapanguhaan, lokal nga mga file, lokal nga RAM. Ang tanan nga interaksyon sa panahon sa pagpalambo sa usa ka solusyon sa mga problema gihimo sa sulod sa gambalay sa kamatuoran nga kini nagtrabaho sa usa ka makina. Usa ka pananglitan mao kung kita adunay mga backend server sa Production 3, ug ang developer nagtipig sa mga file sa root directory ug gikan didto ang nginx nagkuha og mga file aron sa pagtubag sa hangyo. Kung ang ingon nga usa ka code moabut sa Production, kini nahimo nga ang file naa sa usa sa 3 nga mga server.

Ang direksyon sa microservices nag-uswag karon. Kung gibahin namon ang among dagkong mga aplikasyon sa pipila ka gagmay nga mga sangkap nga nag-interact sa usag usa. Kini nagtugot kanimo sa pagpili sa mga teknolohiya alang sa usa ka piho nga stack sa mga buluhaton. Gitugotan ka usab niini nga ipaambit ang trabaho ug mga responsibilidad tali sa mga developer.

Ang Frondend-developer, nga nag-develop sa JS, halos walay impluwensya sa Backend. Ang backend developer, sa baylo, nag-develop, sa among kaso, Ruby on Rails ug dili makabalda sa Frondend. Ang interaksyon gihimo gamit ang API.

Isip usa ka bonus, sa tabang sa Docker, nakahimo kami sa pag-recycle sa mga kapanguhaan sa Staging. Ang matag proyekto, tungod sa mga detalye niini, nanginahanglan ug piho nga mga setting. Sa pisikal, gikinahanglan ang paggahin bisan usa ka virtual server ug i-configure kini nga gilain, o ang pagpaambit sa usa ka matang sa variable nga palibot ug ang mga proyekto mahimo, depende sa bersyon sa mga librarya, makaimpluwensya sa usag usa.

Proseso sa pag-uswag ug pagsulay sa Docker ug Gitlab CI

Mga galamiton. Unsa ang atong gamiton?

  • Docker mismo. Ang Dockerfile naghulagway sa mga dependency sa usa ka aplikasyon.
  • Ang Docker-compose usa ka bundle nga naghiusa sa pipila sa among mga aplikasyon sa Docker.
  • Gigamit namo ang GitLab aron tipigan ang source code.
  • Gigamit namo ang GitLab-CI alang sa paghiusa sa sistema.

Proseso sa pag-uswag ug pagsulay sa Docker ug Gitlab CI

Ang report naglangkob sa duha ka bahin.

Ang una nga bahin maghisgot kung giunsa ang pagpadagan sa Docker sa mga makina sa mga developer.

Ang ikaduha nga bahin maghisgot bahin sa kung giunsa ang pagpakig-uban sa GitLab, kung giunsa namon pagpadagan ang mga pagsulay ug kung giunsa namon pag-roll out sa Staging.

Proseso sa pag-uswag ug pagsulay sa Docker ug Gitlab CI

Ang Docker usa ka teknolohiya nga nagtugot (gamit ang usa ka deklaratibo nga pamaagi) sa paghulagway sa mga kinahanglanon nga sangkap. Kini usa ka pananglitan nga Dockerfile. Dinhi among gipahayag nga kami nakapanunod gikan sa opisyal nga Ruby:2.3.0 Docker nga imahe. Naglangkob kini sa Ruby nga bersyon 2.3 nga na-install. Gi-install namon ang gikinahanglan nga mga librarya sa pagtukod ug NodeJS. Gihulagway namon nga naghimo kami usa ka direktoryo /app. Ibutang ang direktoryo sa app ingon nga direktoryo sa pagtrabaho. Sa kini nga direktoryo gibutang namon ang gikinahanglan nga gamay nga Gemfile ug Gemfile.lock. Gitukod namon ang mga proyekto nga nag-install niini nga imahe sa pagsalig. Gipakita namo nga ang sudlanan andam na sa pagpaminaw sa external port 3000. Ang katapusan nga sugo mao ang sugo nga direktang naglansad sa among aplikasyon. Kung atong ipatuman ang project start command, ang aplikasyon mosulay sa pagdagan ug pagpadagan sa gipiho nga command.

Proseso sa pag-uswag ug pagsulay sa Docker ug Gitlab CI

Kini usa ka gamay nga pananglitan sa usa ka docker-compose file. Sa kini nga kaso, gipakita namon nga adunay koneksyon tali sa duha nga mga sudlanan. Direkta kini sa serbisyo sa database ug serbisyo sa web. Ang among mga aplikasyon sa web sa kadaghanan nga mga kaso nanginahanglan usa ka matang sa database ingon usa ka backend alang sa pagtipig sa datos. Tungod kay gigamit namon ang MySQL, ang pananglitan naa sa MySQL - apan wala’y makapugong kanamo sa paggamit sa ubang database (PostgreSQL, Redis).

Gikuha namo gikan sa opisyal nga tinubdan gikan sa Docker hub ang hulagway sa MySQL 5.7.14 nga walay mga kausaban. Gikolekta namo ang hulagway nga responsable sa among web application gikan sa kasamtangan nga direktoryo. Nagkolekta kini usa ka imahe alang kanamo sa una nga paglansad. Dayon kini nagpadagan sa sugo nga atong gipatuman dinhi. Kung mobalik kita, atong makita nga ang paglansad nga command pinaagi sa Puma gihubit. Ang Puma usa ka serbisyo nga gisulat sa Ruby. Sa ikaduha nga kaso, atong gi-override. Kini nga sugo mahimong arbitraryo depende sa atong mga panginahanglan o buluhaton.

Gihulagway usab namo nga kinahanglan namong ipasa ang usa ka pantalan sa among developer host machine gikan sa 3000 ngadto sa 3000 sa container port. Kini awtomatiko nga gihimo gamit ang mga iptables ug ang mekanismo niini, nga direkta nga na-embed sa Docker.

Ang developer mahimo usab, sama kaniadto, maka-access sa bisan unsang magamit nga IP address, pananglitan, ang 127.0.0.1 mao ang lokal o eksternal nga IP address sa makina.

Ang katapusang linya nag-ingon nga ang sulud sa web nagdepende sa sudlanan sa db. Kung gitawag namon ang pagsugod sa sulud sa web, ang docker-compose una nga magsugod sa database alang kanamo. Naa na sa pagsugod sa database (sa tinuud, pagkahuman sa paglansad sa sulud! Dili kini garantiya sa pagkaandam sa database) maglansad sa aplikasyon, ang among backend.

Kini naglikay sa mga kasaypanan kung ang database wala madala ug nagtipig sa mga kahinguhaan kung atong ihunong ang database nga sudlanan, sa ingon nagpagawas sa mga kapanguhaan alang sa ubang mga proyekto.

Proseso sa pag-uswag ug pagsulay sa Docker ug Gitlab CI

Unsa ang naghatag kanamo sa paggamit sa database dockerization sa proyekto. Giayo namo ang bersyon sa MySQL para sa tanang developers. Kini naglikay sa pipila ka mga sayop nga mahimong mahitabo sa diha nga ang mga bersyon managlahi, sa diha nga ang syntax, configuration, default nga mga setting mausab. Kini nagtugot kanimo sa pagtino sa usa ka komon nga hostname alang sa database, login, password. Nagpalayo kami sa zoo sa mga ngalan ug panagbangi sa mga file sa config nga naa namo kaniadto.

Kita adunay oportunidad sa paggamit sa usa ka mas maayo nga config alang sa Development palibot, nga lahi gikan sa default. Ang MySQL gi-configure alang sa huyang nga mga makina pinaagi sa default ug ang performance niini sa gawas sa kahon dili kaayo maayo.

Proseso sa pag-uswag ug pagsulay sa Docker ug Gitlab CI

Gitugotan ka sa Docker nga gamiton ang Python, Ruby, NodeJS, PHP interpreter sa gusto nga bersyon. Gikuha namo ang panginahanglan sa paggamit sa usa ka matang sa version manager. Kaniadto, gigamit ni Ruby ang usa ka pakete sa rpm nga nagtugot kanimo nga usbon ang bersyon depende sa proyekto. Gitugotan usab niini, salamat sa sudlanan sa Docker, nga hapsay nga ibalhin ang code ug bersyon niini kauban ang mga dependency. Wala kami'y problema sa pagsabut sa bersyon sa tighubad ug code. Aron ma-update ang bersyon, ipaubos ang daan nga sudlanan ug ipataas ang bag-ong sudlanan. Kung adunay sayup, mahimo naton ipaubos ang bag-ong sudlanan, ipataas ang daan nga sudlanan.

Pagkahuman sa paghimo sa imahe, ang mga sulud sa Pag-uswag ug Produksyon parehas ra. Tinuod kini ilabi na alang sa dagkong mga instalasyon.

Proseso sa pag-uswag ug pagsulay sa Docker ug Gitlab CI Sa Frontend gigamit namo ang JavaScipt ug NodeJS.

Karon aduna na kitay katapusang proyekto sa ReacJS. Gipadagan sa developer ang tanan sa sulud ug gipalambo gamit ang hot-reload.

Sunod, ang buluhaton sa pag-assemble sa JavaScipt gilansad ug ang code nga giipon sa mga static gihatag pinaagi sa mga kapanguhaan sa pag-save sa nginx.

Proseso sa pag-uswag ug pagsulay sa Docker ug Gitlab CI

Dinhi akong gihatag ang laraw sa among katapusan nga proyekto.

Unsang mga buluhaton ang nasulbad? Kinahanglan namon nga maghimo usa ka sistema diin ang mga mobile device makig-uban. Nakadawat sila ug datos. Usa ka posibilidad mao ang pagpadala sa mga pahibalo sa pagduso sa kini nga aparato.

Unsa may atong nahimo niini?

Gibahin namo sa aplikasyon ang mga sangkap sama sa: ang admin nga bahin sa JS, ang backend, nga naglihok pinaagi sa REST interface ubos sa Ruby on Rails. Ang backend nakig-uban sa database. Ang resulta nga namugna gihatag ngadto sa kliyente. Ang admin panel nakig-interact sa backend ug sa database pinaagi sa REST interface.

Kinahanglan usab namon nga magpadala mga pahibalo sa pagduso. Sa wala pa kana, kami adunay usa ka proyekto nga nagpatuman sa usa ka mekanismo nga responsable sa paghatud sa mga pahibalo sa mga mobile platform.

Nahimo namon ang mosunud nga laraw: ang usa ka operator gikan sa browser nakig-uban sa admin panel, ang admin panel nakig-uban sa backend, ang tahas mao ang pagpadala mga pahibalo sa Push.

Ang mga pahibalo sa push nakig-uban sa laing bahin nga gipatuman sa NodeJS.

Gitukod ang mga pila ug dayon gipadala ang mga pahibalo sumala sa ilang mekanismo.

Duha ka mga database ang gikuha dinhi. Sa pagkakaron, sa tabang sa Docker, gigamit namo ang 2 nga independente nga mga database nga wala'y kalabutan sa usag usa sa bisan unsang paagi. Dugang pa, sila adunay usa ka komon nga virtual network, ug ang pisikal nga datos gitipigan sa lainlaing mga direktoryo sa makina sa developer.

Proseso sa pag-uswag ug pagsulay sa Docker ug Gitlab CI

Parehas pero sa numero. Dinhi diin hinungdanon ang paggamit pag-usab sa code.

Kung kaniadto naghisgot kami bahin sa paggamit pag-usab sa code sa porma sa mga librarya, nan sa kini nga pananglitan, ang among serbisyo nga nagtubag sa mga pahibalo sa Push gigamit pag-usab ingon usa ka kompleto nga server. Naghatag kini usa ka API. Ug ang atong bag-ong kalamboan nakig-interact na niini.

Niadtong panahona, gigamit namo ang bersyon 4 sa NodeJS. Karon (sa 2017 - ed. note) sa bag-o nga mga kalamboan gigamit namo ang bersyon 7 sa NodeJS. Wala’y problema sa bag-ong mga sangkap aron maapil ang mga bag-ong bersyon sa mga librarya.

Kung gikinahanglan, mahimo nimong i-refactor ug ipataas ang bersyon sa NodeJS gikan sa Push notification service.

Ug kung mahimo naton mapadayon ang pagkaangay sa API, nan posible nga ilisan kini sa ubang mga proyekto nga gigamit kaniadto.

Proseso sa pag-uswag ug pagsulay sa Docker ug Gitlab CI

Unsa ang kinahanglan nimong idugang sa Docker? Nagdugang kami og Dockerfile sa among repository, nga naghulagway sa gikinahanglan nga mga dependency. Niini nga pananglitan, ang mga sangkap gibungkag sa lohikal nga paagi. Kini ang minimum nga set sa usa ka backend developer.

Sa paghimo og bag-ong proyekto, naghimo kami og Dockerfile, ihulagway ang gusto nga ekosistema (Python, Ruby, NodeJS). Sa docker-compose, kini naghulagway sa gikinahanglan nga dependency - ang database. Gihulagway namon nga kinahanglan namon ang usa ka database sa ingon ug ingon nga bersyon, pagtipig sa datos didto ug didto.

Gigamit namon ang usa ka bulag nga ikatulo nga sudlanan nga adunay nginx aron magsilbi nga static. Posible nga mag-upload og mga litrato. Gibutang sila sa backend sa usa ka pre-prepared volume, nga gitaod usab sa usa ka sudlanan nga adunay nginx, nga naghatag sa static.

Aron tipigan ang nginx, mysql configuration, gidugang namo ang Docker folder diin among gitipigan ang gikinahanglan nga mga config. Kung ang usa ka developer naghimo og git clone sa usa ka repository sa iyang makina, aduna na siyay proyekto nga andam para sa lokal nga kalamboan. Wala’y pangutana kung unsang pantalan o kung unsang mga setting ang magamit.

Proseso sa pag-uswag ug pagsulay sa Docker ug Gitlab CI

Sunod, kami adunay daghang mga sangkap: admin, inform-API, push notifications.

Aron masugdan kining tanan, naghimo kami og laing repository, nga among gitawag nga dockerized-app. Sa pagkakaron naggamit kami daghang mga repository sa wala pa ang matag sangkap. Lahi ra sila sa lohikal - sa GitLab morag usa ka folder, apan sa makina sa developer, usa ka folder alang sa usa ka piho nga proyekto. Ang usa ka lebel sa ubos mao ang mga sangkap nga gihiusa.

Proseso sa pag-uswag ug pagsulay sa Docker ug Gitlab CI

Kini usa ka pananglitan sa mga sulud lamang sa dockerized-app. Gidala usab namo ang direktoryo sa Docker dinhi, diin among gipuno ang mga pag-configure nga gikinahanglan alang sa mga interaksyon sa tanang mga sangkap. Adunay usa ka README.md nga mubo nga paghulagway kung giunsa ang pagpadagan sa proyekto.

Dinhi among gipadapat ang duha ka docker-compose nga mga file. Gihimo kini aron makadagan sa mga lakang. Kung ang usa ka developer nagtrabaho uban ang kinauyokan, wala niya kinahanglana ang mga pahibalo sa pagduso, naglansad lang siya usa ka docker-compose file ug, sa ingon, ang kapanguhaan na-save.

Kung adunay kinahanglan nga i-integrate sa mga abiso sa pagduso, dayon ang docker-compose.yaml ug docker-compose-push.yaml gilansad.

Tungod kay ang docker-compose.yaml ug docker-compose-push.yaml anaa sa usa ka folder, usa ka virtual nga network ang awtomatik nga gihimo.

Proseso sa pag-uswag ug pagsulay sa Docker ug Gitlab CI

Deskripsyon sa mga sangkap. Kini usa ka mas abante nga file nga responsable sa pagkolekta sa mga sangkap. Unsa ang talagsaon dinhi? Dinhi among gipaila ang bahin sa balanse.

Kini usa ka andam nga gihimo nga imahe sa Docker nga nagpadagan sa nginx ug usa ka aplikasyon nga namati sa socket sa Docker. Dynamic, samtang ang mga sudlanan gi-on ug gi-off, kini nagbag-o sa nginx config. Giapod-apod namon ang pagdumala sa mga sangkap pinaagi sa ikatulo nga lebel nga mga ngalan sa domain.

Para sa Development environment, among gigamit ang .dev domain - api.informer.dev. Ang mga aplikasyon nga adunay .dev domain anaa sa lokal nga makina sa developer.

Dugang pa, ang mga config gibalhin sa matag proyekto ug ang tanan nga mga proyekto dungan nga gilunsad sa parehas nga oras.

Proseso sa pag-uswag ug pagsulay sa Docker ug Gitlab CI

Sa graphically, kini nahimo nga ang kliyente mao ang among browser o usa ka himan diin kami naghangyo sa balancer.

Ang tigbalanse sa ngalan sa domain nagtino kung unsang sudlanan ang kontakon.

Mahimo kini nga nginx, nga naghatag sa admin nga JS. Mahimo kini nga nginx, nga naghatag sa API, o static nga mga file, nga gihatag sa nginx sa porma sa mga pag-upload sa imahe.

Gipakita sa diagram nga ang mga sudlanan konektado sa usa ka virtual nga network ug gitago sa luyo sa usa ka proxy.

Sa makina sa developer, mahimo nimong ma-access ang sudlanan nga nahibal-an ang IP, apan sa prinsipyo wala namo kini gigamit. Halos wala na kinahanglana ang direktang pag-access.

Proseso sa pag-uswag ug pagsulay sa Docker ug Gitlab CI

Unsa nga pananglitan ang tan-awon aron ma-dockerize ang imong aplikasyon? Sa akong opinyon, usa ka maayong pananglitan ang opisyal nga docker nga imahe alang sa MySQL.

Kini medyo mahagiton. Adunay daghang mga bersyon. Apan ang pagpaandar niini nagtugot kanimo sa pagtabon sa daghang mga panginahanglan nga mahimong motumaw sa proseso sa dugang nga pag-uswag. Kung mogugol ka ug oras ug mahibal-an kung giunsa kini tanan nga nakig-uban, nan sa akong hunahuna wala ka mga problema sa pagpatuman sa kaugalingon.

Ang Hub.docker.com kasagaran adunay mga link sa github.com, nga adunay sulud nga hilaw nga datos nga direkta nga gikan diin mahimo nimo ang paghimo sa imahe sa imong kaugalingon.

Dugang pa niini nga repository adunay usa ka docker-endpoint.sh script, nga responsable sa inisyal nga pagsugod ug alang sa dugang nga pagproseso sa paglunsad sa aplikasyon.

Usab sa kini nga pananglitan, adunay abilidad sa pag-configure gamit ang mga variable sa palibot. Pinaagi sa pagtino sa usa ka variable sa palibot kung nagpadagan sa usa ka sulud o pinaagi sa docker-compose, mahimo naton isulti nga kinahanglan naton magbutang usa ka walay sulod nga password alang sa docker nga ma-root sa MySQL o bisan unsa nga gusto naton.

Adunay usa ka kapilian sa paghimo sa usa ka random nga password. Nag-ingon kami nga kinahanglan namon ang usa ka tiggamit, kinahanglan namon nga magbutang usa ka password alang sa tiggamit, ug kinahanglan namon nga maghimo usa ka database.

Sa among mga proyekto, gamay ra ang among gihiusa ang Dockerfile, nga responsable sa pagsugod. Didto among gitul-id kini sa among mga panginahanglan aron mahimo lang kini nga extension sa mga katungod sa tiggamit nga gigamit sa aplikasyon. Kini nagtugot kanamo sa paghimo lamang og database gikan sa application console sa ulahi. Ang mga aplikasyon sa Ruby adunay sugo alang sa paghimo, pag-usab, ug pagtangtang sa mga database.

Proseso sa pag-uswag ug pagsulay sa Docker ug Gitlab CI

Kini usa ka pananglitan kung unsa ang hitsura sa usa ka piho nga bersyon sa MySQL sa github.com. Mahimo nimong ablihan ang Dockerfile ug tan-awa kung giunsa ang pag-install didto.

Ang docker-endpoint.sh mao ang script nga responsable sa entry point. Atol sa inisyal nga pagsugod, gikinahanglan ang pipila ka mga lakang sa pagpangandam, ug kining tanan nga mga aksyon gikuha lang sa script sa initialization.

Proseso sa pag-uswag ug pagsulay sa Docker ug Gitlab CI

Mopadayon ta sa ikaduhang bahin.

Aron matipigan ang mga source code, mibalhin kami sa gitlab. Kini usa ka medyo kusgan nga sistema nga adunay usa ka visual interface.

Usa sa mga sangkap sa Gitlab mao ang Gitlab CI. Kini nagtugot kanimo sa paghulagway sa usa ka han-ay sa mga sugo nga sa ulahi gamiton sa pag-organisar sa usa ka sistema sa paghatod sa code o pagpadagan sa awtomatikong pagsulay.

Gitlab CI 2 nga pakigpulong https://goo.gl/uohKjI - report gikan sa Ruby Russia club - medyo detalyado ug tingali kini makapainteres kanimo.

Proseso sa pag-uswag ug pagsulay sa Docker ug Gitlab CI

Karon atong tan-awon kung unsa ang gikinahanglan aron ma-aktibo ang Gitlab CI. Aron masugdan ang Gitlab CI, kinahanglan lang nato ibutang ang .gitlab-ci.yml file sa gamut sa proyekto.

Dinhi among gihulagway nga gusto namon nga ipatuman ang usa ka han-ay sa mga estado sama sa usa ka pagsulay, pag-deploy.

Nagpatuman kami og mga script nga direktang nagtawag sa docker-compose aron matukod ang among aplikasyon. Kini usa lamang ka pananglitan sa backend.

Sunod, giingon namon nga kinahanglan nga modagan ang mga paglalin aron mabag-o ang database ug magpadagan sa mga pagsulay.

Kung ang mga script gipatuman sa husto ug wala ibalik ang usa ka error code, nan ang sistema nagpadayon sa ikaduhang yugto sa pag-deploy.

Ang yugto sa pag-deploy karon gipatuman alang sa pagpahigayon. Wala kami nag-organisar og zero-downtime nga pagsugod pag-usab.

Gipugos namon nga gipalong ang tanan nga mga sudlanan, ug dayon gipataas namon pag-usab ang tanan nga mga sudlanan, nga nakolekta sa una nga yugto sa panahon sa pagsulay.

Nagdagan kami alang sa karon nga variable sa palibot ang mga pagbalhin sa database nga gisulat sa mga nag-develop.

Adunay usa ka nota nga kini magamit lamang sa master branch.

Kung ang pagbag-o sa ubang mga sanga dili ipatuman.

Posible ang pag-organisar sa mga rollout sa mga sanga.

Proseso sa pag-uswag ug pagsulay sa Docker ug Gitlab CI

Aron maorganisar pa kini, kinahanglan naton i-install ang Gitlab Runner.

Kini nga gamit gisulat sa Golang. Kini usa ka file, sama sa kasagaran sa kalibutan sa Golang, nga wala magkinahanglan bisan unsang dependency.

Sa pagsugod, nagparehistro kami sa Gitlab Runner.

Nakuha namo ang yawe sa Gitlab web interface.

Dayon gitawag nato ang initialization command sa command line.

I-set up ang Gitlab Runner nga interactive (Shell, Docker, VirtualBox, SSH)

Ang code sa Gitlab Runner ipatuman sa matag commit, depende sa .gitlab-ci.yml setting.

Proseso sa pag-uswag ug pagsulay sa Docker ug Gitlab CI

Giunsa kini tan-awon sa Gitlab sa web interface. Human namo makonektar ang GItlab CI, kami adunay bandila nga nagpakita sa kahimtang sa pagtukod sa pagkakaron.

Nakita namon nga ang usa ka pasalig gihimo 4 minuto ang milabay, nga nakapasar sa tanan nga mga pagsulay ug wala’y hinungdan sa bisan unsang mga problema.

Proseso sa pag-uswag ug pagsulay sa Docker ug Gitlab CI

Mahimo natong tan-awon pag-ayo ang mga pagtukod. Dinhi atong makita nga duha ka estado na ang milabay. Ang kahimtang sa pagsulay ug kahimtang sa pag-deploy sa dula.

Kung mag-klik kami sa usa ka piho nga pagtukod, nan adunay usa ka console nga output sa mga mando nga gipadagan sa proseso sumala sa .gitlab-ci.yml.

Proseso sa pag-uswag ug pagsulay sa Docker ug Gitlab CI

Kini ang hitsura sa among kasaysayan sa produkto. Nakita namon nga adunay malampuson nga mga pagsulay. Kung gisumite ang mga pagsulay, dili kini magpadayon sa sunod nga lakang ug ang code sa dula dili ma-update.

Proseso sa pag-uswag ug pagsulay sa Docker ug Gitlab CI

Unsa nga mga buluhaton ang among nasulbad sa pagpahigayon sa among pagpatuman sa docker? Ang among sistema naglangkob sa mga sangkap ug kinahanglan namon nga i-restart, bahin lamang sa mga sangkap nga gi-update sa repository, ug dili ang tibuuk nga sistema.

Aron mahimo kini, kinahanglan namon nga gub-on ang tanan sa lainlaing mga folder.

Pagkahuman namo niini, naproblema mi sa kamatuoran nga ang Docker-compose nagmugna ug kaugalingong network space para sa matag papa ug wala makakita sa mga component sa silingan.

Aron makalibot, gihimo namon ang network sa Docker nga mano-mano. Gisulat kini sa Docker-compose nga imong gigamit ang ingon nga network alang sa kini nga proyekto.

Sa ingon, ang matag sangkap nga nagsugod sa kini nga mesh nakakita sa mga sangkap sa ubang mga bahin sa sistema.

Ang sunod nga isyu mao ang pagbahin sa dula sa daghang mga proyekto.

Tungod kay aron kining tanan nindot tan-awon ug duol sa produksiyon, maayo nga gamiton ang port 80 o 443, nga gigamit bisan asa sa WEB.

Proseso sa pag-uswag ug pagsulay sa Docker ug Gitlab CI

Giunsa namo kini pagsulbad? Gi-assign namo ang usa ka Gitlab Runner sa tanang dagkong proyekto.

Gitugotan ka sa Gitlab sa pagpadagan sa daghang gipang-apod-apod nga Gitlab Runners, nga mokuha ra sa tanan nga mga buluhaton sa usa ka gubot nga paagi ug padaganon kini.

Aron kami walay balay, among gilimitahan ang grupo sa among mga proyekto ngadto sa usa ka Gitlab Runner, nga makasagubang nga walay mga problema sa among mga volume.

Gibalhin namo ang nginx-proxy sa usa ka bulag nga script sa pagsugod ug gidugang ang mga grids alang sa tanan nga mga proyekto niini.

Ang among proyekto adunay usa ka grid, ug ang balancer adunay daghang mga grid sa mga ngalan sa proyekto. Mahimo kini nga proxy sa dugang pinaagi sa mga ngalan sa domain.

Ang among mga hangyo moabut pinaagi sa domain sa port 80 ug masulbad sa usa ka grupo sa sudlanan nga nagsilbi niini nga domain.

Proseso sa pag-uswag ug pagsulay sa Docker ug Gitlab CI

Unsa ang ubang mga problema didto? Mao kini ang gipadagan sa tanan nga mga sudlanan ingon nga gamut pinaagi sa default. Kini ang gamut nga dili managsama sa gamut nga host sa sistema.

Bisan pa, kung mosulod ka sa sudlanan, kini mahimong gamut ug ang file nga among gihimo sa kini nga sudlanan makakuha mga katungod sa gamut.

Kung ang developer misulod sa sudlanan ug naghimo sa pipila ka mga sugo didto nga makamugna og mga file, unya gibiyaan ang sudlanan, nan siya adunay usa ka file sa iyang working directory nga wala siyay access.

Sa unsang paagi kini masulbad? Mahimo nimong idugang ang mga tiggamit nga naa sa sulud.

Unsang mga problema ang mitungha sa dihang gidugang namo ang tiggamit?

Sa paghimo sa usa ka user, kasagaran kita walay sama nga grupo ID (UID) ug user ID (GID).

Aron masulbad kini nga problema sa sudlanan, gigamit namon ang mga tiggamit nga adunay ID 1000.

Sa among kaso, kini nahiuyon sa kamatuoran nga hapit tanan nga mga developer naggamit sa Ubuntu OS. Ug sa Ubuntu, ang unang user adunay ID nga 1000.

Proseso sa pag-uswag ug pagsulay sa Docker ug Gitlab CI

Naa ba tay plano?

Basaha ang dokumentasyon sa Docker. Ang proyekto aktibo nga nag-uswag, ang dokumentasyon nagbag-o. Ang mga datos nga nadawat duha o tulo ka bulan ang milabay hinay-hinay na nga na-outdated.

Ang pipila sa mga problema nga among nasulbad posible nga nasulbad na pinaagi sa standard nga paagi.

Mao nga gusto nako nga moadto pa aron diretso nga moadto sa orkestra.

Usa ka pananglitan mao ang built-in nga mekanismo sa Docker nga gitawag Docker Swarm, nga gikan sa kahon. Gusto kong magpadagan sa usa ka butang sa produksiyon base sa teknolohiya sa Docker Swarm.

Ang mga sudlanan sa spawning naghimo nga dili kombenyente sa pagtrabaho sa mga troso. Karon ang mga troso nahimulag. Nagkatag sila sa mga sudlanan. Usa sa mga buluhaton mao ang paghimo sa dali nga pag-access sa mga troso pinaagi sa web interface.

Proseso sa pag-uswag ug pagsulay sa Docker ug Gitlab CI

Source: www.habr.com

Idugang sa usa ka comment