Gwajin lodi azaman sabis na CI don masu haɓakawa

Gwajin lodi azaman sabis na CI don masu haɓakawa

Ɗaya daga cikin matsalolin da masu sayar da kayan masarufi da yawa ke fuskanta ita ce kwafin cancantar injiniyoyi - masu haɓakawa, masu gwadawa, da masu kula da kayayyakin more rayuwa - akan kusan kowace ƙungiya. Wannan kuma ya shafi injiniyoyi masu tsada - kwararru a fannin gwajin kaya.

Maimakon yin ayyukansu kai tsaye da yin amfani da ƙwarewarsu ta musamman don gina tsarin gwajin nauyi, zaɓi hanya, ma'auni mafi kyau da rubuta autotest daidai da bayanan martaba, injiniyoyi galibi dole ne su tura kayan aikin gwaji daga karce, saita kayan aikin lodi, da saka su. kansu a cikin tsarin CI, kafa sa ido da buga rahotanni.

Kuna iya nemo mafita ga wasu matsalolin ƙungiya a cikin gwaji waɗanda muke amfani da su a Fasaha mai Kyau a ciki wani labarin. Kuma a cikin wannan, zan yi magana game da yiwuwar haɗawa da gwaje-gwajen kaya a cikin bututun CI na kowa ta amfani da manufar "gwajin gwaji a matsayin sabis" (gwajin gwaji azaman sabis). Za ku koyi yadda kuma waɗanne hotunan docker na tushen kaya za a iya amfani da su a cikin bututun CI; yadda ake haɗa tushen kaya zuwa aikin CI ɗinku ta amfani da samfurin gini; abin da bututun demo yayi kama don gudanar da gwaje-gwajen lodi da buga sakamakon. Labarin na iya zama da amfani ga injiniyoyin gwajin software da injiniyoyi masu sarrafa kansa a cikin CI waɗanda ke tunanin gine-ginen tsarin ɗaukar nauyi.

Ma'anar ma'anar

Manufar gwajin lodi azaman sabis yana nuna ikon haɗa kayan aikin kaya Apache JMeter, Yandex.Tank da tsarin ku a cikin tsarin haɗin kai na sabani. demo zai kasance na GitLab CI, amma ka'idodin gama gari ne ga duk tsarin CI.

Gwajin lodi azaman sabis sabis ne na tsakiya don gwajin kaya. Ana gudanar da gwaje-gwajen lodi a cikin wuraren waha na wakili, ana buga sakamakon ta atomatik a cikin GitLab Pages, Influx DB da Grafana ko a cikin tsarin bayar da rahoton gwaji (TestRail, ReportPortal, da sauransu). Ana aiwatar da aiki da kai da sikeli a sauƙaƙe-ta hanyar ƙarawa da daidaita samfurin gitlab-ci.yml na yau da kullun a cikin aikin GitLab CI.

Amfanin wannan hanyar ita ce cewa dukkanin kayan aikin CI, masu ɗaukar kaya, hotunan docker na tushen kaya, gwajin bututun, da kuma rahoton bugu ana kiyaye su ta hanyar sashin sarrafa kansa ( injiniyoyin DevOps), yayin da injiniyoyin gwaji na iya mai da hankali kan ƙoƙarinsu kan haɓaka gwaji. da kuma nazarin sakamakonsu, ba tare da magance matsalolin ababen more rayuwa ba.

Don sauƙin bayanin, za mu ɗauka cewa aikace-aikacen da aka yi niyya ko uwar garken da ke ƙarƙashin gwaji an riga an tura su kuma an tsara su a gaba (ana iya amfani da rubutun atomatik a Python, SaltStack, Mai yiwuwa, da sauransu don wannan). Sannan gaba dayan manufar gwajin lodi a matsayin sabis ya dace da matakai uku: shirye-shirye, gwaji, buga rahotanni. Ƙarin cikakkun bayanai akan zane (duk hotuna ana iya dannawa):

Gwajin lodi azaman sabis na CI don masu haɓakawa

Ma'anoni na asali da ma'anoni a gwajin kaya

Lokacin gudanar da gwaje-gwajen lodi, muna ƙoƙarin yin riko da Matsayin ISTQB da hanyoyin, yi amfani da ma'auni masu dacewa da matakan da aka ba da shawarar. Zan ba da taƙaitaccen jerin mahimman ra'ayoyi da ma'anoni a gwajin lodi.

Wakilin kaya - injin kama-da-wane wanda za'a ƙaddamar da aikace-aikacen - tushen kayan aiki (Apache JMeter, Yandex.Tank ko nau'in nau'in nauyin da aka rubuta da kansa).

Gwajin burin (manufa) - uwar garken ko aikace-aikacen da aka shigar akan uwar garken da za a yi lodi.

Yanayin gwaji (hardar gwaji) - saitin matakan daidaitawa: ayyukan mai amfani da halayen da ake tsammanin ga waɗannan ayyukan, tare da ƙayyadaddun buƙatun cibiyar sadarwa da martani, dangane da ƙayyadaddun sigogi.

Fayil ko tsarin kaya (bayanin martaba) - a cikin Hanyar ISTQB (Sashe na 4.2.4, shafi na 43) bayanan martaba suna bayyana ma'auni waɗanda ke da mahimmanci don gwaji na musamman da zaɓuɓɓuka don canza sigogin kaya yayin gwajin. Kuna iya ganin misalan bayanan martaba a cikin adadi.

Gwajin lodi azaman sabis na CI don masu haɓakawa

Gwaji - rubutun tare da ƙayyadaddun saiti na sigogi.

Tsarin gwaji (tsarin gwaji) - saitin gwaje-gwaje da bayanin martaba.

Testran (testrun) - juzu'i ɗaya na gudanar da gwaji ɗaya tare da cikakken yanayin aikin da aka aiwatar da rahoton da aka karɓa.

Neman hanyar sadarwa (buƙatun) - Buƙatar HTTP da aka aika daga wakili zuwa manufa.

Martanin hanyar sadarwa (amsa) - Amsar HTTP da aka aika daga manufa zuwa wakili.
Lambar amsa HTTP (HTTP matsayi) - daidaitaccen lambar amsawa daga uwar garken aikace-aikacen.
Ma'amala shine cikakken sake zagayowar amsa buƙatu. Ana ƙidaya ma'amala daga farkon aika buƙatu (buƙatun) zuwa kammala karɓar amsa (amsa).

Matsayin ciniki - ko yana yiwuwa a samu nasarar kammala zagayowar amsa buƙatun. Idan akwai wani kuskure a cikin wannan sake zagayowar, to ana ɗaukar duk cinikin bai yi nasara ba.

Lokacin amsawa (latency) - lokacin daga ƙarshen aika buƙatun (buƙatun) zuwa farkon karɓar amsa (amsa).

Load da awo - halaye na sabis ɗin da aka ɗora da mai ɗaukar nauyi da aka ƙaddara a cikin gwajin gwaji.

Ma'auni na asali don auna sigogin kaya

Wasu daga cikin waɗanda aka fi amfani da su kuma ana ba da shawarar a cikin hanyoyin ISTQB (shafi na 36, ​​52) ana nuna ma'auni a teburin da ke ƙasa. An jera makamantan ma'auni na wakili da manufa akan layi ɗaya.

Ma'auni don wakilin kaya
Ma'auni na tsarin manufa ko aikace-aikacen da ake gwadawa ƙarƙashin kaya

Yawan  vCPU da ƙwaƙwalwar ajiya RAM,
faifai - "baƙin ƙarfe" halaye na wakili mai ɗaukar nauyi
CPU, Ƙwaƙwalwar ajiya, amfani da Disk - ƙarfin kuzari na CPU, ƙwaƙwalwar ajiya da ɗaukar faifai
a cikin gwajin gwaji. Yawancin lokaci ana auna su azaman kashi na
matsakaicin ƙimar da ake samu

hanyar sadarwa ta hanyar sadarwa (a kan wakili na kaya) - kayan aiki
cibiyar sadarwa a kan uwar garke,
inda aka shigar da wakilin kaya.
Yawancin lokaci ana auna su cikin bytes a sakan daya (bps)
hanyar sadarwa ta hanyar sadarwa(a kan manufa) - bandwidth na cibiyar sadarwa
akan uwar garken manufa. Yawancin lokaci ana auna su cikin bytes a sakan daya (bps)

Masu amfani da gaskiya- yawan masu amfani,
aiwatar da yanayin lodi da
kwaikwayon ayyukan mai amfani na ainihi
Halin masu amfani na zahiri, Wuce/Ba a yi nasara/Total - adadin nasara da
rashin nasarar matsayin masu amfani da kama-da-wane
don yanayin kaya, da adadin su duka.

Gabaɗaya ana tsammanin cewa duk masu amfani sun iya kammalawa
duk ayyukanku da aka ƙayyade a cikin bayanin martaba.
Duk wani kuskure yana nufin cewa ainihin mai amfani ba zai iya ba
warware matsalar ku lokacin aiki tare da tsarin

Bukatun dakika daya (minti)- adadin buƙatun hanyar sadarwa a sakan daya (ko minti).

Muhimmin sifa na wakili mai ɗaukar nauyi shine yawan buƙatun da zai iya samarwa.
A zahiri, wannan kwaikwayi ne na samun damar yin amfani da aikace-aikacen ta masu amfani da kama-da-wane
Amsoshi a cikin dakika (minti)
- adadin martanin hanyar sadarwa a cikin sakan daya (ko minti).

Muhimmin sifa na sabis ɗin manufa: nawa
samar da aika martani ga tambayoyi tare da
wakili loading

Matsayin amsa HTTP- adadin lambobin amsa daban-daban
daga uwar garken aikace-aikacen da wakilin kaya ya karɓa.
Misali, 200 OK yana nufin kira mai nasara,
da 404 - cewa ba a samo albarkatun ba

rashin laka (lokacin amsawa) - lokaci daga ƙarshe
aika buƙatu (buƙatu) kafin fara karɓar amsa (amsa).
Yawanci ana aunawa cikin millise seconds (ms)

Lokacin amsa ma'amala- lokacin cikakken ciniki guda ɗaya,
kammala sake zagayowar amsa buƙatun.
Wannan shine lokacin daga farkon aika buƙatar (buƙatun)
har sai an kammala karbar amsa (amsa).

Ana iya auna lokacin ciniki cikin daƙiƙa (ko mintuna)
ta hanyoyi da yawa: la'akari da mafi ƙarancin,
matsakaici, matsakaici kuma, alal misali, kashi 90th.
Mafi ƙanƙanta da matsakaicin karatu sun wuce gona da iri
matsayin aikin tsarin.
Kashi casa’in ne aka fi amfani da shi,
kamar yadda ya nuna yawancin masu amfani,
cikin kwanciyar hankali yana aiki a bakin kofa na aikin tsarin

Ma'amaloli a cikin dakika (minti) - adadin cikakke
ma'amaloli a cikin daƙiƙa guda (minti),
wato nawa aikace-aikacen ya iya karba kuma
aiwatar da buƙatun da fitar da martani.
A gaskiya ma, wannan shine abin da ake amfani da shi na tsarin

Matsayin ciniki , Wuce / Ba a yi nasara / Jima'i - lamba
nasara, rashin nasara da jimlar adadin ma'amaloli.

Ga masu amfani na gaske ba su yi nasara ba
da ma'amala za a zahiri nufi
rashin iya aiki tare da tsarin da ke ƙarƙashin kaya

Load Gwajin Tsarin Tsari

Manufar gwajin lodi abu ne mai sauƙi kuma ya ƙunshi manyan matakai guda uku, waɗanda na riga na ambata: Rahoton Shirya-Gwaji, wato, shirya makasudin gwaji da saita sigogi don tushen kaya, sannan aiwatar da gwajin nauyi kuma, a ƙarshe, samarwa da buga rahoton gwaji.

Gwajin lodi azaman sabis na CI don masu haɓakawa

Bayanan tsare-tsare:

  • QA.Tester kwararre ne a gwajin lodi,
  • Target shine aikace-aikacen manufa wanda kuke son sanin halayen sa a ƙarƙashin kaya.

Rarraba ƙungiyoyi, matakai da matakai a cikin zane

Matakai da matakai
Me ke faruwa
Menene a kofar shiga
Menene fitarwa

Shirya: mataki na shiri don gwaji

LoadParameters
Saita da farawa
mai amfani
load sigogi,
zabin awo da
gwajin shirin shiri
(Load profile)
Zaɓuɓɓukan al'ada don
farawa wakili mai kaya
Tsarin gwaji
Manufar gwaji

VM
Aiwatar da Cloud
injin kama-da-wane tare da
halaye da ake buƙata
Saitunan VM don wakilin kaya
Rubutun atomatik don
Halittar VM
An saita VM a ciki
girgije

Aika
OS saitin da shiri
yanayi don
kayan aiki wakili
Saitunan muhalli don
kaya wakili
Rubutun atomatik don
saitunan yanayi
Wurin da aka shirya:
OS, ayyuka da aikace-aikace,
wajibi ne don aiki
kaya wakili

LoadAgents
Shigarwa, daidaitawa da daidaitawa
wakili loading.
Ko zazzage hoton docker daga
tushen kaya da aka riga aka tsara
Load da hoton docker tushen tushe
(YAT, JM ko tsarin rubutun da kansa)
Saituna
kaya wakili
Saita kuma a shirye
don aiki mai ɗaukar nauyi

Gwaji: mataki na aiwatar da gwaje-gwajen kaya. Maɓuɓɓuka sune wakilai masu ɗaukar nauyi waɗanda aka tura a cikin wuraren waha na wakili don GitLab CI

load
Fara Wakilin Load
tare da zaɓin shirin gwaji
da kuma load sigogi
Zaɓuɓɓukan mai amfani
don farawa
kaya wakili
Tsarin gwaji
Manufar gwaji
Littattafan kisa
lodi gwaje-gwaje
Rukunin tsarin
Dynamics na canje-canje a cikin ma'auni na burin da wakili na kaya

Run Agents
Kisa Wakili
lodin rubutun gwaji
daidai da
load profile
Alamar Load Agent
don manufar gwaji
Tsarin gwaji
Manufar gwaji

rajistan ayyukan
Tarin rajistan ayyukan "danye".
lokacin gwajin lodi:
kayan aiki na kayan aiki,
yanayin maƙasudin gwajin
da VM da ke tafiyar da wakili

Littattafan kisa
lodi gwaje-gwaje
Rukunin tsarin

Matakan ƙira
Tattara ma'aunin "danye" yayin gwaji

Dynamics na canje-canje a ma'aunin manufa
da wakili na kaya

Rahoton: mataki na shirye-shiryen rahoton gwaji

Generator
An tattara aikin sarrafawa
loading tsarin da
tsarin kulawa "danye"
awo da logs
Samar da rahoto a cikin
sigar mutum mai karantawa
mai yiwuwa tare da abubuwa
manazarta
Littattafan kisa
lodi gwaje-gwaje
Rukunin tsarin
Dynamics na canje-canje a awo
manufa da kaya wakili
Gudanar da "raw" rajistan ayyukan
a tsarin da ya dace da
lodawa zuwa waje ajiya
Rahoton kaya a tsaye,
mutum-mai karantawa

buga
Buga rahoton
game da kaya
gwaji a waje
hidima
An sarrafa "danye"
rajistan ayyukan a cikin tsari mai dacewa
don saukewa zuwa waje
wuraren ajiya
Ajiye a waje
rahotannin ajiya akan
kaya, dace
don nazarin ɗan adam

Haɗa Tushen Load a cikin Samfurin CI

Mu ci gaba zuwa bangaren aiki. Ina so in nuna yadda akan wasu ayyuka a cikin kamfanin Fasaha masu inganci mun aiwatar da manufar gwajin lodi azaman sabis.

Na farko, tare da taimakon injiniyoyinmu na DevOps, mun ƙirƙiri ƙwararrun wakilai a GitLab CI don gudanar da gwaje-gwajen lodi. Don kada mu dame su a cikin samfura tare da wasu, kamar wuraren taro, mun ƙara tags ga waɗannan wakilai, tags: kaya. Kuna iya amfani da kowane alamar da za a iya fahimta. Suna tambaya a lokacin rajista GitLab CI Runners.

Yadda za a gano ikon da ake buƙata ta hardware? Halayen masu ɗaukar kaya - isassun adadin vCPU, RAM da Disk - ana iya ƙididdige su bisa ga gaskiyar cewa Docker, Python (na Yandex.Tank), wakilin GitLab CI, Java (na Apache JMeter) yakamata ya kasance yana gudana akan wakili. . Don Java a ƙarƙashin JMeter, ana kuma ba da shawarar yin amfani da mafi ƙarancin 512 MB na RAM kuma, a matsayin babba. 80% akwai ƙwaƙwalwar ajiya.

Don haka, dangane da ƙwarewarmu, muna ba da shawarar yin amfani da aƙalla 4 vCPUs, 4 GB RAM, 60 GB SSD don masu ɗaukar nauyi. An ƙaddara kayan aiki na katin cibiyar sadarwa bisa ga buƙatun bayanin martaba.

Mu galibi muna amfani da hanyoyin kaya guda biyu - Apache JMeter da hotuna docker Yandex.Tank.

Yandex.Tank kayan aiki ne na buɗe tushen daga Yandex don gwajin kaya. Tsarin gine-ginen sa na yau da kullun ya dogara ne akan babban aikin Fatalwa na buƙatun buƙatun HTTP asynchronous. Tankin yana da ginanniyar saka idanu akan albarkatun uwar garken da ke ƙarƙashin gwaji ta hanyar ka'idar SSH, na iya dakatar da gwajin ta atomatik a ƙarƙashin ƙayyadaddun yanayi, na iya nuna sakamakon duka a cikin na'ura wasan bidiyo da kuma a cikin nau'ikan hotuna, zaku iya haɗa samfuran ku. zuwa gare shi don fadada ayyuka. Af, mun yi amfani da Tank lokacin da ba tukuna ba. A cikin labarin "Yandex.Tank da sarrafa kayan gwaji» za ku iya karanta labarin yadda muka yi gwajin lodi da shi a cikin 2013 PT Application Firewall yana daya daga cikin kayayyakin kamfaninmu.

Apache JMeter kayan aikin gwaji ne na buɗaɗɗen kayan aiki daga Apache. Ana iya amfani da shi daidai da kyau don gwada aikace-aikacen gidan yanar gizo a tsaye da mai ƙarfi. JMeter yana goyan bayan ɗimbin ladabi da hanyoyin yin hulɗa tare da aikace-aikace: HTTP, HTTPS (Java, NodeJS, PHP, ASP.NET, da sauransu), Sabulu / REST Webservices, FTP, TCP, LDAP, SMTP(S), POP3( S) ) da IMAP(S), ma'ajin bayanai ta hanyar JDBC, na iya aiwatar da umarnin harsashi da aiki da abubuwan Java. JMeter yana da IDE don ƙirƙira, gyarawa da aiwatar da tsare-tsaren gwaji. Hakanan akwai CLI don aikin layin umarni akan kowane tsarin aiki da ya dace da Java (Linux, Windows, Mac OS X). Kayan aikin na iya samar da rahoton gwajin HTML a hankali.

Don sauƙin amfani a cikin kamfaninmu, don ikon masu gwadawa da kansu don canzawa da ƙara yanayin, mun yi gine-ginen hotunan docker na tushen kaya akan GitLab CI tare da bugawa zuwa na ciki. Docker rajista a Artifatory. Wannan yana sa ya zama mafi sauri da sauƙi haɗa su a cikin bututun don gwajin kaya. Yadda ake tura docker zuwa wurin yin rajista ta hanyar GitLab CI - duba umarnin.

Mun ɗauki wannan ainihin fayil ɗin docker don Yandex.Tank:

Dockerfile 
1 | FROM direvius/yandex-tank
2 | ENTRYPOINT [""]

Kuma ga Apache JMeter wannan:

Dockerfile 
1 | FROM vmarrazzo/jmeter
2 | ENTRYPOINT [""]

Kuna iya karanta yadda tsarin haɗin gwiwarmu na ci gaba yake aiki a cikin labarin "Yin aiki da kai na hanyoyin haɓakawa: yadda muka aiwatar da ra'ayoyin DevOps a Fasaha mai Kyau".

Samfura da bututu

Misali na samfuri don gudanar da gwaje-gwajen lodi yana samuwa a cikin aikin demo load. A readme fayil Kuna iya karanta umarnin don amfani da samfuri. A cikin samfurin kanta (fayil .gitlab-ci.yml) akwai bayanin kula game da abin da kowane mataki ke da alhakin.

Samfurin yana da sauƙin sauƙi kuma yana nuna matakai uku na gwajin nauyi da aka kwatanta a cikin zanen da ke sama: shirya, gwaji, da kuma buga rahotanni. Alhakin wannan horon: Shirya, Gwaji da Rahoton.

  1. Stage Yi ya kamata a yi amfani da su don tsara maƙasudin gwaji ko duba samuwarsu. Yanayi don tushen kaya baya buƙatar daidaita su, an riga an gina su azaman hotunan docker kuma an buga su a cikin rajistar docker: kawai saka sigar da ake so a matakin gwaji. Amma kuna iya sake gina su kuma kuyi hotunan ku da aka gyara.
  2. Stage gwajin da aka yi amfani da shi don tantance tushen lodi, gudanar da gwaje-gwaje, da kuma adana kayan gwaji. Kuna iya zaɓar kowane tushen kaya: Yandex.Tank, Apache JMeter, naku, ko duka tare. Don kashe tushen da ba dole ba, kawai yin sharhi ko share aikin. Wuraren shigarwa don tushen kaya:

    Lura: Ana amfani da samfurin daidaitawar taro don saita hulɗa tare da tsarin CI kuma baya nufin sanya dabaru na gwaji a ciki. Don gwaje-gwaje, an ƙayyade wurin shigarwa, inda aka samo rubutun bash mai sarrafawa. Hanyar gudanar da gwaje-gwaje, samar da rahotanni, da rubutun gwajin kansu dole ne injiniyoyin QA su aiwatar da su. A cikin demo, don duka hanyoyin ɗaukar nauyi, ana amfani da buƙatun babban shafi na Yandex azaman mafi sauƙin gwaji. Rubutun rubutu da sigogin gwaji suna cikin kundin adireshi ./gwaji.

  3. A mataki Rahoton kuna buƙatar bayyana yadda ake buga sakamakon gwajin da aka samu a matakin gwaji zuwa ma'ajiyar waje, misali, zuwa Shafukan GitLab ko tsarin bayar da rahoto na musamman. Shafukan GitLab na buƙatar littafin ./jama'a ya zama marar wofi kuma ya ƙunshi aƙalla fayil ɗin index.html bayan an gama gwaje-gwajen. Kuna iya karanta game da nuances na sabis na Shafukan GitLab. mahada.

    Misalan yadda ake fitarwa bayanai:

    Sanya umarnin saitin:

A cikin misalin demo, bututun mai tare da gwaje-gwajen kaya da hanyoyin kaya guda biyu (zaku iya kashe wanda ba dole ba) yayi kama da wannan:

Gwajin lodi azaman sabis na CI don masu haɓakawa

Apache JMeter na iya samar da rahoton HTML da kanta, don haka yana da fa'ida don adana shi a cikin Shafukan GitLab ta amfani da daidaitattun kayan aikin. Wannan shine yadda rahoton Apache JMeter yayi kama da:

Gwajin lodi azaman sabis na CI don masu haɓakawa

A cikin misalin demo na Yandex.Tank, kawai za ku gani rahoton rubutu na karya a cikin sashin don Shafukan GitLab. A lokacin gwaji, Tank na iya adana sakamakon zuwa bayanan InfluxDB, kuma daga can za a iya nuna su, alal misali, a cikin Grafana (ana yin saiti a cikin fayil ɗin. ./tests/misali-yandextank-test.yml). Ga yadda rahoton Tank ya dubi a Grafana:

Gwajin lodi azaman sabis na CI don masu haɓakawa

Takaitaccen

A cikin labarin, na yi magana game da manufar "gwajin kaya a matsayin sabis" (gwajin kaya azaman sabis). Babban ra'ayin shine a yi amfani da abubuwan more rayuwa na wuraren da aka riga aka tsara na masu ɗaukar nauyi, hotunan docker na tushen kaya, tsarin bayar da rahoto da bututun da ke haɗa su a cikin GitLab CI dangane da samfurin .gitlab-ci.yml mai sauƙi (misali. mahada). Duk wannan ana samun goyan bayan ƙaramin ƙungiyar injiniyoyin injiniyoyi kuma ana kwafi su bisa buƙatar ƙungiyoyin samfura. Ina fatan wannan zai taimaka muku wajen shiryawa da aiwatar da irin wannan makirci a cikin kamfanin ku. Na gode da kulawa!

PS Ina so in ce babban godiya ga abokan aiki na, Sergey Kurbanov da Nikolai Yusev, don taimakon fasaha tare da aiwatar da manufar gwajin kaya a matsayin sabis a cikin kamfaninmu.

marubucin: Timur Gilmullin - Mataimakin Shugaban Fasaha da Tsarukan Ci gaba (DevOps) a Fasaha mai Kyau

source: www.habr.com

Add a comment