Pwosesis devlopman ak tès ak Docker ak Gitlab CI

Mwen pwopoze li transkripsyon rapò Alexander Sigachev ki soti nan Inventos "Devlopman ak pwosesis tès ak Docker + Gitlab CI"

Moun ki fèk kòmanse aplike pwosesis devlopman ak tès ki baze sou Docker + Gitlab CI souvan poze kesyon debaz yo. Ki kote yo kòmanse? Ki jan yo òganize? Ki jan yo teste?

Rapò sa a bon paske li pale nan yon fason estriktire sou pwosesis devlopman ak tès lè l sèvi avèk Docker ak Gitlab CI. Rapò a li menm se soti nan 2017. Mwen panse ke nan rapò sa a ou ka aprann de baz yo, metodoloji, lide, eksperyans nan itilizasyon.

Ki moun ki pran swen, tanpri anba chat la.

Non mwen se Alexander Sigachev. Mwen travay pou Inventos. Mwen pral di w sou eksperyans mwen nan sèvi ak Docker ak kijan nou piti piti aplike li sou pwojè nan konpayi an.

Sijè prezantasyon: Pwosesis devlopman lè l sèvi avèk Docker ak Gitlab CI.

Pwosesis devlopman ak tès ak Docker ak Gitlab CI

Sa a se dezyèm diskou mwen sou Docker. Nan moman premye rapò a, nou te itilize sèlman Docker nan Devlopman sou machin devlopè yo. Kantite anplwaye ki te itilize Docker te apeprè 2-3 moun. Piti piti, eksperyans yo te genyen e nou te deplase yon ti kras pi lwen. Link nan nou an premye rapò.

Ki sa ki pral nan rapò sa a? Nou pral pataje eksperyans nou sou ki rato nou te kolekte, ki pwoblèm nou te rezoud. Se pa tout kote li te bèl, men li te pèmèt pou avanse pou pi.

Deviz nou se: dock tout sa nou ka mete men sou nou.

Pwosesis devlopman ak tès ak Docker ak Gitlab CI

Ki pwoblèm nap rezoud?

Lè gen plizyè ekip nan yon konpayi, pwogramè a se yon resous pataje. Gen etap lè yon pwogramè rale soti nan yon pwojè epi yo bay pou kèk tan nan yon lòt pwojè.

Nan lòd pou pwogramè a byen vit konprann, li bezwen telechaje kòd sous pwojè a ak lanse anviwònman an pi vit ke posib, ki pral pèmèt li avanse pou pi lwen rezoud pwoblèm yo nan pwojè sa a.

Anjeneral, si ou kòmanse nan grafouyen, Lè sa a, gen ti dokiman nan pwojè a. Enfòmasyon sou kòman yo mete kanpe disponib sèlman pou ansyen yo. Anplwaye yo tabli espas travay yo poukont yo nan youn oubyen de jou. Pou pi vit sa a, nou te itilize Docker.

Rezon kap vini an se normalisation de paramètres nan Devlopman. Nan eksperyans mwen, devlopè toujou pran inisyativ la. Nan chak senkyèm ka, yo antre nan yon domèn koutim, pou egzanp, vasya.dev. Chita bò kote l 'se vwazen li Petya, ki gen domèn se petya.dev. Yo devlope yon sit entènèt oswa kèk eleman nan sistèm nan lè l sèvi avèk non domèn sa a.

Lè sistèm nan ap grandi ak non domèn sa yo kòmanse antre nan konfigirasyon, yon konfli anviwònman Devlopman rive epi chemen sit la reekri.

Menm bagay la tou rive ak anviwònman baz done. Yon moun pa anmède ak sekirite epi li travay ak yon modpas rasin vid. Nan etap enstalasyon an, MySQL mande yon moun pou yon modpas ak modpas la te tounen soti nan 123. Li souvan rive ke konfigirasyon baz done a toujou ap chanje depann sou komèt pwomotè a. Yon moun korije, yon moun pa korije konfigirasyon an. Te gen ke trik nouvèl lè nou te pran kèk kalite konfigirasyon tès nan .gitignore epi chak pwomotè te oblije enstale baz done a. Sa te fè li difisil pou kòmanse. Li nesesè, pami lòt bagay, sonje sou baz done a. Yo dwe inisyalize baz done a, yo dwe antre yon modpas, yo dwe anrejistre yon itilizatè, yo dwe kreye yon tab, elatriye.

Yon lòt pwoblèm se diferan vèsyon bibliyotèk yo. Li souvan rive ke yon pwomotè travay ak pwojè diferan. Gen yon pwojè Legacy ki te kòmanse senk ane de sa (ki soti nan 2017 - ed. nòt). Nan moman lansman an, nou te kòmanse ak MySQL 5.5. Genyen tou pwojè modèn kote nou eseye aplike vèsyon pi modèn nan MySQL, pou egzanp, 5.7 oswa plis (nan 2017 - ed. nòt)

Nenpòt moun ki travay ak MySQL konnen ke bibliyotèk sa yo pote depandans avèk yo. Li se pito pwoblèm nan kouri 2 baz ansanm. Omwen, ansyen kliyan yo gen pwoblèm pou konekte ak nouvo baz done a. Sa a nan vire kreye plizyè pwoblèm.

Pwoblèm nan pwochen se lè yon pwomotè ap travay sou yon machin lokal, li itilize resous lokal yo, dosye lokal yo, RAM lokal yo. Tout entèraksyon nan moman an nan devlope yon solisyon a pwoblèm yo te pote nan kad la nan lefèt ke li travay sou yon sèl machin. Yon egzanp se lè nou gen sèvè backend nan Pwodiksyon 3, ak pwomotè a sove fichye yo nan anyè rasin lan epi soti nan nginx pran dosye pou reponn a yon demann. Lè yon kòd konsa antre nan Pwodiksyon, li sanble ke dosye a prezan sou youn nan 3 sèvè yo.

Direksyon mikwosèvis yo ap devlope kounye a. Lè nou divize gwo aplikasyon nou an nan kèk ti eleman ki kominike youn ak lòt. Sa a pèmèt ou chwazi teknoloji pou yon pil espesifik nan travay. Li pèmèt ou tou pataje travay ak responsablite ant devlopè yo.

Frondend-devlopè, devlope sou JS, prèske pa gen okenn enfliyans sou Backend. Devlopè nan backend, nan vire, devlope, nan ka nou an, Ruby on Rails epi li pa entèfere ak Frondend. Se entèraksyon an fèt lè l sèvi avèk API a.

Kòm yon bonis, avèk èd Docker, nou te kapab resikle resous sou Staging. Chak pwojè, akòz spesifik li yo, mande sèten paramèt. Fizikman, li te nesesè yo asiyen swa yon sèvè vityèl ak konfigirasyon yo separeman, oswa yo pataje kèk kalite anviwònman varyab ak pwojè te kapab, tou depann de vèsyon an nan bibliyotèk yo, enfliyanse youn ak lòt.

Pwosesis devlopman ak tès ak Docker ak Gitlab CI

Zouti. Ki sa nou itilize?

  • Docker tèt li. Dockerfile a dekri depandans yon sèl aplikasyon.
  • Docker-compose se yon pake ki rasanble kèk nan aplikasyon Docker nou yo.
  • Nou itilize GitLab pou konsève kòd sous la.
  • Nou itilize GitLab-CI pou entegrasyon sistèm lan.

Pwosesis devlopman ak tès ak Docker ak Gitlab CI

Rapò a konsiste de de pati.

Premye pati a pral pale sou fason Docker te kouri sou machin devlopè yo.

Dezyèm pati a pral pale sou ki jan yo kominike avèk GitLab, ki jan nou fè tès yo ak ki jan nou woule sou Staging.

Pwosesis devlopman ak tès ak Docker ak Gitlab CI

Docker se yon teknoloji ki pèmèt (lè l sèvi avèk yon apwòch deklaratif) dekri eleman ki nesesè yo. Sa a se yon egzanp Dockerfile. Isit la nou deklare ke nou ap eritye de Ruby ofisyèl:2.3.0 Docker imaj la. Li gen Ruby vèsyon 2.3 enstale. Nou enstale bibliyotèk konstriksyon ki nesesè yo ak NodeJS. Nou dekri ke nou kreye yon anyè /app. Mete anyè aplikasyon an kòm anyè k ap travay. Nan anyè sa a nou mete Gemfile minimòm ki nesesè yo ak Gemfile.lock. Lè sa a, nou bati pwojè yo ki enstale imaj depandans sa a. Nou endike ke veso a pral pare pou koute sou pò ekstèn 3000. Dènye kòmandman an se kòmandman ki dirèkteman lanse aplikasyon nou an. Si nou egzekite lòd kòmanse pwojè a, aplikasyon an ap eseye kouri epi kouri lòd espesifye a.

Pwosesis devlopman ak tès ak Docker ak Gitlab CI

Sa a se yon egzanp minim nan yon dosye docker-konpoze. Nan ka sa a, nou montre ke gen yon koneksyon ant de resipyan. Sa a se dirèkteman nan sèvis baz done a ak sèvis entènèt la. Aplikasyon entènèt nou yo nan pifò ka yo mande pou kèk kalite baz done kòm yon backend pou estoke done. Depi nou ap itilize MySQL, egzanp lan se ak MySQL - men pa gen anyen ki anpeche nou itilize kèk lòt baz done (PostgreSQL, Redis).

Nou pran nan sous ofisyèl la nan mwaye Docker imaj la nan MySQL 5.7.14 san chanjman. Nou kolekte imaj ki responsab aplikasyon entènèt nou an nan anyè aktyèl la. Li kolekte yon imaj pou nou pandan premye lansman an. Lè sa a, li kouri lòd la ke nou ap egzekite isit la. Si nou tounen, nou pral wè ke kòmand lansman an atravè Puma te defini. Puma se yon sèvis ki ekri an Ruby. Nan dezyèm ka a, nou depase. Kòmandman sa a ka abitrè selon bezwen nou yo oswa travay nou yo.

Nou dekri tou ke nou bezwen voye yon pò sou machin lame pwomotè nou an soti nan 3000 a 3000 sou pò a veso. Sa a se fè otomatikman lè l sèvi avèk iptables ak mekanis li yo, ki se dirèkteman entegre nan Docker.

Pwomotè a kapab tou, tankou anvan, jwenn aksè nan nenpòt adrès IP ki disponib, pou egzanp, 127.0.0.1 se adrès IP lokal oswa ekstèn nan machin nan.

Dènye liy lan di ke veso entènèt la depann de veso db la. Lè nou rele kòmansman veso entènèt la, docker-compose pral premye kòmanse baz done a pou nou. Deja nan kòmansman baz done a (an reyalite, apre lansman veso a! Sa a pa garanti preparasyon pou baz done a) pral lanse aplikasyon an, backend nou an.

Sa a evite erè lè baz done a pa pote epi sove resous lè nou sispann veso baz done a, konsa libere resous pou lòt pwojè.

Pwosesis devlopman ak tès ak Docker ak Gitlab CI

Ki sa ki ban nou itilize nan dockerization baz done sou pwojè a. Nou ranje vèsyon an nan MySQL pou tout devlopè. Sa a evite kèk erè ki ka rive lè vèsyon yo diverge, lè sentaks, konfigirasyon, paramèt default yo chanje. Sa a pèmèt ou presize yon non host komen pou baz done a, login, modpas. Nou ap deplase lwen zou a nan non ak konfli nan dosye yo konfigirasyon ke nou te gen pi bonè.

Nou gen opòtinite pou sèvi ak yon konfigirasyon pi pi bon pou anviwònman Devlopman an, ki pral diferan de default la. MySQL se configuré pou machin fèb pa default ak pèfòmans li soti nan bwat la se trè pòv.

Pwosesis devlopman ak tès ak Docker ak Gitlab CI

Docker pèmèt ou sèvi ak Python, Ruby, NodeJS, PHP entèprèt nan vèsyon an vle. Nou debarase m de nesesite pou sèvi ak kèk kalite manadjè vèsyon. Précédemment, Ruby te itilize yon pake rpm ki te pèmèt ou chanje vèsyon an depann sou pwojè a. Li pèmèt tou, gras a veso Docker a, san pwoblèm imigre kòd la ak vèsyon li ansanm ak depandans. Nou pa gen okenn pwoblèm pou konprann vèsyon an nan tou de entèprèt la ak kòd la. Pou mete ajou vèsyon an, bese ansyen veso a epi monte nouvo veso a. Si yon bagay ale mal, nou ka bese nouvo veso a, monte ansyen veso a.

Apre bati imaj la, resipyan yo nan tou de Devlopman ak Pwodiksyon yo pral menm bagay la. Sa a se laverite espesyalman pou enstalasyon gwo.

Pwosesis devlopman ak tès ak Docker ak Gitlab CI Sou Frontend nou itilize JavaScipt ak NodeJS.

Koulye a, nou gen dènye pwojè a sou ReacJS. Pwomotè a kouri tout bagay nan veso a epi li devlope lè l sèvi avèk cho-rechaje.

Apre sa, travay asanble JavaScipt la te lanse epi yo bay kòd la konpile nan estatik atravè resous nginx ekonomize.

Pwosesis devlopman ak tès ak Docker ak Gitlab CI

Isit la mwen te bay konplo a nan dènye pwojè nou an.

Ki travay yo te rezoud? Nou te gen yon bezwen bati yon sistèm ak ki aparèy mobil kominike. Yo resevwa done. Youn nan posibilite yo se voye notifikasyon pouse sou aparèy sa a.

Kisa nou fè pou sa?

Nou divize an aplikasyon an konpozan tankou: pati admin sou JS, backend la, ki travay atravè koòdone REST anba Ruby on Rails. Backend la reyaji ak baz done a. Rezilta a ki pwodwi yo bay kliyan an. Panèl administratè a reyaji avèk backend la ak baz done a atravè koòdone REST la.

Nou te gen tou yon bezwen voye notifikasyon pouse. Anvan sa, nou te gen yon pwojè ki aplike yon mekanis ki responsab pou bay notifikasyon sou platfòm mobil yo.

Nou te devlope konplo sa a: yon operatè nan navigatè a reyaji avèk panèl admin, panèl admin a reyaji ak backend la, travay la se voye notifikasyon pouse.

Pouse notifikasyon kominike avèk yon lòt eleman ki aplike nan NodeJS.

Yo bati keu yo epi yo voye notifikasyon dapre mekanis yo.

De baz done yo trase isit la. Nan moman sa a, avèk èd Docker, nou itilize 2 baz done endepandan ki pa gen rapò youn ak lòt nan okenn fason. Anplis de sa, yo gen yon rezo vityèl komen, ak done fizik ki estoke nan repèrtwar diferan sou machin pwomotè a.

Pwosesis devlopman ak tès ak Docker ak Gitlab CI

Menm bagay la tou men nan nimewo. Sa a se kote reutilize kòd enpòtan.

Si pi bonè nou te pale sou re-itilize kòd nan fòm bibliyotèk, Lè sa a, nan egzanp sa a, sèvis nou an ki reponn a notifikasyon pouse yo reitilize kòm yon sèvè konplè. Li bay yon API. Ak nouvo devlopman nou an deja reyaji avèk li.

Lè sa a, nou te itilize vèsyon 4 nan NodeJS. Kounye a (nan 2017 - ed. nòt) nan dènye devlopman nou itilize vèsyon 7 nan NodeJS. Pa gen okenn pwoblèm nan nouvo konpozan pou enplike nouvo vèsyon bibliyotèk yo.

Si sa nesesè, ou ka refactorize epi ogmante vèsyon NodeJS nan sèvis notifikasyon Push la.

Men, si nou ka kenbe konpatibilite API, Lè sa a, li pral posib ranplase li ak lòt pwojè ki te deja itilize.

Pwosesis devlopman ak tès ak Docker ak Gitlab CI

Kisa ou bezwen ajoute Docker? Nou ajoute yon Dockerfile nan depo nou an, ki dekri depandans ki nesesè yo. Nan egzanp sa a, eleman yo kraze lojikman. Sa a se seri minimòm yon pwomotè backend.

Lè w ap kreye yon nouvo pwojè, nou kreye yon Dockerfile, dekri ekosistèm vle a (Python, Ruby, NodeJS). Nan docker-compose, li dekri depandans ki nesesè yo - baz done a. Nou dekri ke nou bezwen yon baz done nan vèsyon sa yo ak tankou yon vèsyon, magazen done la epi la.

Nou itilize yon twazyèm veso separe ak nginx pou sèvi estatik. Li posib pou telechaje foto yo. Backend mete yo nan yon volim pre-prepare, ki tou monte nan yon veso ki gen nginx, ki bay estatik la.

Pou estoke nginx, konfigirasyon mysql, nou te ajoute yon katab Docker kote nou estoke konfigirasyon ki nesesè yo. Lè yon pwomotè fè yon script git nan yon depo sou machin li, li deja gen yon pwojè pare pou devlopman lokal yo. Pa gen okenn kesyon ki pò oswa ki anviwònman yo aplike.

Pwosesis devlopman ak tès ak Docker ak Gitlab CI

Apre sa, nou gen plizyè konpozan: admin, enfòme-API, notifikasyon pouse.

Yo nan lòd yo kòmanse tout sa a, nou te kreye yon lòt depo, ke nou te rele dockerized-app. Nan moman sa a nou itilize plizyè depo anvan chak eleman. Yo jis lojikman diferan - nan GitLab li sanble yon katab, men sou machin pwomotè a, yon katab pou yon pwojè espesifik. Yon nivo desann se eleman yo ki pral konbine.

Pwosesis devlopman ak tès ak Docker ak Gitlab CI

Sa a se yon egzanp jis sa ki nan dockerized-app. Nou menm tou nou pote anyè Docker isit la, kote nou ranpli konfigirasyon ki nesesè pou entèraksyon tout eleman yo. Gen yon README.md ki dekri yon ti tan ki jan yo kouri pwojè a.

Isit la nou te aplike de fichye docker-compose. Sa a se fè yo nan lòd yo kapab kouri nan etap. Lè yon pwomotè travay ak nwayo a, li pa bezwen notifikasyon pouse, li tou senpleman lanse yon fichye Docker-konpoze epi, kòmsadwa, resous la sove.

Si gen yon bezwen entegre ak notifikasyon pouse, Lè sa a, docker-compose.yaml ak docker-compose-push.yaml yo te lanse.

Depi docker-compose.yaml ak docker-compose-push.yaml yo nan yon katab, yon sèl rezo vityèl otomatikman kreye.

Pwosesis devlopman ak tès ak Docker ak Gitlab CI

Deskripsyon nan eleman yo. Sa a se yon dosye ki pi avanse ki responsab pou koleksyon eleman yo. Ki sa ki remakab isit la? Isit la nou prezante eleman balans lan.

Sa a se yon imaj Docker ki pare ki kouri nginx ak yon aplikasyon ki koute sou priz Docker la. Dinamik, kòm resipyan yo vire ak fèmen, li rejenere konfigirasyon nginx la. Nou distribye manyen konpozan pa non domèn twazyèm-nivo.

Pou anviwònman Devlopman an, nou itilize domèn .dev - api.informer.dev. Aplikasyon ki gen yon domèn .dev disponib sou machin lokal pwomotè a.

Pli lwen, konfigirasyon yo transfere nan chak pwojè ak tout pwojè yo te lanse ansanm an menm tan an.

Pwosesis devlopman ak tès ak Docker ak Gitlab CI

Grafikman, li sanble ke kliyan an se navigatè nou an oswa kèk zouti ak ki nou fè demann nan balans lan.

Ekilib non domèn detèmine ki veso pou kontakte.

Li kapab nginx, ki bay admin JS la. Sa a ka nginx, ki bay API a, oswa fichye estatik, ki bay nginx sou fòm telechajman imaj.

Dyagram nan montre ke resipyan yo konekte pa yon rezo vityèl epi yo kache dèyè yon prokurasyon.

Sou machin pwomotè a, ou ka jwenn aksè nan veso a konnen IP a, men nan prensip nou pa sèvi ak sa a. Pratikman pa gen okenn nesesite pou aksè dirèk.

Pwosesis devlopman ak tès ak Docker ak Gitlab CI

Ki egzanp pou gade pou dockerize aplikasyon w lan? Nan opinyon mwen, yon bon egzanp se imaj la Docker ofisyèl pou MySQL.

Li se byen difisil. Gen anpil vèsyon. Men, fonksyonalite li yo pèmèt ou kouvri anpil bezwen ki ka parèt nan pwosesis devlopman pi lwen. Si ou pase tan ak konnen ki jan li tout reyaji, Lè sa a, mwen panse ke ou pral pa gen okenn pwoblèm nan aplikasyon pwòp tèt ou.

Hub.docker.com anjeneral gen lyen ki mennen nan github.com, ki gen done anvan tout koreksyon ki soti dirèkteman nan kote ou ka bati imaj la tèt ou.

Pli lwen nan depo sa a gen yon script docker-endpoint.sh, ki responsab pou inisyalizasyon inisyal la ak pou plis pwosesis lansman aplikasyon an.

Epitou nan egzanp sa a, gen kapasite nan konfigirasyon lè l sèvi avèk varyab anviwònman an. Lè nou defini yon varyab anviwònman lè w ap kouri yon sèl veso oswa atravè docker-compose, nou ka di ke nou bezwen mete yon modpas vid pou docker anrasinen sou MySQL oswa tou sa nou vle.

Gen yon opsyon pou kreye yon modpas o aza. Nou di ke nou bezwen yon itilizatè, nou bezwen mete yon modpas pou itilizatè a, epi nou bezwen kreye yon baz done.

Nan pwojè nou yo, nou yon ti kras inifye Dockerfile a, ki responsab pou inisyalizasyon. Gen nou korije li nan bezwen nou yo fè li jis yon ekstansyon nan dwa itilizatè yo ke aplikasyon an itilize. Sa te pèmèt nou tou senpleman kreye yon baz done nan konsole aplikasyon an pita sou. Aplikasyon Ruby gen yon lòd pou kreye, modifye, ak efase baz done.

Pwosesis devlopman ak tès ak Docker ak Gitlab CI

Sa a se yon egzanp sou kisa yon vèsyon espesifik nan MySQL sanble sou github.com. Ou ka louvri Dockerfile a epi wè ki jan enstalasyon an ap pase la.

docker-endpoint.sh se script ki responsab pou pwen antre a. Pandan inisyalizasyon inisyal la, gen kèk etap preparasyon ki nesesè, epi yo pran tout aksyon sa yo jis nan script inisyalizasyon an.

Pwosesis devlopman ak tès ak Docker ak Gitlab CI

Ann ale nan dezyèm pati a.

Pou estoke kòd sous yo, nou chanje nan gitlab. Sa a se yon sistèm san patipri pwisan ki gen yon koòdone vizyèl.

Youn nan eleman Gitlab se Gitlab CI. Li pèmèt ou dekri yon sekans nan kòmandman ki pral pita dwe itilize pou òganize yon sistèm livrezon kòd oswa fè tès otomatik yo.

Gitlab CI 2 pale https://goo.gl/uohKjI - rapò ki soti nan klib Ruby Larisi - byen detaye e petèt li pral enterese w.

Pwosesis devlopman ak tès ak Docker ak Gitlab CI

Koulye a, nou pral gade sa ki nesesè yo nan lòd yo aktive Gitlab CI. Yo nan lòd yo kòmanse Gitlab CI, nou jis bezwen mete dosye a .gitlab-ci.yml nan rasin lan nan pwojè a.

Isit la nou dekri ke nou vle egzekite yon sekans eta tankou yon tès, deplwaye.

Nou egzekite scripts ki rele dirèkteman docker-compose pou konstwi aplikasyon nou an. Sa a se jis yon egzanp backend.

Apre sa, nou di ke li nesesè kouri migrasyon chanje baz done a epi kouri tès yo.

Si scripts yo egzekite kòrèkteman epi yo pa retounen yon kòd erè, Lè sa a, sistèm nan kontinye nan dezyèm etap la nan deplwaman an.

Etap deplwaman an kounye a aplike pou staging. Nou pa t òganize yon rekòmanse zewo-downtime.

Nou fòse etenn tout resipyan yo, epi Lè sa a, nou leve tout resipyan yo ankò, kolekte nan premye etap la pandan tès la.

Nou ap kouri pou anviwònman aktyèl varyab migrasyon baz done yo ki te ekri pa devlopè yo.

Gen yon nòt ke sa a aplike sèlman nan branch mèt la.

Lè chanje lòt branch pa egzekite.

Li posib pou òganize déploiement pa branch yo.

Pwosesis devlopman ak tès ak Docker ak Gitlab CI

Pou òganize sa a pi lwen, nou bezwen enstale Gitlab Runner.

Se sèvis piblik sa a ekri nan Golang. Li se yon sèl fichye, jan sa komen nan mond lan Golang, ki pa mande pou okenn depandans.

Sou demaraj, nou anrejistre Gitlab Runner la.

Nou jwenn kle a nan koòdone wèb Gitlab la.

Lè sa a, nou rele lòd inisyalizasyon an sou liy lòd la.

Mete kanpe Gitlab Runner entèaktif (Shell, Docker, VirtualBox, SSH)

Kòd sou Gitlab Runner pral egzekite sou chak komèt, tou depann de anviwònman an .gitlab-ci.yml.

Pwosesis devlopman ak tès ak Docker ak Gitlab CI

Ki jan li sanble vizyèlman nan Gitlab nan koòdone entènèt la. Apre nou fin konekte GItlab CI, nou gen yon drapo ki montre eta konstriksyon an nan moman an.

Nou wè yon komite te fèt 4 minit de sa, ki te pase tout tès yo e ki pa te koze okenn pwoblèm.

Pwosesis devlopman ak tès ak Docker ak Gitlab CI

Nou ka pran yon gade pi pre nan bati yo. Isit la nou wè ke de eta te deja pase. Estati tès ak estati deplwaman sou sèn.

Si nou klike sou yon bati espesifik, Lè sa a, pral gen yon pwodiksyon konsole nan kòmandman yo ki te kouri nan pwosesis la dapre .gitlab-ci.yml.

Pwosesis devlopman ak tès ak Docker ak Gitlab CI

Sa a se sa istwa pwodwi nou an sanble. Nou wè ke te gen tantativ siksè. Lè tès yo soumèt, li pa kontinye nan pwochen etap la epi kòd la etap pa mete ajou.

Pwosesis devlopman ak tès ak Docker ak Gitlab CI

Ki travay nou te rezoud sou sèn lè nou te aplike Docker? Sistèm nou an konsiste de eleman epi nou te gen yon bezwen rekòmanse, sèlman yon pati nan eleman yo ki te mete ajou nan depo a, epi yo pa tout sistèm nan.

Pou fè sa, nou te oblije kraze tout bagay nan dosye separe.

Apre nou te fè sa, nou te gen yon pwoblèm ak lefèt ke Docker-compose kreye pwòp espas rezo li pou chak papa epi li pa wè eleman vwazen an.

Yo nan lòd yo jwenn alantou, nou te kreye rezo a nan Docker manyèlman. Li te ekri nan Docker-compose ke ou itilize yon rezo konsa pou pwojè sa a.

Kidonk, chak eleman ki kòmanse ak may sa a wè eleman nan lòt pati nan sistèm nan.

Pwochen pwoblèm nan divize sèn nan plizyè pwojè.

Depi nan lòd pou tout bagay sa yo gade bèl ak pi pre ke posib nan pwodiksyon, li bon yo sèvi ak pò 80 oswa 443, ki se itilize toupatou nan WEB la.

Pwosesis devlopman ak tès ak Docker ak Gitlab CI

Ki jan nou te rezoud li? Nou te asiyen yon Gitlab Runner nan tout gwo pwojè yo.

Gitlab pèmèt ou kouri plizyè Gitlab Runners distribiye, ki pral tou senpleman pran tout travay yo nan vire nan yon fason chaotic epi kouri yo.

Pou nou pa gen yon kay, nou limite gwoup la nan pwojè nou yo nan yon sèl Gitlab Runner, ki fè fas san pwoblèm ak volim nou yo.

Nou te deplase nginx-proxy nan yon script demaraj separe epi nou te ajoute kadriyaj pou tout pwojè ki ladan l.

Pwojè nou an gen yon sèl kadriyaj, ak balans lan gen plizyè kadriyaj pa non pwojè. Li ka proxy pi lwen pa non domèn.

Demann nou yo vini nan domèn nan pò 80 epi yo rezoud nan yon gwoup veso ki sèvi domèn sa a.

Pwosesis devlopman ak tès ak Docker ak Gitlab CI

Ki lòt pwoblèm ki te genyen? Sa a se sa tout resipyan kouri kòm rasin pa default. Sa a se rasin ki pa egal ak rasin lame sistèm lan.

Sepandan, si ou antre nan veso a, li pral rasin epi fichye ke nou kreye nan veso sa a jwenn dwa rasin.

Si pwomotè a te antre nan veso a epi li te fè kèk kòmandman ki jenere dosye, Lè sa a, kite veso a, Lè sa a, li gen yon dosye nan anyè travay li ke li pa gen aksè a.

Ki jan li ka rezoud? Ou ka ajoute itilizatè ki pral nan veso a.

Ki pwoblèm ki te parèt lè nou te ajoute itilizatè a?

Lè nou kreye yon itilizatè, souvan nou pa gen menm ID gwoup (UID) ak ID itilizatè (GID).

Pou rezoud pwoblèm sa a nan veso a, nou itilize itilizatè ki gen ID 1000.

Nan ka nou an, sa a te kowenside ak lefèt ke prèske tout devlopè itilize Ubuntu OS la. Ak sou Ubuntu, premye itilizatè a gen yon ID 1000.

Pwosesis devlopman ak tès ak Docker ak Gitlab CI

Eske nou gen plan?

Li dokiman Docker la. Pwojè a ap devlope aktivman, dokiman an ap chanje. Done yo te resevwa de oswa twa mwa de sa yo deja tou dousman vin demode.

Gen kèk nan pwoblèm yo ke nou rezoud yo byen petèt deja rezoud pa mwayen estanda.

Se konsa, mwen vle ale pi lwen deja ale dirèkteman nan orchestration la.

Yon egzanp se bati-an mekanis Docker a ki rele Docker Swarm, ki soti nan bwat la. Mwen vle kouri yon bagay nan pwodiksyon ki baze sou teknoloji Docker Swarm.

Resipyan frajman fè li enkonvenyan pou travay ak mòso bwa. Koulye a, mòso bwa yo izole. Yo gaye nan tout resipyan yo. Youn nan travay yo se fè aksè pratik nan mòso bwa yo atravè koòdone entènèt la.

Pwosesis devlopman ak tès ak Docker ak Gitlab CI

Sous: www.habr.com

Add nouvo kòmantè