Inqubo yokuthuthukisa nokuhlola nge-Docker ne-Gitlab CI

Ngiphakamisa ukuthi ufunde okulotshiwe kombiko ka-Alexander Sigachev ovela ku-Inventos "Inqubo yokuthuthukiswa nokuhlola nge-Docker + Gitlab CI"

Labo abasanda kuqala ukusebenzisa inqubo yokuthuthukisa nokuhlola esekelwe ku-Docker + Gitlab CI bavame ukubuza imibuzo eyisisekelo. Uzoqala kuphi? Indlela yokuhlela? Indlela yokuhlola?

Lo mbiko muhle ngoba ukhuluma ngendlela ehlelekile mayelana nenqubo yokuthuthukiswa nokuhlola kusetshenziswa i-Docker ne-Gitlab CI. Umbiko ngokwawo usuka ku-2017. Ngicabanga ukuthi kulo mbiko ungakwazi ukuqoqa okuyisisekelo, indlela yokusebenza, umbono, nolwazi lokusebenzisa.

Ubani onendaba, ngicela ngaphansi kwekati.

Igama lami ngingu-Alexander Sigachev. Ngisebenzela i-Inventos. Ngizokutshela ngolwazi lwami ngisebenzisa i-Docker nokuthi siyisebenzisa kanjani kancane kancane kumaphrojekthi enkampani.

Isihloko sombiko: Inqubo yokuthuthukisa kusetshenziswa i-Docker ne-Gitlab CI.

Inqubo yokuthuthukisa nokuhlola nge-Docker ne-Gitlab CI

Lena inkulumo yami yesibili mayelana ne-Docker. Ngesikhathi sombiko wokuqala, sasebenzisa i-Docker Kwezokuthuthukiswa kuphela emishinini yonjiniyela. Inani labasebenzi abasebenzisa i-Docker lalicishe libe ngabantu abangu-2-3. Kancane kancane, ulwazi lwatholakala futhi saqhubekela phambili kancane. Xhumana nathi umbiko wokuqala.

Kuzoba yini kulo mbiko? Sizokwabelana ngolwazi lwethu mayelana nokuthi yimaphi amaraki esiwaqoqile, yiziphi izinkinga esizixazulule. Kwakungekuhle yonke indawo, kodwa kwasivumela ukuba siqhubeke.

Isiqubulo sethu: yenza konke esikutholayo ezandleni zethu.

Inqubo yokuthuthukisa nokuhlola nge-Docker ne-Gitlab CI

Yiziphi izinkinga esizixazululayo?

Uma inkampani inamaqembu amaningana, umhleli uyisisetshenziswa okwabelwana ngaso. Kunezigaba lapho umenzi wohlelo ekhishwa kuphrojekthi eyodwa futhi anikezwe enye iphrojekthi isikhathi esithile.

Ukuze umhleli aqonde ngokushesha, udinga ukulanda ikhodi yomthombo wephrojekthi futhi aqalise indawo ngokushesha ngangokunokwenzeka, okuzomvumela ukuthi athuthuke ekuxazululeni izinkinga zale phrojekthi.

Imvamisa, uma uqala phansi, kuba nemibhalo emincane kuphrojekthi. Abantu abadala kuphela abanolwazi lokuthi isetha kanjani. Izisebenzi zimisa indawo yazo yokusebenza zodwa ngosuku olulodwa noma ezimbili. Ukusheshisa lokhu, sisebenzise i-Docker.

Isizathu esilandelayo wukumiswa kwezilungiselelo kokuthi Ukuthuthukiswa. Ngokuhlangenwe nakho kwami, abathuthukisi bahlala bethatha isinyathelo kuqala. Kuzo zonke izimo zesihlanu, kufakwe isizinda ngokwezifiso, isibonelo vasya.dev. Eduze kwami ​​umakhelwane wami uPetya, osizinda sakhe sithi petya.dev. Bakha iwebhusayithi noma ingxenye yesistimu besebenzisa leli gama lesizinda.

Lapho uhlelo lukhula futhi la magama wesizinda eqala ukufakwa ekucushweni, ukungqubuzana ezindaweni Zokuthuthukiswa kuyavela futhi indlela yesayithi ibhalwa kabusha.

Kwenzeka okufanayo ngezilungiselelo zesizindalwazi. Abanye abantu abazihluphi ngokuvikeleka futhi basebenze nephasiwedi engenalutho yempande. Esigabeni sokufakwa, i-MySQL icele othile iphasiwedi futhi igama-mfihlo liphenduke libe ngu-123. Ngokuvamile kwenzeka ukuthi ukulungiselelwa kwedathabhesi kwakushintsha njalo kuye ngokuthi unjiniyela uzibophezele. Othile ulungisile, othile akazange alungise ukulungiselelwa. Kube khona amaqhinga lapho sifaka ukulungiselelwa kokuhlola okuthile .gitignore futhi umthuthukisi ngamunye bekufanele afake isizindalwazi. Lokhu kwenza inqubo yokuqala yaba nzima kakhulu. Phakathi kwezinye izinto, udinga ukukhumbula nge-database. I-database kufanele iqaliswe, iphasiwedi kufanele ibhaliswe, umsebenzisi kufanele abhaliswe, kufanele adalwe uphawu, njalonjalo.

Enye inkinga izinguqulo ezahlukene zemitapo yolwazi. Ngokuvamile kwenzeka ukuthi umthuthukisi asebenze kumaphrojekthi ahlukene. Kukhona iphrojekthi Yefa, eyaqala eminyakeni emihlanu edlule (kusukela ngo-2017 - inothi lomhleli). Ekuqaleni siqale nge-MySQL 5.5. Kukhona namaphrojekthi wesimanje lapho sizama khona ukusebenzisa izinguqulo zesimanje ze-MySQL, isibonelo 5.7 noma ngaphezulu (ngo-2017 - inothi lomhleli)

Noma ubani osebenza nge-MySQL uyazi ukuthi le mitapo yolwazi iphethe okuncikile. Kuyinkinga impela ukusebenzisa i-database engu-2 ndawonye. Okungenani, kuyinkinga ukuxhuma amaklayenti amadala kusizindalwazi esisha. Lokhu kudala izinkinga eziningi.

Inkinga elandelayo lapho umthuthukisi esebenza emshinini wendawo, usebenzisa izinsiza zendawo, amafayela wendawo, i-RAM yendawo. Konke ukusebenzisana ngesikhathi sokuthuthukisa isisombululo sezinkinga kwenziwa ngaphakathi kohlaka lweqiniso lokuthi lusebenza emshinini owodwa. Isibonelo kungaba uma sinamaseva e-backend ku-Production 3, futhi unjiniyela agcina amafayela kumkhombandlela wempande futhi ukusuka lapho nginx ithatha amafayela ukuphendula isicelo. Lapho ikhodi enjalo ingena Ekukhiqizeni, kuvele ukuthi ifayela likhona kwenye yamaseva angu-3.

Isiqondiso se-microservices siyathuthuka okwamanje. Lapho sihlukanisa izinhlelo zethu zokusebenza ezinkulu zibe izingxenye ezincane ezisebenzisanayo. Lokhu kukuvumela ukuthi ukhethe ubuchwepheshe besitaki somsebenzi othile. Lokhu futhi kukuvumela ukuthi uhlukanise umsebenzi nendawo yesibopho phakathi konjiniyela.

Umthuthukisi ongaphambili, othuthuka ku-JS, akanalo nhlobo ithonya ku-backend. Umthuthukisi ongemuva, naye, uthuthukisa, kithi i-Ruby on Rails futhi akaphazamisi i-Frondend. Ukusebenzisana kwenziwa kusetshenziswa i-API.

Njengebhonasi, sisebenzisa i-Docker sikwazile ukuvuselela izinsiza ku-Staging. Iphrojekthi ngayinye, ngenxa yemininingwane yayo, yayidinga izilungiselelo ezithile. Ngokoqobo, bekudingeka ukwaba iseva ebonakalayo bese uyilungiselela ngokwehlukana, noma ukuhlukanisa uhlobo oluthile lwendawo eguquguqukayo futhi amaphrojekthi angathonyana, kuye ngenguqulo yemitapo yolwazi.

Inqubo yokuthuthukisa nokuhlola nge-Docker ne-Gitlab CI

Amathuluzi. Sisebenzisani?

  • I-Docker ngokwayo. I-Dockerfile ichaza ukuncika kohlelo lokusebenza olulodwa.
  • I-Docker-compose iyinqwaba ehlanganisa izinhlelo zethu ezimbalwa ze-Docker.
  • Sisebenzisa i-GitLab ukugcina ikhodi yomthombo.
  • Sisebenzisa i-GitLab-CI ekuhlanganiseni isistimu.

Inqubo yokuthuthukisa nokuhlola nge-Docker ne-Gitlab CI

Umbiko uqukethe izingxenye ezimbili.

Ingxenye yokuqala izokutshela ukuthi ungayisebenzisa kanjani i-Docker emishinini yabathuthukisi.

Ingxenye yesibili izokhuluma ngendlela yokusebenzisana ne-GitLab, ukuthi siqhuba kanjani izivivinyo nokuthi siphuma kanjani ku-Staging.

Inqubo yokuthuthukisa nokuhlola nge-Docker ne-Gitlab CI

I-Docker ubuchwepheshe obuvumela (usebenzisa indlela yokumemezela) ukuchaza izingxenye ezidingekayo. Lesi isibonelo se-Dockerfile. Lapha simemezela ukuthi sizuza njengefa esithombeni esisemthethweni se-Docker sika-Ruby:2.3.0. Iqukethe inguqulo ye-Ruby 2.3 efakiwe. Sifaka imitapo yolwazi edingekayo kanye ne-NodeJS. Sichaza ukuthi sakha uhla lwemibhalo /app. Sabela inkomba yohlelo lokusebenza njengohlu lwemibhalo olusebenzayo. Kulolu hlu lwemibhalo sibeka ubuncane obudingekayo be-Gemfile ne-Gemfile.lock. Bese sakha amaphrojekthi afaka lesi sithombe sokuncika. Sibonisa ukuthi isiqukathi sizobe sesilungele ukulalela embobeni yangaphandle engu-3000. Umyalo wokugcina umyalo owethula ngokuqondile uhlelo lwethu lokusebenza. Uma senza umyalo wokugijima kwephrojekthi, uhlelo lokusebenza luzozama ukusebenzisa futhi lusebenzise umyalo oshiwo.

Inqubo yokuthuthukisa nokuhlola nge-Docker ne-Gitlab CI

Lesi isibonelo esincane sefayela le-docker-compose. Kulokhu, sibonisa ukuthi kukhona ukuxhumana phakathi kweziqukathi ezimbili. Lokhu kuqonde ngqo kunsizakalo yedathabheyisi kanye nensizakalo yewebhu. Izinhlelo zethu zokusebenza zewebhu ezimweni eziningi zidinga uhlobo oluthile lwesizindalwazi njengesisemuva sokugcina idatha. Njengoba sisebenzisa i-MySQL, isibonelo singe-MySQL - kodwa akukho okusivimbelayo ekusebenziseni enye i-database (i-PostgreSQL, i-Redis).

Sithatha isithombe se-MySQL 5.7.14 ngaphandle kwezinguquko emthonjeni osemthethweni kusuka kuhabhu le-Docker. Siqoqa isithombe esinesibopho sohlelo lwethu lokusebenza lwewebhu ohlwini lwemibhalo lwamanje. Ngesikhathi sokwethulwa kokuqala, usiqoqela isithombe. Bese isebenzisa umyalo esiwenza lapha. Uma sibuyela emuva, sizobona ukuthi umyalo wokuqalisa uchazwe ngePuma. IPuma iyinkonzo ebhalwe ngoRuby. Esimweni sesibili sidlula. Lo myalo ungaba ngokunganaki kuye ngezidingo zethu noma imisebenzi.

Siphinde sichaze ukuthi sidinga ukudlulisa ichweba emshinini wethu wokusingathwa konjiniyela kusuka ku-3000 kuya ku-3000 port port. Lokhu kwenziwa ngokuzenzakalelayo kusetshenziswa ama-iptables kanye nendlela yawo, eshumekwe ngokuqondile ku-Docker.

Umthuthukisi angakwazi, njengangaphambili, ukufinyelela noma yiliphi ikheli le-IP elitholakalayo, isibonelo, 127.0.0.1 ikheli le-IP lendawo noma langaphandle lomshini.

Umugqa wokugcina uthi isiqukathi sewebhu sincike esitsheni se-db. Uma sibiza isiqukathi sewebhu ukuthi sethule, i-docker-compose izoqale isethulele isizindalwazi. Kakade ekuqaleni kwe-database (empeleni, ngemva kokwethulwa kwesiqukathi! Lokhu akuqinisekisi ukulungela kwe-database) izokwethula uhlelo lwethu lokusebenza, i-backend yethu.

Lokhu kusivumela ukuthi sigweme amaphutha lapho isizindalwazi singekho futhi kusivumela ukuthi silondoloze izinsiza lapho simisa isitsha sesizindalwazi, ngaleyo ndlela sikhulula izinsiza kwamanye amaphrojekthi.

Inqubo yokuthuthukisa nokuhlola nge-Docker ne-Gitlab CI

Kusinikezani ukusebenzisa i-database dockerization kuphrojekthi? Sirekhoda inguqulo ye-MySQL yabo bonke onjiniyela. Lokhu kukuvumela ukuthi ugweme amaphutha athile okungenzeka uma izinguqulo zihluka, lapho i-syntax, ukumisa, nezilungiselelo ezizenzakalelayo zishintsha. Lokhu kukuvumela ukuthi ucacise igama lomethuleli elivamile lesizindalwazi, ukungena ngemvume, iphasiwedi. Siyasuka ku-zoo yamagama nokungqubuzana kumafayela okumisa abekhona ngaphambilini.

Sinethuba lokusebenzisa ukulungiselelwa okungcono kakhulu kwendawo yokuThuthukiswa, okuzohluka kulena emisiwe. I-MySQL ilungiselelwe ngokuzenzakalelayo kumishini ebuthakathaka futhi ukusebenza kwayo ngaphandle kwebhokisi kuphansi kakhulu.

Inqubo yokuthuthukisa nokuhlola nge-Docker ne-Gitlab CI

I-Docker ikuvumela ukuthi usebenzise i-Python, i-Ruby, i-NodeJS, umhumushi we-PHP wenguqulo oyifunayo. Sisusa isidingo sokusebenzisa uhlobo oluthile lomphathi wenguqulo. Ngaphambilini, iphakheji ye-rpm yayisetshenziselwa i-Ruby, ekuvumela ukuthi uguqule inguqulo kuye ngephrojekthi. Ngenxa yesiqukathi se-Docker, lokhu futhi kukuvumela ukuthi uthuthe ikhodi kahle futhi uyiguqule kanye nokuncika. Asinankinga yokuqonda inguqulo yakho kokubili umhumushi kanye nekhodi. Ukuze ubuyekeze inguqulo, udinga ukwehlisa isiqukathi esidala futhi ukhuphule isiqukathi esisha. Uma kukhona okungahambi kahle, singehlisa isitsha esisha, siphakamise isitsha esidala.

Ngemuva kokwakha isithombe, iziqukathi kukho kokubili i-Development and Production zizofana. Lokhu kuyiqiniso ikakhulukazi ekufakweni okukhulu.

Inqubo yokuthuthukisa nokuhlola nge-Docker ne-Gitlab CI Ku-Frontend sisebenzisa i-JavaScipt ne-NodeJS.

Manje sinephrojekthi yethu yokugcina ku-ReacJS. Umthuthukisi wethule yonke into esitsheni futhi wathuthukiswa esebenzisa ukulayisha kabusha okushisayo.

Okulandelayo, umsebenzi wokuhlanganisa i-JavaScipt wethulwa futhi ikhodi eqoqwe ngokwezibalo ithunyelwa nge-nginx, izinsiza zokulondoloza.

Inqubo yokuthuthukisa nokuhlola nge-Docker ne-Gitlab CI

Lapha nginikeze umdwebo wephrojekthi yethu yakamuva.

Yiziphi izinkinga ozixazulule? Besinesidingo sokwakha uhlelo lapho amadivaysi eselula asebenzisana nawo. Bathola idatha. Elinye lamathuba ukuthumela izaziso zohlelo lokusebenza kule divayisi.

Senzeni ngalokhu?

Sihlukanise uhlelo lokusebenza ngalezi zingxenye ezilandelayo: ingxenye yomqondisi ku-JS, i-backend esebenza ngesixhumi esibonakalayo se-REST ngaphansi kwe-Ruby on Rails. I-backend isebenzisana nesizindalwazi. Umphumela okhiqizwayo unikezwa iklayenti. Iphaneli yomqondisi isebenzisana ne-backend kanye nesizindalwazi ngesixhumi esibonakalayo se-REST.

Siphinde saba nesidingo sokuthumela izaziso ze-Push. Ngaphambi kwalokhu, besinephrojekthi lapho kwasetshenziswa indlela eyayinesibopho sokuletha izaziso kumapulatifomu eselula.

Senze lolu hlelo olulandelayo: u-opharetha ovela esipheqululini usebenzisana nephaneli yomqondisi, iphaneli yomqondisi isebenzisana ne-backend, umsebenzi ukuthumela izaziso ze-Push.

Izaziso zohlelo lokusebenza zisebenzisana nenye ingxenye esetshenziswa ku-NodeJS.

Imigqa iyakhiwa futhi izaziso zithunyelwa ngokuya ngendlela yazo.

Izingosi zolwazi ezimbili zidwetshiwe lapha. Njengamanje, sisebenzisa i-Docker, sisebenzisa isizindalwazi esizimele esi-2 esingaxhumenenga ngenye indlela. Ngaphezu kweqiniso lokuthi banenethiwekhi evamile ebonakalayo, futhi idatha ebonakalayo igcinwa kuzinkomba ezahlukene emshinini wonjiniyela.

Inqubo yokuthuthukisa nokuhlola nge-Docker ne-Gitlab CI

Into efanayo kodwa ngezinombolo. Ukusetshenziswa kabusha kwekhodi kubalulekile lapha.

Uma ngaphambilini sikhulume ngokusebenzisa kabusha ikhodi ngendlela yemitapo yolwazi, khona-ke kulesi sibonelo isevisi yethu, ephendula izaziso ze-Push, iphinda isetshenziswe njengeseva ephelele. Ihlinzeka nge-API. Futhi intuthuko yethu entsha isebenzisana nayo.

Ngaleso sikhathi sasisebenzisa inguqulo 4 ye-NodeJS. Manje (ngo-2017 - inothi lomhleli) ekuthuthukisweni kwethu kwakamuva sisebenzisa inguqulo yesi-7 ye-NodeJS. Ayikho inkinga ezingxenyeni ezintsha zokufaka izinguqulo ezintsha zemitapo yolwazi.

Uma kudingekile, ungakwazi ukuphinda wenze kabusha futhi uphakamise inguqulo ye-NodeJS yesevisi yesaziso se-Push.

Futhi uma singakwazi ukugcina ukuhambisana kwe-API, lapho-ke kuzokwaziwa ukuthi esikhundleni sayo kufakwe amanye amaphrojekthi asetshenziswe ngaphambilini.

Inqubo yokuthuthukisa nokuhlola nge-Docker ne-Gitlab CI

Yini oyidingayo ukuze wengeze i-Docker? Sengeza i-Dockerfile endaweni yethu yokugcina, echaza ukuncika okudingekayo. Kulesi sibonelo, izingxenye zihlukaniswa ngokunengqondo. Lena ikhithi encane yonjiniyela ongemuva.

Lapho sidala iphrojekthi entsha, sakha i-Dockerfile futhi sichaza i-ecosystem edingekayo (Python, Ruby, NodeJS). Ku-docker-compose, ichaza ukuncika okudingekayo - isizindalwazi. Sichaza ukuthi sidinga isizindalwazi senguqulo enjalo naleyo, ukuze sigcine idatha lapho nalapho.

Sisebenzisa isitsha sesithathu esihlukile esine-nginx ukuze sinikeze okuqukethwe okumile. Kungenzeka ukulayisha izithombe. I-backend iwabeka kuvolumu elungiselelwe ngaphambilini, ephinde ifakwe esitsheni esine-nginx, esihlinzeka ngedatha emile.

Ukugcina ukucushwa kwe-nginx ne-mysql, sengeze ifolda ye-Docker lapho sigcina khona ukulungiselelwa okudingekayo. Lapho umthuthukisi enza i-git clone yenqolobane emshinini wakhe, usevele enephrojekthi elungele ukuthuthukiswa kwendawo. Akukho mbuzo mayelana nokuthi iyiphi imbobo noma yiziphi izilungiselelo okufanele zisetshenziswe.

Inqubo yokuthuthukisa nokuhlola nge-Docker ne-Gitlab CI

Okulandelayo sinezingxenye ezimbalwa: admin, info-API, push notifications.

Ukuze sethule konke lokhu, sidale enye inqolobane ebizwa nge-dockerized-app. Okwamanje sisebenzisa amakhosombe amaningi engxenyeni ngayinye. Zihluke ngokunengqondo - ku-GitLab kubukeka njengefolda, kodwa emshinini wonjiniyela kubukeka njengefolda yephrojekthi ethile. Ileveli eyodwa ngezansi yizingxenye ezizohlanganiswa.

Inqubo yokuthuthukisa nokuhlola nge-Docker ne-Gitlab CI

Lesi isibonelo sokuqukethwe kwe-dockerized-app. Siphinde sibeke uhla lwemibhalo lwe-Docker lapha, lapho sigcwalisa khona ukulungiselelwa okudingekayo ekusebenzisaneni kwazo zonke izingxenye. Kukhona i-README.md echaza kafushane indlela yokuqalisa iphrojekthi.

Lapha sisebenzise amafayela amabili we-docker-compose. Lokhu kwenziwa ukuze ukwazi ukwethula ngezigaba. Lapho umthuthukisi esebenza ne-kernel, akadingi izaziso ze-Push, umane ethule ifayela le-docker-compose futhi, ngokufanele, izinsiza zigcinwa.

Uma kunesidingo sokuhlanganiswa nezaziso ze-Push, kuzobe sekwethulwa i-docker-compose.yaml kanye ne-docker-compose-push.yaml.

Njengoba i-docker-compose.yaml kanye ne-docker-compose-push.yaml zikufolda, inethiwekhi eyodwa ebonakalayo iyakhiwa ngokuzenzakalelayo.

Inqubo yokuthuthukisa nokuhlola nge-Docker ne-Gitlab CI

Incazelo yezingxenye. Leli ifayela elithuthuke kakhulu elinesibopho sokuqoqa izingxenye. Yini ephawulekayo lapha? Lapha sethula ingxenye ye-balancer.

Lesi yisithombe esenziwe ngomumo se-Docker esisebenzisa i-nginx kanye nohlelo lokusebenza olulalela isokhethi le-Docker. Inamandla, njengoba iziqukathi zivulwa futhi zivaliwe, ukulungiselelwa kwe-nginx kukhiqizwa kabusha. Sisabalalisa ukuphathwa kwezingxenye sisebenzisa amagama wesizinda sezinga lesithathu.

Ngendawo Yokuthuthukiswa sisebenzisa isizinda se-.dev - api.informer.dev. Izinhlelo zokusebenza ezinesizinda se-.dev ziyatholakala emshinini wendawo kanjiniyela.

Khona-ke izilungiselelo zidluliselwa kuphrojekthi ngayinye futhi wonke amaphrojekthi ethulwa ndawonye ngesikhathi esisodwa.

Inqubo yokuthuthukisa nokuhlola nge-Docker ne-Gitlab CI

Uma sikubonisa ngendlela ecacile, kuvela ukuthi iklayenti liyisiphequluli sethu noma uhlobo oluthile lwethuluzi esenza ngalo izicelo kusilinganisi.

I-balancer inquma ukuthi yisiphi isiqukathi esidinga ukufinyelelwa ngokusekelwe egameni lesizinda.

Lokhu kungaba nginx, ehlinzeka nge-JS kuphaneli yomqondisi. Lokhu kungenziwa nge-nginx, ehlinzeka nge-API, noma amafayela amile, ahlinzekwa yi-nginx ngendlela yokulayisha izithombe.

Umdwebo ubonisa ukuthi iziqukathi zixhunywe kunethiwekhi ebonakalayo futhi zifihlwe ngemuva kommeleli.

Emshinini wonjiniyela, ungafinyelela isitsha wazi i-IP, kodwa empeleni asikusebenzisi lokhu. Asikho isidingo sokuxhumana okuqondile.

Inqubo yokuthuthukisa nokuhlola nge-Docker ne-Gitlab CI

Isiphi isibonelo okufanele ngisibheke ukuze ngifake isicelo sami? Ngokubona kwami, isibonelo esihle isithombe se-docker esisemthethweni se-MySQL.

Kuyinkimbinkimbi impela. Kunezinguqulo eziningi. Kodwa ukusebenza kwayo kukuvumela ukuthi uhlanganise nezidingo eziningi ezingase zivele ngesikhathi sokuthuthukiswa okuqhubekayo. Uma uthatha isikhathi futhi uqonda ukuthi konke kusebenzisana kanjani, khona-ke ngicabanga ukuthi ngeke ube nezinkinga zokukusebenzisa ngokwakho.

I-Hub.docker.com ivamise ukuqukatha izixhumanisi eziya ku-github.com, lapho idatha eluhlaza inikezwa khona ngokuqondile ongakwazi ukwakha isithombe ngokwakho.

Ngaphezu kwalokho kule nqolobane kune-script docker-endpoint.sh, enesibopho sokuqalwa kokuqala kanye nokucutshungulwa okwengeziwe kokuqaliswa kwesicelo.

Futhi kulesi sibonelo kukhona ithuba lokucushwa kusetshenziswa okuguquguqukayo kwemvelo. Ngokuchaza okuguquguqukayo kwemvelo lapho usebenzisa isitsha esisodwa noma ngokusebenzisa i-docker-compose, singasho ukuthi sidinga ukusetha iphasiwedi engenalutho ye-docker yezimpande ku-MySQL noma noma yini esiyifunayo.

Kukhona inketho yokudala iphasiwedi engahleliwe. Sithi sidinga umsebenzisi, sidinga ukusetha iphasiwedi yomsebenzisi, futhi sidinga ukudala i-database.

Kumaphrojekthi ethu, sihlanganise kancane i-Dockerfile, enesibopho sokuqalisa. Lapho siyilungisele izidingo zethu ukuze sivele sandise amalungelo omsebenzisi asetshenziswa uhlelo lokusebenza. Lokhu kwenze kwaba nokwenzeka ukumane udale isizindalwazi kusuka kukhonsoli yohlelo lokusebenza esikhathini esizayo. Izinhlelo zokusebenza zeRuby zinemiyalo yokudala, ukulungisa, nokususa imininingwane egciniwe.

Inqubo yokuthuthukisa nokuhlola nge-Docker ne-Gitlab CI

Lesi isibonelo sokuthi inguqulo ethile ye-MySQL ibukeka kanjani ku-github.com. Ungavula i-Dockerfile futhi ubone ukuthi ukufakwa kwenzeka kanjani lapho.

docker-endpoint.sh iskripthi esibhekele indawo yokungena. Ngesikhathi sokuqalisa, ezinye izenzo zokulungiselela ziyadingeka futhi zonke lezi zenzo zifakiwe kuskripthi sokuqalisa.

Inqubo yokuthuthukisa nokuhlola nge-Docker ne-Gitlab CI

Asiqhubekele engxenyeni yesibili.

Sishintshele ku-gitlab ukuze sigcine amakhodi omthombo. Lolu uhlelo olunamandla olunokuxhumana okubonakalayo.

Enye yezingxenye ze-Gitlab yi-Gitlab CI. Ikuvumela ukuthi uchaze uchungechunge lwemiyalo ezosetshenziswa kamuva ukuhlela isistimu yokulethwa kwekhodi noma uqalise ukuhlola okuzenzakalelayo.

Bika nge-Gitlab CI 2 https://goo.gl/uohKjI - umbiko ovela kuklabhu yaseRuby Russia unemininingwane eminingi futhi ungase ube nentshisekelo kuwo.

Inqubo yokuthuthukisa nokuhlola nge-Docker ne-Gitlab CI

Manje sizobheka ukuthi yini edingekayo ukuze uvule i-Gitlab CI. Ukuze siqalise i-Gitlab CI, sidinga nje ukubeka ifayela elithi .gitlab-ci.yml kumsuka wephrojekthi.

Lapha sichaza ukuthi sifuna ukwenza ukulandelana kwezimo ezifana nokuhlola, ukuthunyelwa.

Senza imibhalo ebiza ngokuqondile i-docker-compose build yohlelo lwethu lokusebenza. Lesi isibonelo se-backend nje.

Okulandelayo sithi kuyadingeka ukuqhuba ukufuduka ukuze uguqule i-database bese uqhuba izivivinyo.

Uma izikripthi zenziwe ngendlela efanele futhi zingabuyisi ikhodi yephutha, uhlelo luqhubekela esigabeni sesibili sokuphakelwa.

Isigaba sokusatshalaliswa sisetshenziselwe ukuhlelwa. Asizange sihlele ukuqalisa kabusha okungekho isikhathi sokuphumula.

Sizicima ngenkani zonke iziqukathi, bese siphakamisa zonke iziqukathi futhi, eziqoqwe esigabeni sokuqala ngesikhathi sokuhlolwa.

Masiqalise ukufuduka kwesizindalwazi esibhalwe abathuthukisi bendawo eguquguqukayo yamanje.

Kukhona inothi ukuthi lokhu kufanele kusetshenziswe kuphela egatsheni eliyinhloko.

Ayisebenzi uma ishintsha amanye amagatsha.

Kungenzeka ukuhlela ukukhishwa eduze kwamagatsha.

Inqubo yokuthuthukisa nokuhlola nge-Docker ne-Gitlab CI

Ukuze uhlele lokhu ngokuqhubekayo, sidinga ukufaka i-Gitlab Runner.

Lolu hlelo lokusebenza lubhalwe ngesi-Golang. Kuyifayela elilodwa njengoba kuvamile emhlabeni we-Golang, elingadingi noma yikuphi ukuncika.

Ekuqaleni sibhalisa i-Gitlab Runner.

Sithola ukhiye kusixhumi esibonakalayo sewebhu se-Gitlab.

Bese sibiza umyalo wokuqalisa kulayini womyalo.

Ilungiselela i-Gitlab Runner kumodi yengxoxo (Shell, Docker, VirtualBox, SSH)

Ikhodi eku-Gitlab Runner izosebenzisa kukho konke ukuzibophezela kuye ngesilungiselelo se-.gitlab-ci.yml.

Inqubo yokuthuthukisa nokuhlola nge-Docker ne-Gitlab CI

Ibukeka kanjani ngokubukeka ku-Gitlab kusixhumi esibonakalayo sewebhu. Ngemva kokuxhuma i-GItlab CI, sinefulegi elibonisa ukuthi isakhiwo sikusiphi isimo okwamanje.

Siyabona ukuthi emizuzwini emi-4 edlule kwenziwa isibophezelo esiphumelele zonke izivivinyo futhi asibanga zinkinga.

Inqubo yokuthuthukisa nokuhlola nge-Docker ne-Gitlab CI

Singabheka izakhiwo ngokuningiliziwe. Lapha sibona ukuthi izifunda ezimbili sezidlulile. Isimo sokuhlola nesimo sokuphakelwa esigcawini.

Uma sichofoza esakhiweni esithile, kuzoba khona okukhiphayo kwekhonsoli yemiyalo eyethulwe kunqubo ngokuya nge-.gitlab-ci.yml.

Inqubo yokuthuthukisa nokuhlola nge-Docker ne-Gitlab CI

Lena yindlela ebukeka ngayo indaba yomkhiqizo wethu. Siyabona ukuthi kube nemizamo eyimpumelelo. Lapho izivivinyo zithunyelwa, azihambi esinyathelweni esilandelayo futhi nekhodi yesiteji ayibuyekezwa.

Inqubo yokuthuthukisa nokuhlola nge-Docker ne-Gitlab CI

Yiziphi izinkinga esizixazulule esiteji lapho sisebenzisa i-docker? Isistimu yethu iqukethe izingxenye futhi besidinga ukuqala kabusha ezinye zezingxenye ezabuyekezwa endaweni yokugcina, hhayi isistimu yonke.

Ukuze senze lokhu, kwakudingeka sihlukanise yonke into kumafolda ahlukene.

Ngemuva kokuthi senze lokhu, sibe nenkinga yokuthi i-Docker-compose idala indawo yayo yenethiwekhi kufolda ngayinye futhi ayiboni izingxenye zomakhelwane wayo.

Ukuzulazula, sidale inethiwekhi mathupha ku-Docker. Ku-Docker-compose kwakubhalwe ukuthi kufanele usebenzise inethiwekhi enjalo kule phrojekthi.

Ngakho-ke, ingxenye ngayinye eqala ngale mesh ibona izingxenye kwezinye izingxenye zesistimu.

Inkinga elandelayo ukuhlukanisa isiteji phakathi kwamaphrojekthi amaningana.

Njengoba konke lokhu kubukeka kukuhle futhi kuseduze ngangokunokwenzeka ekukhiqizeni, kuhle ukusebenzisa i-port 80 noma i-443, esetshenziswa yonke indawo ku-WEB.

Inqubo yokuthuthukisa nokuhlola nge-Docker ne-Gitlab CI

Sikuxazulule kanjani lokhu? Sabela i-Gitlab Runner eyodwa kuwo wonke amaphrojekthi amakhulu.

I-Gitlab ikuvumela ukuthi uqalise ama-Gitlab Runners amaningana asabalalisiwe, azovele athathe yonke imisebenzi ngamunye ngamunye ngokulandelana kwesiphithiphithi futhi ayisebenzise.

Ukuze sigweme izinkinga zendlu, silinganisele iqembu lamaphrojekthi ethu ku-Gitlab Runner eyodwa, ebhekana namavolumu ethu ngaphandle kwezinkinga.

Sihambise ummeleli we-nginx kusikripthi sokuqalisa esihlukile futhi sabhala amagridi awo wonke amaphrojekthi akuwo.

Iphrojekthi yethu inegridi eyodwa, futhi ibhalansi inamagridi amaningana asekelwe kumagama ephrojekthi. Kungaba ummeleli ngokuqhubekayo ngamagama wesizinda.

Izicelo zethu ziza ngesizinda esiku-port 80 futhi zixazululwa eqenjini leziqukathi ezisebenzela lesi sizinda.

Inqubo yokuthuthukisa nokuhlola nge-Docker ne-Gitlab CI

Yiziphi ezinye izinkinga ezazikhona? Yilokhu zonke iziqukathi ezisebenza njengempande ngokuzenzakalelayo. Lona umsingathi wempande ongalingani wesistimu.

Kodwa-ke, uma ufaka isiqukathi, kuzoba yimpande futhi ifayela esilidalayo kulesi sitsha lithola amalungelo ezimpande.

Uma umthuthukisi engena esitsheni futhi wenza imiyalo lapho ekhiqize amafayela, wabe eseshiya isitsha, khona-ke kunkomba yakhe yokusebenza unefayela angakwazi ukufinyelela kulo.

Lokhu kungaxazululwa kanjani? Ungangeza abasebenzisi abazoba kusitsha.

Yiziphi izinkinga ezivele ngesikhathi sengeza umsebenzisi?

Lapho udala umsebenzisi, i-ID yeqembu (UID) ne-ID yomsebenzisi (GID) ngokuvamile azifani.

Ukuxazulula le nkinga esitsheni sisebenzisa abasebenzisi abane-ID 1000.

Esimweni sethu, lokhu kuhambisane neqiniso lokuthi cishe bonke abathuthukisi basebenzisa Ubuntu OS. Futhi ku-Ubuntu OS umsebenzisi wokuqala une-ID 1000.

Inqubo yokuthuthukisa nokuhlola nge-Docker ne-Gitlab CI

Sinazo izinhlelo?

Phinda ufunde imibhalo ye-Docker. Iphrojekthi ithuthuka ngenkuthalo, imibhalo iyashintsha. Idatha etholwe ezinyangeni ezimbili noma ezintathu ezedlule isiphelelwa yisikhathi kancane.

Ezinye zezinkinga esizixazulule kungenzeka ukuthi sezixazululwe ngezindlela ezijwayelekile.

Ngifuna ngempela ukuqhubekela phambili futhi ngidlulele ngqo ku-orchestration.

Isibonelo esisodwa indlela eyakhelwe ngaphakathi ye-Docker ebizwa nge-Docker Swarm, ephuma ebhokisini. Ngingathanda ukwethula okuthile ekukhiqizeni okusekelwe kubuchwepheshe be-Docker Swarm.

Iziqukathi zokuzalela zenza ukusebenza ngezingodo kube nzima. Manje izingodo zihlukanisiwe. Ahlakazekile ezitsheni. Omunye wemisebenzi ukwenza ukufinyelela kalula kulogi ngokusebenzisa isixhumi esibonakalayo sewebhu.

Inqubo yokuthuthukisa nokuhlola nge-Docker ne-Gitlab CI

Source: www.habr.com

Engeza amazwana