Jagora zuwa CI/CD a GitLab don (kusan) cikakken mafari
Ko yadda ake samun kyawawan bajoji don aikinku a cikin maraice ɗaya na annashuwa
Wataƙila, kowane mai haɓakawa wanda ke da aƙalla aikin dabba ɗaya a wani lokaci yana da ƙaiƙayi game da kyawawan bajoji tare da statuses, ɗaukar hoto, nau'ikan fakiti a cikin nuget ... Kuma wannan ƙaiƙayi ya sa na rubuta wannan labarin. A cikin shirye-shiryen rubuta shi, na sami wannan kyawun a cikin ɗayan ayyukana:
Wannan labarin zai rufe ainihin saitin ci gaba da haɗin kai da bayarwa don aikin ɗakin karatu na .Net Core a GitLab, buga takardu zuwa GitLab Shafukan da aika fakitin da aka tattara zuwa abinci mai zaman kansa a Azure DevOps.
An yi amfani da lambar VS azaman yanayin haɓakawa tare da haɓakawa GitLab Aikin Aiki (don inganta fayil ɗin saituna kai tsaye daga yanayin haɓakawa).
Gabatarwa a takaice
CD - shin lokacin da kuka tura kawai, kuma komai ya riga ya faɗi akan abokin ciniki?
Menene CI / CD kuma me yasa kuke buƙatar shi - zaku iya google shi cikin sauƙi. Nemo cikakkun bayanai akan daidaita bututun mai a GitLab kuma mai sauki. Anan zan taƙaice kuma, idan zai yiwu, ba tare da lahani ba ya bayyana tsarin tsarin daga kallon idon tsuntsu:
mai haɓakawa ya aika da alƙawarin zuwa ma'ajiyar, ya ƙirƙiri buƙatun haɗin kai ta gidan yanar gizon, ko kuma ta wata hanya, a bayyane ko a fakaice fara bututun,
An zaɓi duk ayyuka daga tsarin, yanayin da ke ba da damar ƙaddamar da su a cikin mahallin da aka ba,
ana tsara ayyuka gwargwadon matakansu.
ana aiwatar da matakai bi da bi - watau. a layi daya an kammala dukkan ayyukan wannan mataki,
idan matakin ya gaza (watau akalla daya daga cikin ayyukan matakin ya kasa), bututun ya tsaya (kusan ko da yaushe),
idan an kammala dukkan matakai cikin nasara, ana ɗaukar bututun mai nasara.
Don haka, muna da:
bututun saitin ayyuka ne da aka tsara cikin matakai wanda zaku iya tarawa, gwadawa, lambar fakiti, tura taron da aka gama zuwa sabis na girgije, da sauransu.
mataki (mataki) - Ƙungiyar ƙungiyar bututu, ta ƙunshi ɗawainiya 1+,
aiki (aiki) rukunin aiki ne a cikin bututun mai. Ya ƙunshi rubutun (wajibi), yanayin ƙaddamarwa, saiti don bugawa / adana kayan tarihi, da ƙari mai yawa.
Saboda haka, aikin lokacin da aka kafa CI / CD ya sauko don ƙirƙirar jerin ayyuka waɗanda ke aiwatar da duk ayyukan da suka dace don haɗawa, gwaji da buga lambar da kayan tarihi.
Kafin farawa: me yasa?
Me yasa Gitlab?
Domin lokacin da ake buƙatar ƙirƙirar ɗakunan ajiya masu zaman kansu don ayyukan dabbobi, an biya su akan GitHub, kuma na kasance m. Ma'ajiyoyin sun zama 'yanci, amma a yanzu wannan bai isa ba dalili na ƙaura zuwa GitHub.
Me yasa ba bututun Azure DevOps ba?
Domin saitin yana da sauƙi - ba kwa buƙatar sanin layin umarni. Haɗin kai tare da masu samar da git na waje - a cikin dannawa biyu, shigo da maɓallan SSH don aikawa zuwa ma'ajiyar - kuma, ana daidaita bututun cikin sauƙi koda ba tare da samfuri ba.
Matsayin farawa: abin da kuke da shi da abin da kuke so
Muna da:
wurin ajiya a GitLab.
Muna so:
haɗuwa ta atomatik da gwaji don kowane buƙatun haɗin kai,
fakitin gini don kowane buƙatun haɗaka da turawa zuwa ga maigidan, muddin akwai takamaiman layi a cikin saƙon ƙaddamarwa,
aika fakitin da aka tattara zuwa abinci mai zaman kansa a cikin Azure DevOps,
taro na takardu da bugawa a cikin Shafukan GitLab,
bugu!11
Abubuwan buƙatun da aka bayyana sun dace da dabi'a cikin ƙirar bututun mai zuwa:
Mataki na 1 - taro
Muna tattara lambar, buga fayilolin fitarwa azaman kayan tarihi
Mataki na 2 - gwaji
Muna karɓar kayan tarihi daga matakin ginin, gudanar da gwaje-gwaje, tattara bayanan ɗaukar hoto
Mataki na 3 - Gabatarwa
Aiki 1 - Gina kunshin nuget kuma aika shi zuwa Azure DevOps
Aiki 2 - muna tattara rukunin yanar gizon daga xmldoc a cikin lambar tushe kuma mu buga shi a Shafukan GitLab
Lokacin da ka danna maɓallin Ƙirƙiri, za a ƙirƙira aikin kuma za a tura ka zuwa shafinsa. A wannan shafin, zaku iya musaki abubuwan da ba dole ba ta hanyar zuwa saitunan aikin (ƙananan hanyar haɗi a cikin jeri a hagu -> Bayani -> Katange Sabis na Azure DevOps)
Je zuwa Halaye, danna Ƙirƙiri ciyarwa
Shigar da sunan tushen
Zaɓi ganuwa
Cire alamar akwatin Haɗa fakiti daga tushen jama'a gama gari, don kada tushen ya juya zuwa juji nuget clone
Danna Haɗa don ciyarwa, zaɓi Kayayyakin Kayayyakin Kayayyakin Kayayyakin, kwafi Source daga Katangar Saitin Inji
Je zuwa saitunan asusu, zaɓi Alamar Samun dama ta Keɓaɓɓu
Ƙirƙiri sabon alamar shiga
Suna - sabani
Ƙungiya - halin yanzu
Yana aiki har tsawon shekara 1
Iyakar - Marufi/Karanta & Rubuta
Kwafi alamar da aka ƙirƙira - bayan an rufe taga modal, ƙimar ba za ta kasance ba
Jeka saitunan ma'ajin a GitLab, zaɓi saitunan CI / CD
Fadada toshe Variables kuma ƙara sabo
Suna - duk wanda ba tare da sarari ba (zai kasance a cikin harsashin umarni)
Ƙimar ita ce alamar samun dama daga mataki na 9
Zaɓi canjin abin rufe fuska
Wannan yana kammala tsarin saiti.
Ana shirya tsarin tsari
Ta hanyar tsoho, fayil ɗin da ake amfani da shi don saita CI/CD a cikin GitLab shine .gitlab-ci.yml daga tushen ma'ajiyar. Kuna iya saita hanyar al'ada zuwa wannan fayil a cikin saitunan ma'ajin, amma a wannan yanayin ba lallai bane.
Kamar yadda kake gani daga tsawo, fayil ɗin yana ƙunshe da tsari a cikin tsari YAML. Takardun ya bayyana dalla-dalla abin da maɓallai za a iya ƙunshe a saman matakin daidaitawa, kuma a cikin kowane matakan gida.
Da farko, bari mu ƙara hanyar haɗi zuwa hoton docker a cikin fayil ɗin daidaitawa, wanda za a aiwatar da ayyukan. Don yin wannan mun sami .Net Core images a kan Docker Hub. A GitHub akwai cikakken jagora akan wane hoton da za a zaɓa don ayyuka daban-daban. Hoto tare da .Net Core 3.1 ya dace da mu don ginawa, don haka jin daɗin ƙara layin farko zuwa daidaitawa.
image: mcr.microsoft.com/dotnet/core/sdk:3.1
Yanzu, lokacin da kuka fara bututun, za a zazzage hoton da aka kayyade daga wurin ajiyar hoton Microsoft, inda za a aiwatar da dukkan ayyuka daga tsarin.
Mataki na gaba shine ƙarawa mataki's. Ta hanyar tsoho, GitLab yana bayyana matakai 5:
.pre - za'ayi zuwa duk matakai,
.post - an yi bayan duk matakai,
build - na farko bayan .pre mataki,
test - kashi na biyu,
deploy - mataki na uku.
Babu wani abu da zai hana ku bayyana su a sarari, duk da haka. Tsarin da aka jera matakan yana shafar tsarin da aka yi su. Don cikawa, bari mu ƙara zuwa daidaitawa:
stages:
- build
- test
- deploy
Don gyara kuskure, yana da ma'ana don samun bayanai game da yanayin da ake aiwatar da ayyukan. Bari mu ƙara jerin umarni na duniya waɗanda za a aiwatar da su kafin kowane ɗawainiya da su before_script:
before_script:
- $PSVersionTable.PSVersion
- dotnet --version
- nuget help | select-string Version
Ya rage don ƙara aƙalla ɗawainiya ta yadda lokacin da aka aika ayyukan, bututun zai fara. A yanzu, bari mu ƙara aikin fanko don nunawa:
dummy job:
script:
- echo ok
Mun fara tabbatarwa, samun saƙo cewa komai yana da kyau, ƙaddamarwa, turawa, duba sakamakon akan shafin ... Kuma muna samun kuskuren rubutun - bash: .PSVersion: command not found. wtf ba?
Komai yana da ma'ana - ta tsohuwa, masu gudu (masu alhakin aiwatar da rubutun ayyuka da GitLab ya bayar) suna amfani da su. bash don aiwatar da umarni. Kuna iya gyara wannan ta hanyar ƙayyadaddun ƙayyadaddun ayyuka a cikin bayanin aikin abin da ya kamata mai aiwatar da bututun mai ya samu:
dummy job on windows:
script:
- echo ok
tags:
- windows
Mai girma! Yanzu dai bututun yana gudana.
Mai karatu mai hankali, bayan maimaita matakan da aka nuna, zai lura cewa an kammala aikin a cikin mataki test, kodayake ba mu bayyana matakin ba. Kamar yadda kuke tsammani test shine matakin tsoho.
Bari mu ci gaba da ƙirƙirar kwarangwal ɗin daidaitawa ta ƙara duk ayyukan da aka bayyana a sama:
build job:
script:
- echo "building..."
tags:
- windows
stage: build
test and cover job:
script:
- echo "running tests and coverage analysis..."
tags:
- windows
stage: test
pack and deploy job:
script:
- echo "packing and pushing to nuget..."
tags:
- windows
stage: deploy
pages:
script:
- echo "creating docs..."
tags:
- windows
stage: deploy
Mun samu ba musamman aiki, amma duk da haka daidai bututu.
Saita abubuwan jan hankali
Saboda gaskiyar cewa ba a kayyade masu tacewa don kowane ɗayan ayyukan ba, bututun zai yi cikakke aiwatar da duk lokacin da aka aika aika aika zuwa ma'ajiyar. Tunda wannan ba shine halin da ake so gabaɗaya ba, za mu saita masu tacewa don ayyuka.
Ana iya daidaita matattarar ta cikin tsari biyu: kawai/sai dai и dokoki. A takaice, only/except yana ba ku damar saita masu tacewa ta hanyar faɗakarwa (merge_request, alal misali - yana tsara aikin da za a aiwatar a duk lokacin da aka ƙirƙiri buƙatun haɗin kai kuma duk lokacin da aka aika zuwa reshe wanda shine tushen a cikin buƙatar haɗin gwiwa) da sunayen reshe (ciki har da yin amfani da maganganu na yau da kullum); rules yana ba ku damar tsara saitin yanayi kuma, ba zaɓi ba, canza yanayin aiwatar da aikin dangane da nasarar ayyukan da suka gabata (when a cikin GitLab CI/CD).
Bari mu tuna da saitin buƙatun - taro da gwaji kawai don buƙatun haɗuwa, marufi da aikawa zuwa Azure DevOps - don haɗa buƙatun da turawa ga maigidan, tsararru na takardu - don turawa ga maigidan.
Da farko, bari mu saita aikin gina lambar ta ƙara ƙa'idar da ke ƙonewa kawai akan buƙatar haɗuwa:
build job:
# snip
only:
- merge_request
Yanzu bari mu saita aikin marufi don kunna wuta akan buƙatun haɗaka kuma ƙara sadaukarwa ga maigidan:
A karkashin yanayi, zaka iya amfani masu canji da aka jera a nan; dokoki rules rashin jituwa da dokoki only/except.
Yana Haɓaka Ajiye Kayan Aikin Gaggawa
Lokacin aiki build job za mu sami gine-ginen kayan tarihi waɗanda za a iya sake amfani da su a ayyuka na gaba. Don yin wannan, kuna buƙatar ƙara hanyoyin zuwa tsarin aiki, fayilolin da kuke buƙatar adanawa da sake amfani da su a cikin ayyuka masu zuwa, zuwa maɓallin. artifacts:
Idan wani aiki ya haifar da kayan tarihi, to kowane aiki na gaba zai iya samun damar yin amfani da su - za su kasance tare da hanyoyi guda ɗaya dangane da tushen ma'ajin da aka tattara daga ainihin aikin. Hakanan ana samun kayan tarihi don saukewa akan gidan yanar gizon.
Yanzu da muna da tsarin daidaitawa a shirye (kuma an gwada), za mu iya ci gaba zuwa ainihin rubuta rubutun don ayyuka.
Muna rubuta rubutun
Wataƙila, sau ɗaya a wani lokaci, a cikin galaxy mai nisa, mai nisa, ayyukan gine-gine (ciki har da waɗanda ke kan .net) daga layin umarni yana da zafi. Yanzu zaku iya ginawa, gwadawa da buga aikin cikin ƙungiyoyi 3:
dotnet build
dotnet test
dotnet pack
A zahiri, akwai wasu nuances saboda waɗanda za mu rikitar da umarni kaɗan.
Muna son ginin saki, ba ginin gyara kuskure ba, don haka muna ƙara zuwa kowane umarni -c Release
Lokacin gwaji, muna son tattara bayanan ɗaukar hoto, don haka muna buƙatar haɗa mai nazarin ɗaukar hoto a cikin ɗakunan karatu na gwaji:
Ya kamata a ƙara kunshin zuwa duk ɗakunan karatu na gwaji coverlet.msbuild: dotnet add package coverlet.msbuild daga babban fayil ɗin aikin
Ƙara zuwa umarnin gudu na gwaji /p:CollectCoverage=true
GitLab yana ba ku damar ƙididdige magana ta yau da kullun don samun ƙididdiga, wanda za'a iya samu ta hanyar lamba. An ƙayyade furci na yau da kullum a cikin saitunan ɗawainiya tare da maɓalli coverage; furucin dole ne ya ƙunshi rukunin kama, wanda ƙimarsa za a canza shi zuwa lamba:
test and cover job:
# snip
coverage: /|s*Totals*|s*(d+[,.]d+%)/
Anan muna samun ƙididdiga daga layi mai jimlar ɗaukar hoto.
Muna buga fakiti da takardu
Dukkan ayyukan biyu an tsara su ne don mataki na ƙarshe na bututun mai - tun lokacin da taro da gwaje-gwaje sun wuce, za mu iya raba abubuwan da muke faruwa tare da duniya.
Da farko, la'akari da bugawa zuwa tushen fakitin:
Idan aikin ba shi da fayil ɗin sanyi na nuget (nuget.config), ƙirƙirar sabo: dotnet new nugetconfig
Don me: Hoton na iya zama ba shi da damar yin rubutu zuwa jeri na duniya (mai amfani da na'ura). Domin kada mu kama kurakurai, muna kawai ƙirƙirar sabon tsarin gida kuma muyi aiki da shi.
Muna aika duk fakiti daga kundin adireshi na yanzu, don haka *.nupkg.
name - daga mataki na sama.
key - kowane layi. A cikin Azure DevOps, a cikin Haɗin zuwa taga ciyarwa, layin misali koyaushe ne az.
-skipduplicate - lokacin ƙoƙarin aika kunshin da ya riga ya kasance ba tare da wannan maɓalli ba, tushen zai dawo da kuskure 409 Conflict; tare da maɓalli, za a tsallake aikawa.
Yanzu bari mu saita ƙirƙirar takaddun:
Don farawa, a cikin ma'ajiya, a cikin babban reshe, mun fara aikin docfx. Don yin wannan, kuna buƙatar gudanar da umarni daga tushen docfx init kuma ta hanyar haɗin gwiwa saita maɓalli masu mahimmanci don takardun gini. Cikakken bayanin mafi ƙarancin saitin aikin a nan.
Lokacin kafawa, yana da mahimmanci a saka kundin adireshin fitarwa ..public - GitLab ta tsohuwa yana ɗaukar abubuwan da ke cikin babban fayil ɗin jama'a a tushen ma'ajiyar azaman tushen Shafukan. Domin aikin zai kasance a cikin babban fayil ɗin da aka ajiye a cikin ma'ajin - ƙara hanyar fita zuwa mataki na gaba zuwa hanya.
Bari mu tura canje-canje zuwa GitLab.
Ƙara ɗawainiya zuwa tsarin bututun mai pages (Kalmar da aka keɓe don ayyukan bugu na rukunin yanar gizo a cikin Shafukan GitLab):
Rubutun:
nuget install docfx.console -version 2.51.0 - shigar da docfx; An ba da sigar don tabbatar da cewa hanyoyin shigar da kunshin daidai ne.
A baya can, lokacin da ake kafa aiki, na ayyana tushen lambar don takardu azaman fayil ɗin mafita. Babban hasara shi ne cewa an ƙirƙiri takardu don ayyukan gwaji. Idan wannan bai zama dole ba, zaku iya saita wannan ƙimar zuwa kumburi metadata.src:
metadata.src.src: "../" - tafi mataki ɗaya sama dangane da wurin docfx.json, saboda a cikin alamu, bincika bishiyar directory baya aiki.
metadata.src.files: ["**/*.csproj"] - tsarin duniya, muna tattara duk ayyukan C # daga duk kundayen adireshi.
metadata.src.exclude: ["*.tests*/**"] - tsarin duniya, ware komai daga manyan fayiloli tare da .tests A cikin take
Canji
Za'a iya ƙirƙirar wannan tsari mai sauƙi a cikin rabin sa'a da kofuna biyu na kofi, wanda zai ba ku damar bincika kowane buƙatun haɗin kai kuma aika shi zuwa ga maigidan cewa ana tattara lambar kuma gwaje-gwajen suna wucewa, suna haɗa sabon. kunshin, sabunta takaddun da kuma faranta ido tare da kyawawan bajoji a cikin aikin README.
Karshe .gitlab-ci.yml
image: mcr.microsoft.com/dotnet/core/sdk:3.1
before_script:
- $PSVersionTable.PSVersion
- dotnet --version
- nuget help | select-string Version
stages:
- build
- test
- deploy
build job:
stage: build
script:
- dotnet build -c Release
tags:
- windows
only:
- merge_requests
- master
artifacts:
paths:
- your/path/to/binaries
test and cover job:
stage: test
tags:
- windows
script:
- dotnet test -c Release /p:CollectCoverage=true
coverage: /|s*Totals*|s*(d+[,.]d+%)/
only:
- merge_requests
- master
pack and deploy job:
stage: deploy
tags:
- windows
script:
- dotnet pack -c Release -o .
- dotnet new nugetconfig
- nuget sources add -name feedName -source https://pkgs.dev.azure.com/your-organization/_packaging/your-feed/nuget/v3/index.json -username your-organization -password $nugetFeedToken -configfile nuget.config -StorePasswordInClearText
- nuget push -source feedName -skipduplicate -apikey az *.nupkg
only:
- master
pages:
tags:
- windows
stage: deploy
script:
- nuget install docfx.console -version 2.51.0
- $env:path = "$env:path;$($(get-location).Path)"
- .docfx.console.2.51.0toolsdocfx.exe .docfxdocfx.json
artifacts:
paths:
- public
only:
- master
Magana akan baji
Don su ne aka fara komai!
Ana samun baji tare da ma'aunin bututun bututu da murfin lamba a cikin GitLab a cikin saitunan CI/CD a cikin toshe bututun Gtntral:
Na ƙirƙiri lamba tare da hanyar haɗi zuwa takaddun akan dandamali Garkuwa.io - komai yana da sauƙi a can, zaku iya ƙirƙirar alamar ku kuma karɓe ta ta amfani da buƙata.
![Пример с Shields.io](https://img.shields.io/badge/custom-badge-blue)
Azure DevOps Artifacts kuma yana ba ku damar ƙirƙirar baji don fakitin da ke nuna sabon sigar. Don yin wannan, a cikin tushen akan gidan yanar gizon Azure DevOps, kuna buƙatar danna kan Ƙirƙiri lamba don fakitin da aka zaɓa kuma kwafi alamar alamar:
Ƙara kyau
Muna haskaka ɓangarorin daidaitawa gama gari
Yayin rubuta tsari da bincike ta cikin takaddun, na ci karo da wani abu mai ban sha'awa na YAML - sake amfani da gutsuttsura.
Kamar yadda kuke gani daga saitunan ɗawainiya, duk suna buƙatar alamar windows a mai gudu, kuma ana haifar da su lokacin da aka aika buƙatar haɗakarwa zuwa maigidan/halitta (sai dai takaddun shaida). Bari mu ƙara wannan zuwa guntun da za mu sake amfani da shi:
Kuma yanzu za mu iya saka guntun da aka bayyana a baya a cikin bayanin aikin:
build job:
<<: *common_tags
<<: *common_only
Dole ne sunayen guntu su fara da wani lokaci don gujewa fassara su azaman ɗawainiya.
Sigar fakitin
Lokacin ƙirƙirar kunshin, mai tarawa yana duba madaidaicin layin umarni, kuma a cikin rashi, fayilolin aikin; lokacin da ya sami kumburin Sigar, yana ɗaukar ƙimarsa azaman sigar fakitin da ake ginawa. Ya bayyana cewa don gina kunshin tare da sabon sigar, kuna buƙatar ko dai sabunta shi a cikin fayil ɗin aikin ko wuce shi azaman gardamar layin umarni.
Bari mu ƙara ƙarin jerin buri guda ɗaya - bari ƙananan lambobi biyu a cikin sigar su zama shekara da gina ranar fakitin, kuma a ƙara juzu'in farko. Tabbas, zaku iya ƙara wannan bayanan zuwa fayil ɗin aikin kuma bincika kafin kowane ƙaddamarwa - amma kuna iya yin shi a cikin bututun, tattara sigar fakitin daga mahallin kuma ku wuce ta hanyar gardamar layin umarni.
Mu yarda cewa idan sakon ya ƙunshi layi kamar release (v./ver./version) <version number> (rev./revision <revision>)?, to, za mu ɗauki nau'in kunshin daga wannan layin, ƙara shi tare da kwanan wata kuma mu wuce shi azaman hujja ga umarnin. dotnet pack. Idan babu layi, kawai ba za mu tattara kunshin ba.
Rubutun mai zuwa yana magance wannan matsala:
# регулярное выражение для поиска строки с версией
$rx = "releases+(v.?|ver.?|version)s*(?<maj>d+)(?<min>.d+)?(?<rel>.d+)?s*((rev.?|revision)?s+(?<rev>[a-zA-Z0-9-_]+))?"
# ищем строку в сообщении коммита, передаваемом в одной из предопределяемых GitLab'ом переменных
$found = $env:CI_COMMIT_MESSAGE -match $rx
# совпадений нет - выходим
if (!$found) { Write-Output "no release info found, aborting"; exit }
# извлекаем мажорную и минорную версии
$maj = $matches['maj']
$min = $matches['min']
# если строка содержит номер релиза - используем его, иначе - текущий год
if ($matches.ContainsKey('rel')) { $rel = $matches['rel'] } else { $rel = ".$(get-date -format "yyyy")" }
# в качестве номера сборки - текущие месяц и день
$bld = $(get-date -format "MMdd")
# если есть данные по пререлизной версии - включаем их в версию
if ($matches.ContainsKey('rev')) { $rev = "-$($matches['rev'])" } else { $rev = '' }
# собираем единую строку версии
$version = "$maj$min$rel.$bld$rev"
# собираем пакеты
dotnet pack -c Release -o . /p:Version=$version
Ƙara rubutun zuwa ɗawainiya pack and deploy job kuma ku kiyaye taron fakiti sosai a gaban wata kirtani da aka bayar a cikin saƙon ƙaddamarwa.
Jimlar
Bayan shafe kusan rabin sa'a ko sa'a guda rubuta tsarin daidaitawa, yin gyara a cikin wutar lantarki na gida kuma, mai yiwuwa, wasu ƙaddamar da ba su yi nasara ba, mun sami tsari mai sauƙi don sarrafa ayyukan yau da kullun.
ganowa ta atomatik, ginawa, gwadawa, turawa, da saka idanu akan aikace-aikacenku
Yanzu shirye-shiryen shine saita bututu don tura aikace-aikace zuwa Azure, ta amfani da Pulumi da kuma tantance yanayin da ake niyya ta atomatik, wanda za a rufe a labarin na gaba.