Haɓakawa da tsarin gwaji tare da Docker da Gitlab CI

Ina ba da shawarar ku karanta kwafin rahoton na Alexander Sigachev daga Inventos "Tsarin ci gaba da gwaji tare da Docker + Gitlab CI"

Wadanda ke fara aiwatar da ci gaba da tsarin gwaji bisa Docker + Gitlab CI sukan yi tambayoyi na asali. A ina za a fara? Yadda za a tsara? Yadda za a gwada?

Wannan rahoto yana da kyau saboda yana magana ta hanyar da aka tsara game da ci gaba da tsarin gwaji ta amfani da Docker da Gitlab CI. Rahoton da kansa ya fito daga 2017. Ina tsammanin daga wannan rahoton za ku iya tattara mahimman bayanai, dabaru, ra'ayi, da ƙwarewar amfani.

Wanene ya damu, don Allah a ƙarƙashin cat.

Sunana Alexander Sigachev. Ina aiki da Inventos. Zan gaya muku game da kwarewata ta yin amfani da Docker da kuma yadda muke aiwatar da shi a hankali akan ayyukan a cikin kamfanin.

Taken rahoton: Tsarin ci gaba ta amfani da Docker da Gitlab CI.

Haɓakawa da tsarin gwaji tare da Docker da Gitlab CI

Wannan ita ce magana ta biyu game da Docker. A lokacin rahoton farko, mun yi amfani da Docker kawai a cikin Ci gaba akan injunan haɓakawa. Adadin ma'aikatan da suka yi amfani da Docker kusan mutane 2-3 ne. A hankali, an sami gogewa kuma mun matsa kaɗan kaɗan. Link to mu rahoton farko.

Menene zai kasance a cikin wannan rahoto? Za mu raba kwarewar mu game da irin rake da muka tattara, irin matsalolin da muka magance. Ba shi da kyau a ko'ina, amma ya ba mu damar ci gaba.

Taken mu: dockerize duk abin da muka samu hannun mu.

Haɓakawa da tsarin gwaji tare da Docker da Gitlab CI

Wadanne matsaloli muke warwarewa?

Lokacin da kamfani yana da ƙungiyoyi da yawa, mai tsara shirye-shirye shine albarkatun da aka raba. Akwai matakan da ake ciro mai shirye-shirye daga wani aikin kuma a ba shi wani aikin na ɗan lokaci.

Domin mai tsara shirye-shirye ya fahimci cikin sauri, yana buƙatar saukar da lambar tushe na aikin kuma ya ƙaddamar da yanayi da sauri, wanda zai ba shi damar ci gaba da magance matsalolin wannan aikin.

Yawancin lokaci, idan kun fara daga karce, akwai ƙananan takardu a cikin aikin. Tsofaffi ne kawai ke da bayanin yadda ake saita shi. Ma'aikata sun kafa wurin aiki da kansu a cikin kwana ɗaya ko biyu. Don hanzarta wannan, mun yi amfani da Docker.

Dalili na gaba shine daidaitawar saituna a cikin Ci gaba. A cikin kwarewata, masu haɓakawa koyaushe suna ɗaukar himma. A cikin kowane yanayi na biyar, ana shigar da yankin al'ada, misali vasya.dev. Zaune kusa da ni shine makwabci na Petya, wanda yankinsa shine petya.dev. Suna haɓaka gidan yanar gizo ko wani ɓangaren tsarin ta amfani da wannan sunan yankin.

Lokacin da tsarin ya girma kuma waɗannan sunaye na yanki sun fara haɗawa a cikin daidaitawa, rikici a cikin yanayin ci gaba ya taso kuma an sake rubuta hanyar shafin.

Haka abin yake faruwa tare da saitunan bayanai. Wasu mutane ba sa damuwa da tsaro kuma suna aiki tare da kalmar sirri mara tushe. A matakin shigarwa, MySQL ya tambayi wani don kalmar sirri kuma kalmar sirri ta zama 123. Yakan faru sau da yawa cewa tsarin bayanai yana canzawa akai-akai dangane da ƙaddamarwar mai haɓakawa. Wani ya gyara, wani bai gyara saitin ba. Akwai dabaru lokacin da muka sanya wasu saitin gwaji a ciki .gitignore kuma dole ne kowane mai haɓakawa ya shigar da bayanan. Wannan ya sa tsarin farawa ya fi wahala. Daga cikin wasu abubuwa, kuna buƙatar tunawa game da bayanan bayanai. Dole ne a fara fara adana bayanai, dole ne a yi rajistar kalmar sirri, dole ne a yi rajistar mai amfani, dole ne a samar da wata alama, da sauransu.

Wata matsalar ita ce nau'ikan ɗakunan karatu daban-daban. Yakan faru sau da yawa cewa mai haɓaka yana aiki akan ayyuka daban-daban. Akwai aikin Legacy, wanda ya fara shekaru biyar da suka gabata (daga 2017 - bayanin edita). A farkon mun fara da MySQL 5.5. Hakanan akwai ayyukan zamani waɗanda muke ƙoƙarin aiwatar da ƙarin juzu'in MySQL na zamani, misali 5.7 ko sama da haka (a cikin 2017 - bayanin edita)

Duk wanda ke aiki tare da MySQL ya san cewa waɗannan ɗakunan karatu suna ɗaukar abin dogaro. Yana da matukar matsala don gudanar da bayanai guda 2 tare. Aƙalla, yana da matsala don haɗa tsoffin abokan ciniki zuwa sabon bayanan bayanai. Wannan kuma yana haifar da matsaloli da yawa.

Matsala ta gaba ita ce lokacin da mai haɓakawa ke aiki akan injin gida, yana amfani da albarkatun gida, fayilolin gida, RAM na gida. Dukkan hulɗar a lokacin samar da mafita ga matsalolin ana aiwatar da shi a cikin tsarin gaskiyar cewa yana aiki akan na'ura ɗaya. Misali zai kasance lokacin da muke da sabobin baya a cikin Production 3, kuma mai haɓakawa yana adana fayiloli zuwa tushen tushen kuma daga can nginx yana ɗaukar fayilolin don amsa buƙatar. Lokacin da irin wannan lambar ta shiga Production, ya zama cewa fayil ɗin yana nan akan ɗayan sabobin 3.

A halin yanzu alkiblar microservices tana tasowa. Lokacin da muka raba manyan aikace-aikacen mu zuwa wasu ƙananan sassa waɗanda ke hulɗa da juna. Wannan yana ba ku damar zaɓar fasaha don takamaiman tarin ɗawainiya. Wannan kuma yana ba ku damar rarraba aiki da yanki na alhakin tsakanin masu haɓakawa.

Mai haɓakawa na gaba, mai tasowa a cikin JS, ba shi da wani tasiri a kan baya. Mai haɓaka baya, bi da bi, yana haɓaka, a cikin yanayinmu, Ruby akan Rails kuma baya tsoma baki tare da Frondend. Ana yin hulɗa ta amfani da API.

A matsayin kari, ta amfani da Docker mun sami damar sake sarrafa albarkatu akan Staging. Kowane aikin, saboda ƙayyadaddun sa, yana buƙatar wasu saitunan. A zahiri, ya zama dole a ware ko dai uwar garken kama-da-wane kuma a daidaita su daban, ko rarraba wasu nau'ikan yanayi mai canzawa da ayyuka na iya yin tasiri ga junansu, ya danganta da nau'in ɗakunan karatu.

Haɓakawa da tsarin gwaji tare da Docker da Gitlab CI

Kayan aiki. Me muke amfani?

  • Docker kanta. Dockerfile yana bayyana abubuwan dogaro na aikace-aikacen guda ɗaya.
  • Docker-compose shine tarin da ke haɗa yawancin aikace-aikacen Docker ɗin mu.
  • Muna amfani da GitLab don adana lambar tushe.
  • Muna amfani da GitLab-CI don haɗin tsarin.

Haɓakawa da tsarin gwaji tare da Docker da Gitlab CI

Rahoton ya kunshi sassa biyu.

Kashi na farko zai gaya muku yadda ake tafiyar da Docker akan injinan masu haɓakawa.

Sashe na biyu zai yi magana game da yadda ake hulɗa da GitLab, yadda muke gudanar da gwaje-gwaje da yadda muke mirgine zuwa Staging.

Haɓakawa da tsarin gwaji tare da Docker da Gitlab CI

Docker fasaha ce da ke ba da izini (ta amfani da hanyar bayyanawa) don bayyana abubuwan da suka dace. Wannan shine misalin Dockerfile. Anan mun bayyana cewa muna gado daga hoton Docker na hukuma na Ruby: 2.3.0. Ya ƙunshi nau'in Ruby 2.3 da aka shigar. Mun shigar da laburaren taro da NodeJS. Mun bayyana cewa muna ƙirƙirar kundin adireshi /app. Mun sanya kundin adireshi na app azaman kundin aiki. A cikin wannan jagorar mun sanya mafi ƙarancin Gemfile da Gemfile.lock. Sa'an nan kuma mu gina ayyukan da suka shigar da wannan abin dogara. Mun nuna cewa kwantena zai kasance a shirye don sauraron tashar tashar waje 3000. Umurni na ƙarshe shine umarnin da ke ƙaddamar da aikace-aikacen mu kai tsaye. Idan muka aiwatar da umarnin gudu na aikin, aikace-aikacen zai yi ƙoƙarin gudu da gudanar da takamaiman umarnin.

Haɓakawa da tsarin gwaji tare da Docker da Gitlab CI

Wannan ƙaramin misali ne na fayil ɗin rubutaccen docker. A wannan yanayin, muna nuna cewa akwai haɗi tsakanin kwantena biyu. Wannan kai tsaye cikin sabis na bayanai da sabis na yanar gizo. Aikace-aikacen gidan yanar gizon mu a mafi yawan lokuta suna buƙatar wasu nau'ikan bayanai a matsayin abin baya don adana bayanai. Tunda muna amfani da MySQL, misalin yana tare da MySQL - amma babu abin da zai hana mu yin amfani da wasu bayanai (PostgreSQL, Redis).

Muna ɗaukar hoton MySQL 5.7.14 ba tare da canje-canje daga tushen hukuma daga cibiyar Docker ba. Muna tattara hoton da ke da alhakin aikace-aikacen gidan yanar gizon mu daga kundin adireshi na yanzu. A lokacin ƙaddamarwa ta farko, yana tattara mana hoto. Sannan yana gudanar da umarnin da muke aiwatarwa anan. Idan muka koma, za mu ga cewa an ayyana umarnin ƙaddamarwa ta hanyar Puma. Puma sabis ne da aka rubuta cikin Ruby. A yanayi na biyu mun soke. Wannan umarni na iya zama na sabani dangane da bukatunmu ko ayyukanmu.

Mun kuma bayyana cewa muna buƙatar tura tashar jiragen ruwa a kan na'ura mai masaukin baki daga 3000 zuwa 3000 tashar jiragen ruwa. Ana yin wannan ta atomatik ta amfani da iptables da nasa tsarin, wanda ke cikin Docker kai tsaye.

Mai haɓakawa na iya, kamar dā, samun dama ga kowane adireshin IP da aka samu, misali, 127.0.0.1 adireshin IP na gida ko na waje na injin.

Layin ƙarshe ya ce kwandon gidan yanar gizon ya dogara da kwandon db. Lokacin da muka kira kwandon gidan yanar gizo don ƙaddamarwa, docker-compose zai fara ƙaddamar da bayanan mana. Tuni a farkon farkon bayanan (a zahiri, bayan ƙaddamar da akwati! Wannan baya tabbatar da shirye-shiryen bayanan) zai ƙaddamar da aikace-aikacen mu, tushen mu.

Wannan yana ba mu damar guje wa kurakurai lokacin da bayanan bayanan ba su tashi ba kuma yana ba mu damar adana albarkatu lokacin da muka dakatar da kwandon bayanai, ta haka ne za mu sami albarkatu don wasu ayyukan.

Haɓakawa da tsarin gwaji tare da Docker da Gitlab CI

Menene amfani da dockerization na bayanai akan aikin ke bamu? Muna yin rikodin sigar MySQL don duk masu haɓakawa. Wannan yana ba ku damar guje wa wasu kurakurai waɗanda za su iya faruwa lokacin da sigogi suka bambanta, lokacin da tsarin daidaitawa, daidaitawa, da saitunan tsoho suka canza. Wannan yana ba ku damar saka sunan mai masauki gama gari don bayanan bayanai, shiga, kalmar sirri. Muna motsawa daga gidan zoo na sunaye da rikice-rikice a cikin fayilolin daidaitawa waɗanda suka wanzu a baya.

Muna da damar yin amfani da mafi kyawun tsari don yanayin haɓakawa, wanda zai bambanta da tsoho. An saita MySQL ta tsohuwa don injuna masu rauni kuma aikin sa daga cikin akwatin yana da ƙasa sosai.

Haɓakawa da tsarin gwaji tare da Docker da Gitlab CI

Docker yana ba ku damar amfani da Python, Ruby, NodeJS, fassarar PHP na sigar da ake so. Muna kawar da buƙatar amfani da wani nau'in mai sarrafa sigar. A baya can, an yi amfani da kunshin rpm don Ruby, wanda ya ba ku damar canza sigar dangane da aikin. Godiya ga kwandon Docker, wannan kuma yana ba ku damar yin ƙaura cikin sauƙi da sigar ta tare da abin dogaro. Ba mu da matsala fahimtar sigar duka mai fassarar da lambar. Don sabunta sigar, kuna buƙatar rage tsohuwar akwati kuma ku ɗaga sabon akwati. Idan wani abu ya yi kuskure, za mu iya rage sabon akwati, tayar da tsohuwar akwati.

Bayan gina hoton, kwantena a duka Ci gaba da Samar da kayayyaki zasu kasance iri ɗaya. Wannan gaskiya ne musamman ga manyan shigarwa.

Haɓakawa da tsarin gwaji tare da Docker da Gitlab CI A kan Frontend muna amfani da JavaScipt da NodeJS.

Yanzu muna da aikin mu na ƙarshe akan ReacJS. Mai haɓakawa ya ƙaddamar da duk abin da ke cikin kwandon kuma ya haɓaka ta amfani da sake kunnawa mai zafi.

Bayan haka, an ƙaddamar da aikin haɗa JavaScipt kuma ana aika lambar da aka haɗa ta ta nginx, adana albarkatu.

Haɓakawa da tsarin gwaji tare da Docker da Gitlab CI

Anan na ba da zane na sabon aikin mu.

Wadanne matsaloli kuka magance? Muna da buƙatar gina tsarin da na'urorin hannu ke hulɗa da shi. Suna karɓar bayanai. Ɗaya daga cikin yuwuwar shine aika sanarwar turawa zuwa wannan na'urar.

Me muka yi don wannan?

Mun raba aikace-aikacen zuwa abubuwa masu zuwa: sashin gudanarwa a JS, bangon baya wanda ke aiki ta hanyar REST interface a ƙarƙashin Ruby akan Rails. Backend yana hulɗa tare da bayanan bayanai. Sakamakon da aka haifar yana ba abokin ciniki. Kwamitin gudanarwa yana hulɗa tare da bayanan baya da bayanan bayanai ta hanyar REST interface.

Hakanan muna da buƙatar aika sanarwar turawa. Kafin wannan, muna da aikin da aka aiwatar da wata hanya wacce ke da alhakin isar da sanarwa zuwa dandamalin wayar hannu.

Mun kirkiro makirci mai zuwa: mai aiki daga mai bincike yana hulɗa tare da admin panel, admin panel yana hulɗa tare da baya, aikin shine aika sanarwar turawa.

Sanarwar turawa suna hulɗa tare da wani ɓangaren da aka aiwatar a cikin NodeJS.

Ana gina jerin gwano kuma ana aika sanarwar bisa ga tsarin nasu.

Ana zana bayanan bayanai guda biyu anan. A halin yanzu, ta amfani da Docker, muna amfani da bayanai masu zaman kansu guda 2 waɗanda ba su da alaƙa da juna. Baya ga gaskiyar cewa suna da hanyar sadarwa ta gama gari, kuma ana adana bayanan jiki a cikin kundayen adireshi daban-daban akan injin mai haɓakawa.

Haɓakawa da tsarin gwaji tare da Docker da Gitlab CI

Abu daya amma a adadi. sake amfani da lambar yana da mahimmanci a nan.

Idan a baya mun yi magana game da sake amfani da lambar a cikin nau'ikan ɗakunan karatu, to, a cikin wannan misalin sabis ɗinmu, wanda ke amsa sanarwar turawa, ana sake amfani da shi azaman cikakken sabar. Yana bayar da API. Kuma sabon ci gaban mu yana hulɗa da shi.

A lokacin muna amfani da sigar 4 na NodeJS. Yanzu (a cikin 2017 - bayanin kula na edita) a cikin sabbin ci gaban mu muna amfani da sigar 7 na NodeJS. Babu matsala a cikin sabbin abubuwa don haɗa sabbin nau'ikan ɗakunan karatu.

Idan ya cancanta, zaku iya sake haɓakawa da ɗaga sigar NodeJS na sabis ɗin sanarwar turawa.

Kuma idan za mu iya kula da daidaitattun API, to, zai yiwu a maye gurbin shi da wasu ayyukan da aka yi amfani da su a baya.

Haɓakawa da tsarin gwaji tare da Docker da Gitlab CI

Me kuke buƙatar ƙara Docker? Muna ƙara Dockerfile zuwa ma'ajiyar mu, wanda ke bayyana abubuwan dogaro. A cikin wannan misali, an raba abubuwan da aka gyara a hankali. Wannan shine mafi ƙarancin kit don mai haɓaka baya.

Lokacin ƙirƙirar sabon aiki, muna ƙirƙirar Dockerfile kuma mu bayyana yanayin da ake buƙata (Python, Ruby, NodeJS). A cikin docker-compose, yana bayyana abin dogaro mai mahimmanci - bayanan bayanai. Mun bayyana cewa muna buƙatar rumbun adana bayanai na irin wannan sigar, don adana bayanai a can da can.

Muna amfani da keɓantaccen akwati na uku tare da nginx don ba da abun ciki na tsaye. Yana yiwuwa a loda hotuna. Ƙaƙwalwar baya yana sanya su a cikin ƙarar da aka riga aka shirya, wanda kuma an saka shi a cikin akwati tare da nginx, wanda ke ba da bayanai masu mahimmanci.

Don adana nginx da daidaitawar mysql, mun ƙara babban fayil na Docker wanda a ciki muke adana abubuwan da suka dace. Lokacin da mai haɓakawa ya yi git clone na wurin ajiya akan injinsa, ya riga yana da shiri don haɓaka gida. Babu tambaya game da wace tashar jiragen ruwa ko wace saituna za a yi amfani da su.

Haɓakawa da tsarin gwaji tare da Docker da Gitlab CI

Na gaba muna da abubuwa da yawa: admin, info-API, sanarwar turawa.

Domin ƙaddamar da duk waɗannan, mun ƙirƙiri wani wurin ajiya mai suna dockerized-app. A halin yanzu muna amfani da ɗakunan ajiya da yawa don kowane bangare. Suna da bambanci a hankali kawai - a cikin GitLab yana kama da babban fayil, amma akan injin mai haɓaka yana kama da babban fayil don takamaiman aiki. Mataki ɗaya da ke ƙasa shine abubuwan da za a haɗa su.

Haɓakawa da tsarin gwaji tare da Docker da Gitlab CI

Wannan misali ne na abubuwan da ke cikin dockerized-app. Muna kuma sanya kundin adireshi na Docker anan, wanda a cikinsa muke cika abubuwan da ake buƙata don hulɗar duk abubuwan haɗin gwiwa. Akwai README.md wanda ya bayyana a takaice yadda ake kaddamar da aikin.

Anan mun yi amfani da manyan fayiloli guda biyu. Anyi wannan ne domin a sami damar ƙaddamar da matakai. Lokacin da mai haɓakawa ke aiki tare da kwaya, baya buƙatar sanarwar turawa, kawai yana ƙaddamar da fayil ɗin docker-compose kuma, saboda haka, ana adana albarkatu.

Idan akwai buƙatar haɗin kai tare da sanarwar turawa, to an ƙaddamar da docker-compose.yaml da docker-compose-push.yaml.

Tunda docker-compose.yaml da docker-compose-push.yaml suna cikin babban fayil ɗin, ana ƙirƙirar hanyar sadarwa guda ɗaya ta atomatik.

Haɓakawa da tsarin gwaji tare da Docker da Gitlab CI

Bayanin abubuwan da aka gyara. Wannan babban fayil ne mai ci gaba wanda ke da alhakin tattara abubuwan da aka gyara. Menene ban mamaki a nan? Anan mun gabatar da bangaren ma'auni.

Wannan hoton Docker da aka yi shi ne wanda ke gudanar da nginx da aikace-aikacen da ke sauraron soket ɗin Docker. Mai ƙarfi, yayin da aka kunna da kashe kwantena, saitin nginx yana sake haɓakawa. Muna rarraba sarrafa abubuwan da aka gyara ta amfani da sunayen yanki na mataki na uku.

Don yanayin haɓakawa muna amfani da yankin .dev - api.informer.dev. Ana samun aikace-aikace tare da yankin .dev akan injin gida na mai haɓakawa.

Sa'an nan kuma an canza saitunan zuwa kowane aikin kuma an ƙaddamar da duk ayyukan tare a lokaci guda.

Haɓakawa da tsarin gwaji tare da Docker da Gitlab CI

Idan muka kwatanta shi a hoto, yana nuna cewa abokin ciniki shine burauzar mu ko wani nau'in kayan aiki da muke yin buƙatun ga ma'auni.

Ma'auni yana ƙayyade ko wane ganga ne ake buƙatar samun dama ga sunan yankin.

Wannan na iya zama nginx, wanda ke ba da JS ga kwamitin gudanarwa. Ana iya yin wannan ta hanyar nginx, wanda ke ba da API, ko fayilolin tsaye, waɗanda nginx ke bayarwa ta hanyar ɗaukar hotuna.

Jadawalin ya nuna cewa an haɗa kwantena zuwa cibiyar sadarwar kama-da-wane kuma an ɓoye a bayan wakili.

A kan na'ura mai haɓakawa, za ku iya shiga cikin akwati da sanin IP, amma a ka'ida ba ma amfani da wannan. A zahiri babu buƙatar tuntuɓar kai tsaye.

Haɓakawa da tsarin gwaji tare da Docker da Gitlab CI

Wane misali zan duba don warware aikace-aikacena? A ganina, kyakkyawan misali shine hoton docker na hukuma don MySQL.

Yana da matukar rikitarwa. Akwai iri dayawa. Amma aikin sa yana ba ku damar biyan buƙatu da yawa waɗanda zasu iya tasowa yayin aiwatar da ƙarin haɓakawa. Idan kun ɗauki lokaci kuma ku fahimci yadda duk ke hulɗa, to ina tsammanin ba za ku sami matsala wajen aiwatar da shi da kanku ba.

Hub.docker.com yawanci yana ƙunshe da hanyoyin haɗi zuwa github.com, inda ake samar da ɗanyen bayanai kai tsaye daga abin da zaku iya gina hoto da kanku.

Bugu da ari a cikin wannan ma'ajiyar akwai rubutun docker-endpoint.sh, wanda ke da alhakin fara farawa da ƙarin sarrafa ƙaddamar da aikace-aikacen.

Hakanan a cikin wannan misali akwai yuwuwar daidaitawa ta amfani da masu canjin yanayi. Ta hanyar ayyana canjin yanayi lokacin gudanar da akwati guda ko ta hanyar docker-compose, zamu iya cewa muna buƙatar saita kalmar sirri mara amfani don docker don tushen akan MySQL ko duk abin da muke so.

Akwai zaɓi don ƙirƙirar kalmar sirri bazuwar. Mun ce muna buƙatar mai amfani, muna buƙatar saita kalmar sirri don mai amfani, kuma muna buƙatar ƙirƙirar bayanai.

A cikin ayyukanmu, mun ɗan haɗa Dockerfile, wanda ke da alhakin farawa. A can muka daidaita shi zuwa bukatunmu don kawai faɗaɗa haƙƙin mai amfani da aikace-aikacen ke amfani da shi. Wannan ya ba da damar ƙirƙirar bayanai kawai daga na'urar wasan bidiyo a nan gaba. Aikace-aikacen Ruby suna da umarni don ƙirƙira, gyarawa, da share bayanan bayanai.

Haɓakawa da tsarin gwaji tare da Docker da Gitlab CI

Wannan shine misalin abin da takamaiman sigar MySQL yayi kama akan github.com. Kuna iya buɗe Dockerfile kuma ku ga yadda shigarwa ke gudana a wurin.

docker-endpoint.sh rubutun da ke da alhakin wurin shigarwa. Lokacin farawa na farko, ana buƙatar wasu ayyukan shirye-shirye kuma duk waɗannan ayyukan suna cikin rubutun farawa.

Haɓakawa da tsarin gwaji tare da Docker da Gitlab CI

Mu ci gaba zuwa kashi na biyu.

Mun canza zuwa gitlab don adana lambobin tushe. Wannan babban tsari ne mai ƙarfi wanda ke da abin dubawa.

Ɗaya daga cikin abubuwan Gitlab shine Gitlab CI. Yana ba ku damar bayyana jerin umarni waɗanda za a yi amfani da su daga baya don tsara tsarin isar da lamba ko gudanar da gwaji ta atomatik.

Rahoton Gitlab CI 2 https://goo.gl/uohKjI - Rahoton daga kulob din Ruby Russia yana da cikakken bayani kuma yana iya sha'awar ku.

Haɓakawa da tsarin gwaji tare da Docker da Gitlab CI

Yanzu za mu kalli abin da ake buƙata don kunna Gitlab CI. Domin ƙaddamar da Gitlab CI, kawai muna buƙatar sanya fayil ɗin .gitlab-ci.yml a cikin tushen aikin.

Anan mun bayyana cewa muna son yin jerin jahohi kamar gwaji, turawa.

Muna aiwatar da rubutun da ke kiran aikin docker-compose ginin aikace-aikacen mu kai tsaye. Wannan misali ne kawai na baya.

Bayan haka muna cewa wajibi ne a gudanar da ƙaura don canza bayanan bayanai da gudanar da gwaje-gwaje.

Idan an aiwatar da rubutun daidai kuma ba a dawo da lambar kuskure ba, to tsarin ya ci gaba zuwa mataki na biyu na turawa.

A halin yanzu ana aiwatar da matakin turawa don tsarawa. Ba mu shirya sake kunnawa ba.

Muna kashe duk kwantena da karfi, sa'an nan kuma mu sake tayar da duk kwantena, wanda aka tattara a matakin farko yayin gwaji.

Bari mu gudanar da ƙaura na bayanai waɗanda masu haɓakawa suka rubuta don yanayin canji na yanzu.

Akwai bayanin cewa wannan ya kamata a yi amfani da shi ne kawai ga reshen maigidan.

Ba ya aiki lokacin canza wasu rassan.

Yana yiwuwa a tsara rollouts tare da rassan.

Haɓakawa da tsarin gwaji tare da Docker da Gitlab CI

Don tsara wannan gaba, muna buƙatar shigar da Gitlab Runner.

An rubuta wannan amfanin a cikin Golang. Fayil guda ɗaya ce kamar yadda aka saba a cikin duniyar Golang, wanda baya buƙatar kowane abin dogaro.

A farawa muna yin rajistar Gitlab Runner.

Muna karɓar maɓalli a cikin haɗin yanar gizon Gitlab.

Sannan muna kiran umarnin farawa akan layin umarni.

Yana saita Gitlab Runner a cikin yanayin maganganu (Shell, Docker, VirtualBox, SSH)

Lambar akan Gitlab Runner za ta aiwatar da kowane alƙawarin dangane da saitin .gitlab-ci.yml.

Haɓakawa da tsarin gwaji tare da Docker da Gitlab CI

Yadda yake kallon gani a Gitlab a cikin mahallin yanar gizo. Bayan haɗa GITlab CI, muna da tuta da ke nuna halin da ginin ke ciki a yanzu.

Mun ga cewa minti 4 da suka wuce an yi wani alkawari wanda ya ci duk gwaje-gwajen kuma bai haifar da matsala ba.

Haɓakawa da tsarin gwaji tare da Docker da Gitlab CI

Za mu iya duba abubuwan da aka gina dalla-dalla. A nan mun ga cewa jihohi biyu sun riga sun wuce. Matsayin gwaji da matsayi na turawa a wurin aiki.

Idan muka danna kan takamaiman gini, za a sami fitowar kayan wasan bidiyo na umarnin da aka ƙaddamar a cikin tsari bisa ga .gitlab-ci.yml.

Haɓakawa da tsarin gwaji tare da Docker da Gitlab CI

Wannan shine yadda labarin samfurin mu yayi kama. Mun ga cewa an yi yunƙurin nasara. Lokacin da aka ƙaddamar da gwaje-gwajen, ba za su matsa zuwa mataki na gaba ba kuma ba a sabunta lambar tsarawa ba.

Haɓakawa da tsarin gwaji tare da Docker da Gitlab CI

Wadanne matsaloli muka warware yayin da muka aiwatar da docker? Tsarin mu ya ƙunshi abubuwa kuma muna buƙatar sake farawa kawai wasu abubuwan da aka sabunta a cikin ma'ajiyar, ba duka tsarin ba.

Don yin wannan, dole ne mu raba komai zuwa manyan manyan fayiloli.

Bayan mun yi haka, mun sami matsala tare da cewa Docker-compose yana ƙirƙirar sararin sadarwar kansa ga kowane babban fayil kuma baya ganin abubuwan da ke cikin maƙwabcinsa.

Don kewayawa, mun ƙirƙiri hanyar sadarwar da hannu a cikin Docker. A cikin Docker-compose an rubuta cewa yakamata kuyi amfani da irin wannan hanyar sadarwa don wannan aikin.

Don haka, kowane ɓangaren da ya fara da wannan raga yana ganin abubuwan da ke cikin sauran sassan tsarin.

Matsala ta gaba ita ce rarraba tsari tsakanin ayyuka da yawa.

Tun da duk wannan ya yi kyau kuma yana kusa da samarwa, yana da kyau a yi amfani da tashar jiragen ruwa 80 ko 443, wanda ake amfani dashi a ko'ina cikin WEB.

Haɓakawa da tsarin gwaji tare da Docker da Gitlab CI

Ta yaya muka warware wannan? Mun sanya Gitlab Runner guda ɗaya ga duk manyan ayyuka.

Gitlab yana ba ku damar ƙaddamar da Gitlab Runners da yawa da aka rarraba, waɗanda kawai za su ɗauki duk ayyuka ɗaya bayan ɗaya a cikin tsari mai ruɗani da gudanar da su.

Don guje wa matsalolin gida, mun iyakance rukunin ayyukanmu zuwa Gitlab Runner guda ɗaya, wanda ke jure juzu'in mu ba tare da matsala ba.

Mun matsar da nginx-proxy zuwa wani rubutun ƙaddamarwa daban kuma mun rubuta grid na duk ayyukan da ke cikinsa.

Ayyukanmu yana da grid ɗaya, kuma ma'auni yana da grid da yawa bisa sunayen aikin. Yana iya ƙara wakilta ta sunayen yanki.

Buƙatunmu sun zo ta hanyar yanki akan tashar jiragen ruwa 80 kuma an warware su zuwa rukunin kwantena waɗanda ke hidimar wannan yanki.

Haɓakawa da tsarin gwaji tare da Docker da Gitlab CI

Wadanne matsaloli aka samu? Wannan shine abin da duk kwantena ke gudana azaman tushen ta tsohuwa. Wannan shine tushen tushen tushen tushen tsarin.

Koyaya, idan kun shigar da akwati, zai zama tushen kuma fayil ɗin da muka ƙirƙira a cikin wannan akwati yana karɓar haƙƙin tushen.

Idan mai haɓakawa ya shiga cikin akwati kuma ya yi wasu umarni a can waɗanda suka samar da fayiloli, sannan ya bar kwandon, to a cikin kundin aiki yana da fayil ɗin da ba ya da damar shiga.

Ta yaya za a magance wannan? Kuna iya ƙara masu amfani waɗanda za su kasance a cikin akwati.

Wadanne matsaloli suka taso lokacin da muka kara mai amfani?

Lokacin ƙirƙirar mai amfani, ID ɗin ƙungiyar (UID) da ID ɗin mai amfani (GID) galibi basa daidaitawa.

Don magance wannan matsala a cikin akwati muna amfani da masu amfani da ID 1000.

A cikin yanayinmu, wannan ya zo daidai da gaskiyar cewa kusan duk masu haɓakawa suna amfani da Ubuntu OS. Kuma a cikin Ubuntu OS mai amfani na farko yana da ID 1000.

Haɓakawa da tsarin gwaji tare da Docker da Gitlab CI

Muna da tsare-tsare?

Sake karanta takaddun Docker. Aikin yana haɓakawa sosai, takaddun yana canzawa. Bayanan da aka samu watanni biyu ko uku da suka gabata sannu a hankali na zama tsufa.

Wasu daga cikin matsalolin da muka warware wataƙila an riga an magance su ta daidaitattun hanyoyi.

Ina so in ci gaba da tafiya kai tsaye zuwa ƙungiyar makaɗa.

Misali ɗaya shine tsarin ginanniyar Docker da ake kira Docker Swarm, wanda ke fitowa daga cikin akwatin. Ina so in ƙaddamar da wani abu a cikin samarwa dangane da fasahar Docker Swarm.

Kwantenan zubewa yana sa yin aiki tare da gungumen azaba. Yanzu an ware gundumomin. Suna warwatse a cikin kwantena. Ɗaya daga cikin ayyukan shine samar da dama ga rajistan ayyukan ta hanyar haɗin yanar gizo.

Haɓakawa da tsarin gwaji tare da Docker da Gitlab CI

source: www.habr.com

Add a comment