Idagbasoke ati ilana idanwo pẹlu Docker ati Gitlab CI

Mo daba pe ki o ka iwe afọwọkọ ti ijabọ nipasẹ Alexander Sigachev lati Inventos “Ilọsiwaju ati ilana idanwo pẹlu Docker + Gitlab CI”

Awọn ti o bẹrẹ lati ṣe idagbasoke ati ilana idanwo ti o da lori Docker + Gitlab CI nigbagbogbo beere awọn ibeere ipilẹ. Nibo ni lati bẹrẹ? Bawo ni lati ṣeto? Bawo ni lati ṣe idanwo?

Ijabọ yii dara nitori pe o sọrọ ni ọna eto nipa idagbasoke ati ilana idanwo nipa lilo Docker ati Gitlab CI. Ijabọ funrararẹ wa lati ọdun 2017. Mo ro pe lati inu ijabọ yii o le ṣajọ awọn ipilẹ, ilana, imọran, ati iriri lilo.

Tani o bikita, jọwọ labẹ ologbo naa.

Orukọ mi ni Alexander Sigachev. Mo ṣiṣẹ fun Inventos. Emi yoo sọ fun ọ nipa iriri mi nipa lilo Docker ati bii a ṣe n ṣe imuse diẹdiẹ lori awọn iṣẹ akanṣe ni ile-iṣẹ naa.

Koko ti ijabọ naa: Ilana idagbasoke nipa lilo Docker ati Gitlab CI.

Idagbasoke ati ilana idanwo pẹlu Docker ati Gitlab CI

Eyi ni ọrọ keji mi nipa Docker. Ni akoko ijabọ akọkọ, a lo Docker nikan ni Idagbasoke lori awọn ẹrọ idagbasoke. Nọmba awọn oṣiṣẹ ti o lo Docker jẹ nipa awọn eniyan 2-3. Diẹdiẹ, iriri ti gba ati pe a gbe siwaju diẹ sii. Ọna asopọ si wa akọkọ iroyin.

Kini yoo wa ninu ijabọ yii? A yoo pin iriri wa nipa kini awọn rakes ti a gba, awọn iṣoro wo ni a yanju. Ko lẹwa nibi gbogbo, ṣugbọn o gba wa laaye lati tẹsiwaju.

Ilana wa: dockerize ohun gbogbo ti a gba ọwọ wa lori.

Idagbasoke ati ilana idanwo pẹlu Docker ati Gitlab CI

Awọn iṣoro wo ni a yanju?

Nigbati ile-iṣẹ kan ba ni awọn ẹgbẹ pupọ, olupilẹṣẹ jẹ orisun ti o pin. Awọn ipele wa nigbati a ba fa pirogirama kuro ninu iṣẹ akanṣe kan ti a si fi fun iṣẹ akanṣe miiran fun igba diẹ.

Ni ibere fun oluṣeto eto lati ni oye ni kiakia, o nilo lati ṣe igbasilẹ koodu orisun ti ise agbese na ki o ṣe ifilọlẹ agbegbe ni yarayara bi o ti ṣee, eyi ti yoo jẹ ki o ni ilọsiwaju siwaju sii ni idojukọ awọn iṣoro ti iṣẹ yii.

Nigbagbogbo, ti o ba bẹrẹ lati ibere, awọn iwe kekere wa ninu iṣẹ naa. Awọn ogbo akoko nikan ni alaye lori bi a ṣe le ṣeto rẹ. Awọn oṣiṣẹ ṣeto aaye iṣẹ wọn funrararẹ ni ọjọ kan tabi meji. Lati mu eyi yarayara, a lo Docker.

Idi ti o tẹle ni isọdọtun ti awọn eto ni Idagbasoke. Ninu iriri mi, awọn olupilẹṣẹ nigbagbogbo gba ipilẹṣẹ. Ni gbogbo ọran karun, agbegbe aṣa kan ti wa ni titẹ sii, fun apẹẹrẹ vasya.dev. N joko lẹgbẹẹ mi ni Petya aládùúgbò mi, ti agbegbe rẹ jẹ petya.dev. Wọn ṣe agbekalẹ oju opo wẹẹbu kan tabi diẹ ninu awọn paati eto nipa lilo orukọ ìkápá yii.

Nigbati eto ba dagba ati pe awọn orukọ ìkápá wọnyi bẹrẹ lati wa ninu iṣeto ni, rogbodiyan ni awọn agbegbe Idagbasoke dide ati pe ọna aaye naa ti tun kọ.

Ohun kanna n ṣẹlẹ pẹlu awọn eto data data. Diẹ ninu awọn eniyan ko ni wahala pẹlu aabo ati ṣiṣẹ pẹlu ọrọ igbaniwọle root ofo. Ni ipele fifi sori ẹrọ, MySQL beere ẹnikan fun ọrọ igbaniwọle kan ati ọrọ igbaniwọle tan-jade lati jẹ 123. Nigbagbogbo o ṣẹlẹ pe atunto data n yipada nigbagbogbo da lori ifaramọ olupilẹṣẹ. Ẹnikan ṣe atunṣe, ẹnikan ko ṣe atunṣe iṣeto naa. Nibẹ wà ẹtan nigba ti a ba fi diẹ ninu awọn igbeyewo konfigi sinu .gitignore ati kọọkan Olùgbéejáde ní lati fi sori ẹrọ ni database. Eyi jẹ ki ilana ibẹrẹ naa nira sii. Ninu awọn ohun miiran, o nilo lati ranti nipa ibi ipamọ data. Ibi ipamọ data gbọdọ wa ni ipilẹṣẹ, ọrọ igbaniwọle gbọdọ forukọsilẹ, olumulo gbọdọ forukọsilẹ, ami kan gbọdọ ṣẹda, ati bẹbẹ lọ.

Iṣoro miiran jẹ awọn ẹya oriṣiriṣi ti awọn ile-ikawe. Nigbagbogbo o ṣẹlẹ pe olupilẹṣẹ ṣiṣẹ lori awọn iṣẹ akanṣe oriṣiriṣi. Iṣẹ akanṣe Legacy wa, eyiti o bẹrẹ ni ọdun marun sẹhin (lati ọdun 2017 - akọsilẹ olootu). Ni ibẹrẹ a bẹrẹ pẹlu MySQL 5.5. Awọn iṣẹ akanṣe ode oni tun wa nibiti a ti n gbiyanju lati ṣe awọn ẹya igbalode diẹ sii ti MySQL, fun apẹẹrẹ 5.7 tabi agbalagba (ni ọdun 2017 - akọsilẹ olootu)

Ẹnikẹni ti o ba ṣiṣẹ pẹlu MySQL mọ pe awọn ile-ikawe wọnyi gbe awọn igbẹkẹle. O jẹ iṣoro pupọ lati ṣiṣe awọn apoti isura infomesonu 2 papọ. Ni o kere julọ, o jẹ iṣoro lati so awọn onibara atijọ pọ si aaye data tuntun. Eleyi ni Tan yoo fun jinde si orisirisi awọn isoro.

Iṣoro ti o tẹle ni nigbati olupilẹṣẹ ṣiṣẹ lori ẹrọ agbegbe, o nlo awọn orisun agbegbe, awọn faili agbegbe, Ramu agbegbe. Gbogbo ibaraenisepo ni akoko idagbasoke ojutu si awọn iṣoro ni a ṣe laarin ilana ti otitọ pe o ṣiṣẹ lori ẹrọ kan. Apeere kan yoo jẹ nigba ti a ba ni awọn olupin ẹhin ni Gbóògì 3, ati pe Olùgbéejáde fi awọn faili pamọ si itọsọna gbongbo ati lati ibẹ nginx gba awọn faili lati dahun si ibeere naa. Nigbati iru koodu ba wọle si iṣelọpọ, o han pe faili naa wa lori ọkan ninu awọn olupin 3.

Itọsọna ti awọn iṣẹ microservice n dagbasoke lọwọlọwọ. Nigba ti a ba pin awọn ohun elo nla wa si diẹ ninu awọn paati kekere ti o nlo pẹlu ara wọn. Eyi n gba ọ laaye lati yan awọn imọ-ẹrọ fun akopọ iṣẹ-ṣiṣe kan pato. Eyi tun gba ọ laaye lati pin iṣẹ ati agbegbe ti ojuse laarin awọn olupilẹṣẹ.

Olùgbéejáde iwaju, ti ndagba ni JS, ko ni ipa kankan lori ẹhin. Olùgbéejáde afẹhinti, lapapọ, ndagba, ninu ọran wa, Ruby lori Rails ati pe ko dabaru pẹlu Frondend. Ibaraṣepọ jẹ ṣiṣe ni lilo API.

Gẹgẹbi ajeseku, lilo Docker a ni anfani lati tunlo awọn orisun lori Ipele. Ise agbese kọọkan, nitori awọn pato rẹ, nilo awọn eto kan. Ni ti ara, o jẹ dandan lati pin boya olupin foju kan ki o tunto wọn lọtọ, tabi pin iru agbegbe oniyipada ati awọn iṣẹ akanṣe le ni ipa lori ara wọn, da lori ẹya ti awọn ile-ikawe naa.

Idagbasoke ati ilana idanwo pẹlu Docker ati Gitlab CI

Awọn irinṣẹ. Kini a lo?

  • Docker funrararẹ. Dockerfile ṣe apejuwe awọn igbẹkẹle ti ohun elo ẹyọkan.
  • Docker-compose jẹ akopọ kan ti o mu ọpọlọpọ awọn ohun elo Docker wa papọ.
  • A lo GitLab lati tọju koodu orisun.
  • A lo GitLab-CI fun isọpọ eto.

Idagbasoke ati ilana idanwo pẹlu Docker ati Gitlab CI

Iroyin naa ni awọn ẹya meji.

Apa akọkọ yoo sọ fun ọ bi o ṣe le ṣiṣẹ Docker lori awọn ẹrọ ti awọn olupilẹṣẹ.

Apa keji yoo sọrọ nipa bii o ṣe le ṣe ajọṣepọ pẹlu GitLab, bawo ni a ṣe n ṣe awọn idanwo ati bii a ṣe yipo si Iṣeto.

Idagbasoke ati ilana idanwo pẹlu Docker ati Gitlab CI

Docker jẹ imọ-ẹrọ ti o fun laaye (lilo ọna asọye) lati ṣapejuwe awọn paati pataki. Eyi jẹ apẹẹrẹ Dockerfile. Nibi a kede pe a n jogun lati aworan Docker osise ti Ruby: 2.3.0. O ni ẹya Ruby 2.3 ti fi sori ẹrọ. A fi sori ẹrọ awọn ile-ikawe apejọ pataki ati NodeJS. A ṣe apejuwe pe a n ṣẹda itọsọna kan /app. A yan iwe ilana app bi itọsọna iṣẹ. Ninu itọsọna yii a gbe Gemfile ti o kere julọ ti a beere ati Gemfile.lock. Lẹhinna a kọ awọn iṣẹ akanṣe ti o fi aworan igbẹkẹle yii sori ẹrọ. A fihan pe apoti naa yoo ṣetan lati gbọ lori ibudo ita 3000. Aṣẹ ikẹhin ni aṣẹ ti o ṣe ifilọlẹ ohun elo wa taara. Ti a ba ṣiṣẹ pipaṣẹ ṣiṣe iṣẹ akanṣe, ohun elo naa yoo gbiyanju lati ṣiṣẹ ati ṣiṣe aṣẹ ti a sọ.

Idagbasoke ati ilana idanwo pẹlu Docker ati Gitlab CI

Eyi jẹ apẹẹrẹ ti o kere ju ti faili kikọ docker. Ni idi eyi, a fihan pe asopọ kan wa laarin awọn apoti meji. Eyi wa taara sinu iṣẹ data data ati iṣẹ wẹẹbu. Awọn ohun elo wẹẹbu wa ni ọpọlọpọ awọn ọran nilo iru data data kan bi ẹhin fun titoju data pamọ. Niwọn igba ti a ti lo MySQL, apẹẹrẹ wa pẹlu MySQL - ṣugbọn ko si ohun ti o ṣe idiwọ fun wa lati lo data data miiran (PostgreSQL, Redis).

A ya aworan MySQL 5.7.14 laisi awọn ayipada lati orisun osise lati ibudo Docker. A gba aworan ti o jẹ iduro fun ohun elo wẹẹbu wa lati inu itọsọna lọwọlọwọ. Lakoko ifilọlẹ akọkọ, o gba aworan kan fun wa. Lẹhinna o nṣiṣẹ aṣẹ ti a n ṣiṣẹ nibi. Ti a ba pada, a yoo rii pe aṣẹ ifilọlẹ jẹ asọye nipasẹ Puma. Puma jẹ iṣẹ ti a kọ ni Ruby. Ni awọn keji nla ti a idojuk. Aṣẹ yii le jẹ lainidii da lori awọn iwulo tabi awọn iṣẹ ṣiṣe wa.

A tun ṣapejuwe pe a nilo lati dari ibudo naa lori ẹrọ agbalejo idagbasoke wa lati 3000 si 3000 ibudo eiyan. Eyi ni a ṣe laifọwọyi ni lilo awọn iptables ati ẹrọ tirẹ, eyiti o fi sii taara ni Docker.

Olùgbéejáde le, bii ti iṣaaju, wọle si eyikeyi adiresi IP ti o wa, fun apẹẹrẹ, 127.0.0.1 adiresi IP agbegbe tabi ita ti ẹrọ naa.

Laini ikẹhin sọ pe eiyan wẹẹbu da lori eiyan db. Nigba ti a ba pe eiyan wẹẹbu lati ṣe ifilọlẹ, docker-compose yoo kọkọ ṣe ifilọlẹ data data fun wa. Tẹlẹ lori ibẹrẹ data (ni otitọ, lẹhin ifilọlẹ ti eiyan naa! Eyi ko ṣe iṣeduro imurasilẹ ti data) yoo ṣe ifilọlẹ ohun elo wa, ẹhin wa.

Eyi n gba wa laaye lati yago fun awọn aṣiṣe nigbati data data ko ba wa ni oke ati gba wa laaye lati ṣafipamọ awọn orisun nigba ti a ba da eiyan data duro, nitorinaa awọn orisun laaye fun awọn iṣẹ akanṣe miiran.

Idagbasoke ati ilana idanwo pẹlu Docker ati Gitlab CI

Kini lilo dockerization database lori iṣẹ akanṣe fun wa? A ṣe igbasilẹ ẹya MySQL fun gbogbo awọn olupilẹṣẹ. Eyi n gba ọ laaye lati yago fun awọn aṣiṣe diẹ ti o le waye nigbati awọn ẹya ba yapa, nigbati sintasi, iṣeto ni, ati awọn eto aiyipada yipada. Eyi n gba ọ laaye lati pato orukọ olupin ti o wọpọ fun ibi ipamọ data, wiwọle, ọrọ igbaniwọle. A n lọ kuro ni zoo ti awọn orukọ ati awọn ija ni awọn faili atunto ti o wa tẹlẹ.

A ni aye lati lo atunto to dara julọ fun agbegbe Idagbasoke, eyiti yoo yato si ọkan aiyipada. MySQL ti tunto nipasẹ aiyipada fun awọn ẹrọ alailagbara ati iṣẹ rẹ lati inu apoti jẹ kekere pupọ.

Idagbasoke ati ilana idanwo pẹlu Docker ati Gitlab CI

Docker gba ọ laaye lati lo Python, Ruby, NodeJS, onitumọ PHP ti ẹya ti o fẹ. A yọkuro iwulo lati lo diẹ ninu iru oluṣakoso ẹya. Ni iṣaaju, a lo package rpm fun Ruby, eyiti o fun ọ laaye lati yi ẹya pada da lori iṣẹ akanṣe naa. Ṣeun si apo eiyan Docker, eyi tun gba ọ laaye lati ṣiṣi koodu laisiyonu ati ṣe ikede rẹ pẹlu awọn igbẹkẹle. A ko ni iṣoro lati ni oye ẹya mejeeji ti onitumọ ati koodu naa. Lati ṣe imudojuiwọn ẹya naa, o nilo lati sọ eiyan atijọ silẹ ki o gbe eiyan tuntun soke. Ti nkan kan ba jẹ aṣiṣe, a le sọ eiyan tuntun silẹ, gbe eiyan atijọ soke.

Lẹhin kikọ aworan naa, awọn apoti ni Idagbasoke mejeeji ati iṣelọpọ yoo jẹ kanna. Eyi jẹ otitọ paapaa fun awọn fifi sori ẹrọ nla.

Idagbasoke ati ilana idanwo pẹlu Docker ati Gitlab CI Lori Frontend a lo JavaScipt ati NodeJS.

Bayi a ni ise agbese wa kẹhin lori ReacJS. Olùgbéejáde ṣe ifilọlẹ ohun gbogbo ninu apo eiyan ati idagbasoke nipa lilo atungbejade gbona.

Nigbamii ti, iṣẹ-ṣiṣe ti apejọ JavaScipt ti ṣe ifilọlẹ ati pe koodu ti a kojọpọ ni a firanṣẹ nipasẹ nginx, fifipamọ awọn orisun.

Idagbasoke ati ilana idanwo pẹlu Docker ati Gitlab CI

Nibi ti mo ti pese a aworan atọka ti wa titun ise agbese.

Awọn iṣoro wo ni o yanju? A ni iwulo lati kọ eto kan pẹlu eyiti awọn ẹrọ alagbeka ṣe ajọṣepọ. Wọn gba data. Ọkan ninu awọn iṣeeṣe ni lati fi awọn iwifunni titari ranṣẹ si ẹrọ yii.

Kini a ṣe fun eyi?

A pin ohun elo naa si awọn paati wọnyi: apakan abojuto ni JS, ẹhin ẹhin ti o ṣiṣẹ nipasẹ wiwo REST labẹ Ruby on Rails. Backend nlo pẹlu database. Abajade ti o ti ipilẹṣẹ ni a fun ni alabara. Igbimọ abojuto ṣe ajọṣepọ pẹlu ẹhin ati ibi ipamọ data nipasẹ wiwo REST kan.

A tun ni iwulo lati firanṣẹ awọn iwifunni Titari. Ṣaaju eyi, a ni iṣẹ akanṣe ninu eyiti o ti ṣe imuse ẹrọ kan ti o ni iduro fun jiṣẹ awọn iwifunni si awọn iru ẹrọ alagbeka.

A ti ṣe agbekalẹ ero atẹle yii: oniṣẹ lati ẹrọ aṣawakiri naa ṣe ajọṣepọ pẹlu nronu abojuto, nronu abojuto ṣe ajọṣepọ pẹlu ẹhin, iṣẹ-ṣiṣe ni lati firanṣẹ awọn iwifunni Titari.

Awọn iwifunni titari ṣe ajọṣepọ pẹlu paati miiran ti a ṣe imuse ni NodeJS.

Awọn ila ti wa ni itumọ ati awọn iwifunni ti wa ni fifiranṣẹ gẹgẹbi ẹrọ tiwọn.

Meji infomesonu ti wa ni kale nibi. Lọwọlọwọ, ni lilo Docker, a lo awọn infomesonu ominira 2 ti ko ni asopọ si ara wa. Ni afikun si otitọ pe wọn ni nẹtiwọọki foju ti o wọpọ, ati data ti ara ti wa ni ipamọ ni awọn ilana oriṣiriṣi lori ẹrọ olupilẹṣẹ.

Idagbasoke ati ilana idanwo pẹlu Docker ati Gitlab CI

Ohun kanna sugbon ni awọn nọmba. Atunlo koodu jẹ pataki nibi.

Ti a ba sọrọ tẹlẹ nipa lilo koodu ni irisi awọn ile-ikawe, lẹhinna ninu apẹẹrẹ yii iṣẹ wa, eyiti o dahun si awọn iwifunni Titari, ti tun lo bi olupin pipe. O pese API kan. Ati idagbasoke tuntun wa ṣe ajọṣepọ pẹlu rẹ.

Ni akoko yẹn a nlo ẹya 4 ti NodeJS. Bayi (ni 2017 - akọsilẹ olootu) ninu awọn idagbasoke tuntun wa a lo ẹya 7 ti NodeJS. Ko si iṣoro ninu awọn paati tuntun lati kan awọn ẹya tuntun ti awọn ile-ikawe.

Ti o ba jẹ dandan, o le ṣe atunṣe ati gbe ẹya NodeJS soke ti iṣẹ iwifunni Titari.

Ati pe ti a ba le ṣetọju ibamu API, lẹhinna o yoo ṣee ṣe lati paarọ rẹ pẹlu awọn iṣẹ akanṣe miiran ti a lo tẹlẹ.

Idagbasoke ati ilana idanwo pẹlu Docker ati Gitlab CI

Kini o nilo lati ṣafikun Docker? A ṣafikun Dockerfile kan si ibi ipamọ wa, eyiti o ṣapejuwe awọn igbẹkẹle pataki. Ni yi apẹẹrẹ, awọn irinše ti wa ni pin logically. Eyi ni ohun elo ti o kere julọ fun olupilẹṣẹ ẹhin.

Nigbati o ba ṣẹda iṣẹ akanṣe tuntun, a ṣẹda Dockerfile ati ṣe apejuwe ilolupo ilolupo ti o fẹ (Python, Ruby, NodeJS). Ni docker-compose, o ṣe apejuwe igbẹkẹle pataki - data data. A ṣe apejuwe pe a nilo aaye data ti iru ati iru ẹya, lati tọju data nibẹ ati nibẹ.

A lo eiyan kẹta lọtọ pẹlu nginx lati sin akoonu aimi. O ti wa ni ṣee ṣe lati po si awọn aworan. Ẹhin ẹhin fi wọn sinu iwọn didun ti a ti pese tẹlẹ, eyiti o tun gbe sinu apoti kan pẹlu nginx, eyiti o pese data aimi.

Lati tọju nginx ati iṣeto mysql, a ṣafikun folda Docker kan ninu eyiti a tọju awọn atunto pataki. Nigbati olupilẹṣẹ kan ṣe git clone ti ibi ipamọ kan lori ẹrọ rẹ, o ti ni iṣẹ akanṣe kan ti o ti ṣetan fun idagbasoke agbegbe. Ko si ibeere nipa iru ibudo tabi eto wo lati lo.

Idagbasoke ati ilana idanwo pẹlu Docker ati Gitlab CI

Nigbamii ti a ni awọn paati pupọ: abojuto, info-API, awọn iwifunni titari.

Lati le ṣe ifilọlẹ gbogbo eyi, a ṣẹda ibi ipamọ miiran ti a pe ni dockerized-app. Lọwọlọwọ a lo awọn ibi ipamọ pupọ fun paati kọọkan. Wọn yatọ ni ọgbọn ti o rọrun - ni GitLab o dabi folda kan, ṣugbọn lori ẹrọ olupilẹṣẹ o dabi folda kan fun iṣẹ akanṣe kan. Ipele kan ni isalẹ ni awọn paati ti yoo ni idapo.

Idagbasoke ati ilana idanwo pẹlu Docker ati Gitlab CI

Eyi jẹ apẹẹrẹ ti awọn akoonu ti dockerized-app. A tun gbe itọsọna Docker kan nibi, ninu eyiti a kun ni awọn atunto ti o nilo fun awọn ibaraenisepo ti gbogbo awọn paati. README.md wa ti o ṣe apejuwe ni ṣoki bi o ṣe le ṣe ifilọlẹ iṣẹ naa.

Nibi a ti lo awọn faili akopọ-docker meji. Eyi ni a ṣe lati le ṣe ifilọlẹ ni awọn ipele. Nigbati olupilẹṣẹ ba n ṣiṣẹ pẹlu ekuro, ko nilo awọn iwifunni Titari, o kan ṣe ifilọlẹ faili docker-compose ati, ni ibamu, awọn orisun ti wa ni fipamọ.

Ti iwulo ba wa fun isọpọ pẹlu awọn iwifunni Titari, lẹhinna docker-compose.yaml ati docker-compose-push.yaml ti ṣe ifilọlẹ.

Niwọn igba ti docker-compose.yaml ati docker-compose-push.yaml wa ninu folda, nẹtiwọki foju kan ni a ṣẹda laifọwọyi.

Idagbasoke ati ilana idanwo pẹlu Docker ati Gitlab CI

Apejuwe ti irinše. Eyi jẹ faili ilọsiwaju diẹ sii ti o ni iduro fun gbigba awọn paati. Kini o lapẹẹrẹ nibi? Nibi a ṣe afihan paati iwọntunwọnsi.

Eyi jẹ aworan Docker ti o ti ṣetan ti o nṣiṣẹ nginx ati ohun elo kan ti o tẹtisi iho Docker. Yiyi, bi awọn apoti ti wa ni titan ati pipa, atunto nginx jẹ atunbi. A kaakiri awọn mimu ti irinše lilo kẹta-ipele-ašẹ awọn orukọ.

Fun ayika Idagbasoke a lo .dev domain - api.informer.dev. Awọn ohun elo pẹlu aaye .dev kan wa lori ẹrọ agbegbe ti olugbejade.

Lẹhinna a gbe awọn atunto si iṣẹ akanṣe kọọkan ati gbogbo awọn iṣẹ akanṣe ni a ṣe ifilọlẹ papọ ni akoko kanna.

Idagbasoke ati ilana idanwo pẹlu Docker ati Gitlab CI

Ti a ba ṣe afihan ni ayaworan, o han pe alabara jẹ aṣawakiri wa tabi iru irinṣẹ kan pẹlu eyiti a ṣe awọn ibeere si iwọntunwọnsi.

Oniwontunwonsi pinnu iru eiyan ti o nilo lati wọle si da lori orukọ ìkápá naa.

Eyi le jẹ nginx, eyiti o pese JS si igbimọ abojuto. Eyi le ṣee ṣe nipasẹ nginx, eyiti o pese API, tabi awọn faili aimi, eyiti a pese nipasẹ nginx ni irisi awọn aworan ikojọpọ.

Awọn aworan atọka fihan wipe awọn apoti ti wa ni ti sopọ si a foju nẹtiwọki ati ki o farapamọ sile kan aṣoju.

Lori ẹrọ olupilẹṣẹ, o le wọle si eiyan ti o mọ IP, ṣugbọn ni ipilẹ a ko lo eyi. Oba ko si iwulo fun olubasọrọ taara.

Idagbasoke ati ilana idanwo pẹlu Docker ati Gitlab CI

Apeere wo ni MO yẹ ki n wo lati dockerize ohun elo mi? Ni ero mi, apẹẹrẹ to dara ni aworan docker osise fun MySQL.

O jẹ idiju pupọ. Ọpọlọpọ awọn ẹya wa. Ṣugbọn awọn oniwe-iṣẹ faye gba o lati bo ọpọlọpọ awọn aini ti o le dide ninu awọn ilana ti siwaju idagbasoke. Ti o ba gba akoko ati loye bi gbogbo rẹ ṣe n ṣepọ, lẹhinna Mo ro pe iwọ kii yoo ni awọn iṣoro eyikeyi ti imuse rẹ funrararẹ.

Hub.docker.com nigbagbogbo ni awọn ọna asopọ si github.com, nibiti o ti pese data aise taara lati eyiti o le kọ aworan funrararẹ.

Siwaju sii ninu ibi ipamọ yii iwe afọwọkọ kan wa docker-endpoint.sh, eyiti o jẹ iduro fun ibẹrẹ ibẹrẹ ati sisẹ siwaju sii ti ifilọlẹ ohun elo.

Paapaa ninu apẹẹrẹ yii o ṣeeṣe ti iṣeto ni lilo awọn oniyipada ayika. Nipa asọye iyipada ayika nigbati o nṣiṣẹ eiyan kan tabi nipasẹ docker-compose, a le sọ pe a nilo lati ṣeto ọrọ igbaniwọle ṣofo fun docker fun root lori MySQL tabi ohunkohun ti a fẹ.

Aṣayan wa lati ṣẹda ọrọ igbaniwọle laileto. A sọ pe a nilo olumulo kan, a nilo lati ṣeto ọrọ igbaniwọle kan fun olumulo, ati pe a nilo lati ṣẹda data data kan.

Ninu awọn iṣẹ akanṣe wa, a ti ṣọkan Dockerfile diẹ, eyiti o jẹ iduro fun ipilẹṣẹ. Nibẹ ni a ṣatunṣe rẹ si awọn iwulo wa lati faagun awọn ẹtọ olumulo ti ohun elo naa nlo. Eyi jẹ ki o ṣee ṣe lati ṣẹda data nirọrun lati console ohun elo ni ọjọ iwaju. Awọn ohun elo Ruby ni awọn aṣẹ fun ṣiṣẹda, iyipada, ati piparẹ awọn data data.

Idagbasoke ati ilana idanwo pẹlu Docker ati Gitlab CI

Eyi jẹ apẹẹrẹ ti kini ẹya pato ti MySQL dabi lori github.com. O le ṣii Dockerfile ki o wo bi fifi sori ẹrọ ṣe waye nibẹ.

docker-endpoint.sh akosile lodidi fun awọn titẹsi ojuami. Lakoko ibẹrẹ ibẹrẹ, diẹ ninu awọn iṣe igbaradi nilo ati gbogbo awọn iṣe wọnyi wa ninu iwe afọwọkọ ibẹrẹ.

Idagbasoke ati ilana idanwo pẹlu Docker ati Gitlab CI

Jẹ ki a lọ si apakan keji.

A yipada si gitlab lati tọju awọn koodu orisun. Eleyi jẹ kan iṣẹtọ lagbara eto ti o ni wiwo ni wiwo.

Ọkan ninu awọn paati Gitlab jẹ Gitlab CI. O gba ọ laaye lati ṣapejuwe lẹsẹsẹ awọn aṣẹ ti yoo lo nigbamii lati ṣeto eto ifijiṣẹ koodu tabi ṣiṣe idanwo adaṣe.

Iroyin lori Gitlab CI 2 https://goo.gl/uohKjI - Ijabọ lati ẹgbẹ Ruby Russia jẹ alaye pupọ ati pe o le jẹ anfani si ọ.

Idagbasoke ati ilana idanwo pẹlu Docker ati Gitlab CI

Bayi a yoo wo ohun ti o nilo lati mu Gitlab CI ṣiṣẹ. Lati le ṣe ifilọlẹ Gitlab CI, a kan nilo lati fi faili .gitlab-ci.yml sinu gbongbo iṣẹ akanṣe naa.

Nibi a ṣe apejuwe pe a fẹ lati ṣe ọkọọkan ti awọn ipinlẹ bii idanwo, imuṣiṣẹ.

A ṣe awọn iwe afọwọkọ ti o pe taara docker-compose ti ohun elo wa. Eleyi jẹ ẹya apẹẹrẹ ti o kan backend.

Nigbamii ti a sọ pe o jẹ dandan lati ṣiṣe awọn iṣipopada lati yi data data pada ati ṣiṣe awọn idanwo.

Ti awọn iwe afọwọkọ ba ṣiṣẹ ni deede ati pe ko da koodu aṣiṣe pada, lẹhinna eto naa tẹsiwaju si ipele keji ti imuṣiṣẹ.

Ipele imuṣiṣẹ ti wa ni imuse lọwọlọwọ fun iṣeto. A ko ṣeto a ko si-downtime tun bẹrẹ.

A fi agbara mu gbogbo awọn apoti, ati lẹhinna a gbe gbogbo awọn apoti lẹẹkansi, ti a gba ni ipele akọkọ lakoko idanwo.

Jẹ ki a ṣiṣẹ awọn iṣilọ data data ti a kọ nipasẹ awọn olupilẹṣẹ fun agbegbe oniyipada lọwọlọwọ.

Akọsilẹ wa pe eyi yẹ ki o lo si ẹka titunto si.

Ko ṣiṣẹ nigbati o yipada awọn ẹka miiran.

O ṣee ṣe lati ṣeto awọn iyipo pẹlu awọn ẹka.

Idagbasoke ati ilana idanwo pẹlu Docker ati Gitlab CI

Lati ṣeto eyi siwaju, a nilo lati fi Gitlab Runner sori ẹrọ.

Yi IwUlO ti kọ ni Golang. O jẹ faili kan gẹgẹbi o wọpọ ni agbaye Golang, eyiti ko nilo eyikeyi awọn igbẹkẹle.

Ni ibẹrẹ a forukọsilẹ Gitlab Runner.

A gba bọtini ni wiwo oju opo wẹẹbu Gitlab.

Lẹhinna a pe aṣẹ ipilẹṣẹ lori laini aṣẹ.

Ṣiṣeto Gitlab Runner ni ipo ajọṣọ (Shell, Docker, VirtualBox, SSH)

Awọn koodu lori Gitlab Runner yoo ṣiṣẹ lori gbogbo ṣiṣe da lori eto .gitlab-ci.yml.

Idagbasoke ati ilana idanwo pẹlu Docker ati Gitlab CI

Bii o ṣe n wo oju ni Gitlab ni wiwo wẹẹbu. Lẹhin ti o so GITlab CI pọ, a ni asia kan ti o fihan kini ipo ti ikole wa ni akoko yii.

A rii pe awọn iṣẹju 4 sẹyin ti ṣe adehun kan ti o kọja gbogbo awọn idanwo ati pe ko fa awọn iṣoro eyikeyi.

Idagbasoke ati ilana idanwo pẹlu Docker ati Gitlab CI

A le wo awọn ikole ni awọn alaye diẹ sii. Nibi a rii pe awọn ipinlẹ meji ti kọja tẹlẹ. Ipo idanwo ati ipo imuṣiṣẹ ni iṣeto.

Ti a ba tẹ lori kikọ kan pato, iṣelọpọ console yoo wa ti awọn aṣẹ ti a ṣe ifilọlẹ ninu ilana ni ibamu si .gitlab-ci.yml.

Idagbasoke ati ilana idanwo pẹlu Docker ati Gitlab CI

Eyi ni itan ti ọja wa dabi. A rii pe awọn igbiyanju aṣeyọri ti wa. Nigbati awọn idanwo naa ba ti fi silẹ, wọn ko gbe si igbesẹ ti n tẹle ati pe koodu idasile ko ni imudojuiwọn.

Idagbasoke ati ilana idanwo pẹlu Docker ati Gitlab CI

Awọn iṣoro wo ni a yanju ni iṣeto nigba ti a ṣe imuse docker? Eto wa ni awọn paati ati pe a nilo lati tun bẹrẹ diẹ ninu awọn paati ti a ṣe imudojuiwọn ni ibi ipamọ, kii ṣe gbogbo eto naa.

Lati ṣe eyi, a ni lati ya ohun gbogbo sinu awọn folda ọtọtọ.

Lẹhin ti a ṣe eyi, a ni iṣoro pẹlu otitọ pe Docker-compose ṣẹda aaye nẹtiwọọki tirẹ fun folda kọọkan ati pe ko rii awọn paati ti aladugbo rẹ.

Lati wa ni ayika, a ṣẹda nẹtiwọọki pẹlu ọwọ ni Docker. Ni Docker-compose o ti kọ pe o yẹ ki o lo iru nẹtiwọọki kan fun iṣẹ akanṣe yii.

Nitorinaa, paati kọọkan ti o bẹrẹ pẹlu apapo yii rii awọn paati ni awọn ẹya miiran ti eto naa.

Iṣoro ti o tẹle ni pinpin iṣeto laarin awọn iṣẹ akanṣe pupọ.

Niwọn igba ti gbogbo eyi lati rii lẹwa ati bi o ti ṣee ṣe si iṣelọpọ, o dara lati lo ibudo 80 tabi 443, eyiti o lo nibi gbogbo ni WEB.

Idagbasoke ati ilana idanwo pẹlu Docker ati Gitlab CI

Bawo ni a ṣe yanju eyi? A yan Gitlab Runner kan si gbogbo awọn iṣẹ akanṣe nla.

Gitlab ngbanilaaye lati ṣe ifilọlẹ ọpọlọpọ awọn asare Gitlab pinpin, eyiti yoo mu gbogbo awọn iṣẹ ṣiṣe ni ẹyọkan ni aṣẹ rudurudu ati ṣiṣe wọn.

Lati yago fun awọn iṣoro ile, a fi opin si ẹgbẹ ti awọn iṣẹ akanṣe si Gitlab Runner kan, eyiti o koju awọn iwọn wa laisi awọn iṣoro.

A gbe nginx-proxy sinu iwe afọwọkọ ifilọlẹ lọtọ ati kọ awọn akoj ti gbogbo awọn iṣẹ akanṣe ninu rẹ.

Ise agbese wa ni akoj kan, ati iwọntunwọnsi ni ọpọlọpọ awọn grids ti o da lori awọn orukọ iṣẹ akanṣe. O le jẹ aṣoju siwaju nipasẹ awọn orukọ-ašẹ.

Awọn ibeere wa wa nipasẹ aaye lori ibudo 80 ati pe a pinnu si ẹgbẹ kan ti awọn apoti ti o nṣe iranṣẹ agbegbe yii.

Idagbasoke ati ilana idanwo pẹlu Docker ati Gitlab CI

Awọn iṣoro miiran wo ni o wa nibẹ? Eyi ni ohun ti gbogbo awọn apoti ṣiṣẹ bi gbongbo nipasẹ aiyipada. Eyi ni ogun gbongbo aidogba ti eto naa.

Sibẹsibẹ, ti o ba tẹ apoti naa, yoo jẹ gbongbo ati faili ti a ṣẹda ninu apo eiyan yii gba awọn ẹtọ gbongbo.

Ti olupilẹṣẹ ba wọ inu apoti ti o ṣe diẹ ninu awọn aṣẹ nibẹ ti o ṣe awọn faili, lẹhinna fi eiyan naa silẹ, lẹhinna ninu itọsọna iṣẹ rẹ o ni faili ti ko ni iwọle si.

Báwo la ṣe lè yanjú èyí? O le ṣafikun awọn olumulo ti yoo wa ninu apo eiyan naa.

Awọn iṣoro wo ni o dide nigba ti a ṣafikun olumulo naa?

Nigbati o ba ṣẹda olumulo kan, ID ẹgbẹ (UID) ati ID olumulo (GID) nigbagbogbo ko baramu.

Lati yanju iṣoro yii ninu apo eiyan a lo awọn olumulo pẹlu ID 1000.

Ninu ọran wa, eyi ṣe deede pẹlu otitọ pe o fẹrẹ jẹ gbogbo awọn olupilẹṣẹ lo Ubuntu OS. Ati ni Ubuntu OS olumulo akọkọ ni ID 1000.

Idagbasoke ati ilana idanwo pẹlu Docker ati Gitlab CI

Ṣe a ni awọn eto?

Tun-ka iwe Docker naa. Ise agbese na ni idagbasoke ni itara, iwe ti n yipada. Data ti o gba ni oṣu meji tabi mẹta sẹhin ti n di ti igba atijọ laiyara.

Diẹ ninu awọn iṣoro ti a yanju le daradara ti tẹlẹ ti yanju nipasẹ awọn ọna boṣewa.

Mo fẹ gaan lati tẹsiwaju ati gbe taara si orchestration.

Apeere kan jẹ ẹrọ ti a ṣe sinu Docker ti a pe ni Docker Swarm, eyiti o jade kuro ninu apoti. Emi yoo fẹ lati ṣe ifilọlẹ ohunkan ni iṣelọpọ ti o da lori imọ-ẹrọ Docker Swarm.

Awọn apoti Spawning jẹ ki ṣiṣẹ pẹlu awọn akọọlẹ ko ni irọrun. Bayi awọn akọọlẹ ti ya sọtọ. Wọn ti tuka ni awọn apoti. Ọkan ninu awọn iṣẹ-ṣiṣe ni lati ṣe iraye si irọrun si awọn akọọlẹ nipasẹ wiwo wẹẹbu kan.

Idagbasoke ati ilana idanwo pẹlu Docker ati Gitlab CI

orisun: www.habr.com

Fi ọrọìwòye kun