Noma ungawathola kanjani amabheji amahle ephrojekthi yakho ngobusuku obubodwa bokubhala ngekhodi okukhululekile
Mhlawumbe, wonke umthuthukisi oneprojekthi okungenani eyodwa yesilwane ngesikhathi esithile unokuluma mayelana namabheji amahle anezimo, ukumbozwa kwekhodi, izinguqulo zephakheji ku-nuget ... Futhi lokhu kuluma kuholele ekutheni ngibhale lesi sihloko. Ngilungiselela ukuyibhala, ngithole lobu buhle kwenye yamaphrojekthi ami:
Lesi sihloko sizohlanganisa ukusethwa okuyisisekelo kokuhlanganiswa okuqhubekayo nokulethwa kwephrojekthi yelabhulali yekilasi le-Net Core ku-GitLab, ukushicilela imibhalo kumakhasi e-GitLab kanye nokuthumela amaphakheji aqoqiwe kokuphakelayo okuyimfihlo ku-Azure DevOps.
Ikhodi ye-VS enesandiso isetshenziswe njengendawo yokuthuthukisa
Isingeniso esifushane
I-CD yilapho usanda kuphusha, kodwa iklayenti selilahlekelwe yikho konke?
Iyini i-CI/CD futhi kungani idingeka? Ungayi-google kalula. Thola imibhalo ephelele yokusetha amapayipi ku-GitLab
- umthuthukisi uthumela isibopho endaweni yokugcina, udala isicelo sokuhlanganisa ngesayithi, noma ngenye indlela, iqala ngokusobala noma ngokungagunci,
- kusukela ekucushweni, yonke imisebenzi ikhethiwe izimo zayo ezivumela ukuthi yethulwe esimweni esithile,
- imisebenzi ihlelwa ngokwezigaba zayo,
- izigaba zenziwa ngokushintshana - i.e. ukufana yonke imisebenzi yalesi sigaba isiqediwe,
- uma isiteji sehluleka (okungukuthi, okungenani umsebenzi owodwa wesiteji wehluleka), ipayipi liyama (cishe njalo),
- uma zonke izigaba ziqedwa ngempumelelo, ipayipi libhekwa njengeliyimpumelelo.
Ngakho, sine:
- iphayiphi isethi yemisebenzi ehlelwe yaba izigaba lapho ungahlanganisa khona, uhlole, ikhodi yephakheji, uhambise umhlangano oqediwe kusevisi yefu, njll.
- isigaba (isigaba) - iyunithi yenhlangano yamapayipi, iqukethe umsebenzi ongu-1+,
- umsebenzi (Umsebenzi) iyunithi yomsebenzi osendleleni. Iqukethe iskripthi (isibopho), izimo zokuqalisa, izilungiselelo zokushicilela/ukugcinwa kwesikhashana kwezinto zobuciko, nokunye okuningi.
Kanjalo, umsebenzi lapho usetha i-CI/CD wehlela ekudaleni isethi yemisebenzi esebenzisa zonke izenzo ezidingekayo zokwakha, ukuhlola nokushicilela amakhodi nezinto zobuciko.
Ngaphambi kokuba siqale: kungani?
- Kungani i-Gitlab?
Ngoba lapho kudingekile ukudala amaqoqo ayimfihlo amaphrojekthi wezilwane ezifuywayo, akhokhelwa ku-GitHub, futhi ngangihaha. Izinqolobane sezikhululekile, kodwa kuze kube manje lesi akusona isizathu esanele sokuthi ngithuthele e-GitHub.
- Kungani kungenjalo i-Azure DevOps Pipelines?
Ngoba lapho ukulungiselelwa kuyisisekelo - ulwazi lomugqa womyalo aludingeki ngisho. Ukuhlanganiswa nabahlinzeki be-git bangaphandle - ngokuchofoza okumbalwa, ukungeniswa kokhiye be-SSH ukuthumela izibophezelo endaweni yokugcina - futhi, ipayipi lilungiswa kalula noma lingasuki kusifanekiso.
Isikhundla sokuqala: onakho nalokho okufunayo
Sine:
- indawo yokugcina ku-GitLab.
Sifuna:
- ukuhlanganisa okuzenzakalelayo nokuhlolwa kwesicelo ngasinye sokuhlanganisa,
- ukwakha amaphakheji wesicelo ngasinye sokuhlanganisa nokuphusha ku-master, inqobo nje uma kunomugqa othile kumlayezo wokuzibophezela,
- ukuthumela amaphakheji aqoqiwe kokuphakelayo okuyimfihlo ku-Azure DevOps,
- ukuhlanganiswa kwemibhalo nokushicilelwa emakhasini e-GitLab,
- amabheji!11
Izidingo ezichazwe ngokwemvelo ziwela kumodeli yamapayipi elandelayo:
- Isigaba 1 - ukuhlanganisa
- Siqoqa ikhodi, sishicilele amafayela okukhiphayo njengama-artifact
- Isigaba 2 - ukuhlolwa
- Sithola ama-artifact kusukela kusiteji sokwakha, senze izivivinyo, siqoqe idatha yokufakwa kwekhodi
- Isigaba 3 - Thumela
- Umsebenzi 1 - yakha iphakethe le-nuget bese ulithumela ku-Azure DevOps
- Umsebenzi 2 - sihlanganisa isayithi kusuka ku-xmldoc kukhodi yomthombo bese siyishicilela emakhasini e-GitLab
Ake siqale!
Iqoqa ukumisa
Ilungiselela ama-akhawunti
-
Dala i-akhawunti ku-
I-Microsoft Azure -
Iya ku
I-Azure DevOps -
Sakha iphrojekthi entsha
- Igama - noma yiliphi
- Ukubonakala - noma yikuphi
-
Uma uchofoza inkinobho ethi Dala, iphrojekthi izokwakhiwa futhi uzoyiswa ekhasini layo. Kuleli khasi ungakhubaza izici ezingadingekile ngokuya kuzilungiselelo zamaphrojekthi (isixhumanisi esiphansi ohlwini olungakwesokunxele -> Uhlolojikelele -> Ibhulokhi Yezinsizakalo ze-Azure DevOps)
-
Iya ku-Atrifacts, chofoza okuthi Dala okuphakelayo
- Faka igama lomthombo
- Khetha ukubonakala
- Susa ukumaka Faka amaphakheji asuka emithonjeni evamile yomphakathi, ukuze umthombo ungaphenduki ube i-nuget clone yokulahla
-
Chofoza okuthi Xhuma ukuze uphakele, khetha Isitudiyo Esibonakalayo, kopisha Umthombo ebhulokhini Lokusethwa Komshini
-
Iya kuzilungiselelo ze-akhawunti, khetha Ithokheni Yokufinyelela Komuntu Siqu
-
Dala ithokheni yokufinyelela entsha
- Igama - ngokunganaki
- Inhlangano - yamanje
- Ivumeleke isikhathi esingangonyaka ongu-1
- Ububanzi - Ukupakisha/Funda & Bhala
-
Kopisha ithokheni edaliwe - ngemuva kokuthi iwindi le-modal livaliwe, inani ngeke litholakale
-
Iya kuzilungiselelo zenqolobane ku-GitLab, khetha izilungiselelo ze-CI/CD
-
Nweba ibhulokhi Yokuguquguquka, engeza entsha
- Igama - noma yiziphi ezingenazo izikhala (lizotholakala kugobolondo lomyalo)
- Inani ithokheni yokufinyelela kusukela kusinyathelo 9
- Khetha i-Mask variable
Lokhu kuqeda ukumisa kwangaphambilini.
Ilungiselela uhlaka lokucushwa
Ngokuzenzakalelayo, ifayela elisetshenziselwa ukulungisa i-CI/CD ku-GitLab ngu .gitlab-ci.yml
kusuka empandeni yenqolobane. Ungakwazi ukumisa indlela yangokwezifiso kuleli fayela kuzilungiselelo zokugcina, kodwa kulokhu akudingekile.
Njengoba kungabonakala esandisweni, ifayela liqukethe ukucushwa ngefomethi YAML
. Imininingwane yemibhalo ukuthi yibaphi okhiye abangaqukethwa ezingeni eliphezulu lokucushwa, kanye nakuleveli ngayinye efakwe esidlekeni.
Okokuqala, ake sengeze isixhumanisi esithombeni se-docker efayeleni lokucushwa, lapho imisebenzi izokwenziwa khona. Ukwenza lokhu sithola
image: mcr.microsoft.com/dotnet/core/sdk:3.1
Manje, lapho ipayipi lethulwa endaweni yesithombe se-Microsoft, isithombe esishiwo sizolandwa, lapho yonke imisebenzi evela ekucushweni izokwenziwa.
Isinyathelo esilandelayo ukwengeza isigaba's. Ngokuzenzakalelayo, i-GitLab ichaza izigaba ezi-5:
.pre
- kwenziwa kuzo zonke izigaba,.post
- eyenziwa ngemva kwazo zonke izigaba,build
- kuqala ngemva.pre
isiteji,test
- isigaba sesibili,deploy
- isigaba sesithathu.
Nokho, akukho okukuvimbela ukuba uziveze ngokusobala. Ukulandelana kwezinyathelo ezifakwe kuhlu kuthinta indlela ezilandelwa ngayo. Ukuze siphelele, masingeze ekucushweni:
stages:
- build
- test
- deploy
Ukuze kulungiswe iphutha, kunengqondo ukuthola ulwazi mayelana nendawo lapho imisebenzi eyenziwa khona. Ake sengeze isethi yemiyalo yomhlaba wonke ezokwenziwa ngaphambi komsebenzi ngamunye nge before_script
:
before_script:
- $PSVersionTable.PSVersion
- dotnet --version
- nuget help | select-string Version
Kusele ukungeza okungenani umsebenzi owodwa ukuze kuthi lapho kuthunyelwa ama-commissions, ipayipi liqale. Okwamanje, ake sengeze umsebenzi ongenalutho ozowubonisa:
dummy job:
script:
- echo ok
Siqala ukuqinisekiswa, sithola umlayezo wokuthi konke kuhamba kahle, siyazibophezela, siyaphusha, sibheka imiphumela kusayithi ... Futhi sithola iphutha lombhalo - bash: .PSVersion: command not found
. I-WTF?
Konke kunengqondo - ngokuzenzakalelayo, abagijimi (abanomthwalo wemfanelo wokwenza imibhalo yemisebenzi futhi ehlinzekwa yi-GitLab) ukusetshenziswa bash
ukwenza imiyalo. Ungakwazi ukukulungisa lokhu ngokubonisa ngokucacile encazelweni yomsebenzi ukuthi yimaphi amathegi umgijimi ophethe ipayipi okufanele abe nawo:
dummy job on windows:
script:
- echo ok
tags:
- windows
Kuhle! Ipayipi manje liyasebenza.
Umfundi olalelayo, esephindaphinde izinyathelo ezibonisiwe, uzoqaphela ukuthi umsebenzi uqediwe esiteji test
, nakuba singasichazanga isiteji. Njengoba ungase ucabange, test
isinyathelo esizenzakalelayo.
Masiqhubeke nokwakha uhlaka lwamathambo okucushwa ngokungeza yonke imisebenzi echazwe ngenhla:
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
Sithole ipayipi elingasebenzi ngokukhethekile, kodwa nokho elilungile.
Ukusetha izibangeli
Ngenxa yokuthi azikho izihlungi ze-trigger ezishiwo kunoma yimiphi imisebenzi, ipayipi lizokwenza ngokugcwele kwenziwa ngaso sonke isikhathi lapho isivumelwano siphushwa endaweni yokugcina. Njengoba lokhu kungekona ukuziphatha okufiselekayo ngokuvamile, sizosetha izihlungi ze-trigger zemisebenzi.
Izihlungi zingahlelwa ngamafomethi amabili: only/except
ikuvumela ukuthi ulungiselele izihlungi ngama-trigger (merge_request
, isibonelo - usetha umsebenzi okufanele wenziwe njalo lapho isicelo sokudonsa senziwa futhi ngaso sonke isikhathi izibophezelo zithunyelwa egatsheni elingumthombo wesicelo sokuhlanganisa) namagama amagatsha (okuhlanganisa nokusebenzisa izinkulumo ezivamile); rules
ikuvumela ukuthi wenze ngokwezifiso isethi yemibandela futhi, ngokuzikhethela, uguqule isimo sokwenziwa komsebenzi kuye ngempumelelo yemisebenzi edlule (when
ku-GitLab CI/CD
Ake sikhumbule isethi yezidingo - ukuhlanganisa nokuhlola kuphela isicelo sokuhlanganisa, ukupakishwa nokuthumela kwa-Azure DevOps - ukuze uthole isicelo sokuhlanganisa futhi siphushele kunkosi, ukukhiqizwa kwemibhalo - ukuze kuphushelwe kunkosi.
Okokuqala, ake simise umsebenzi wokuhlanganisa ikhodi ngokwengeza umthetho wokucupha obangela kuphela isicelo sokuhlanganisa:
build job:
# snip
only:
- merge_request
Manje ake simise umsebenzi wokupakisha ukuze uvule isicelo sokuhlanganisa futhi sengeze ukuzibophezela kumphathi:
pack and deploy job:
# snip
only:
- merge_request
- master
Njengoba ubona, yonke into ilula futhi iqondile.
Ungakwazi futhi ukusetha umsebenzi ukuthi uqhume kuphela uma isicelo sokuhlanganisa sidalwe ngenhloso ethile noma igatsha lomthombo:
rules:
- if: $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "master"
Ngaphansi kwezimo, ungasebenzisa rules
akuhambisani nemithetho only/except
.
Ilungiselela Ukulondoloza I-Artifact
Ngesikhathi somsebenzi build job
sizoba nama-artifact okwakha adaliwe angasetshenziswa kabusha emisebenzini elandelayo. Ukuze wenze lokhu, udinga ukwengeza izindlela ekucushweni komsebenzi, amafayela azodinga ukulondolozwa futhi asetshenziswe kabusha emisebenzini elandelayo, kukhiye. artifacts
build job:
# snip
artifacts:
paths:
- path/to/build/artifacts
- another/path
- MyCoolLib.*/bin/Release/*
Izindlela zisekela amakhadi asendle, okwenza kube lula ukuwasetha.
Uma umsebenzi udala ama-artifact, khona-ke umsebenzi olandelayo olandelayo uzokwazi ukufinyelela kuwo - azotholakala ngezindlela ezifanayo ngokuhlobene nempande yenqolobane lapho aqoqwa khona kusukela kumsebenzi wokuqala. Izinto zobuciko nazo ziyatholakala ukuze zilandwe kuwebhusayithi.
Manje njengoba sesinohlaka lokumisa olulungile (futhi luhloliwe), singaqhubeka nokubhala imibhalo yemisebenzi.
Sibhala imibhalo
Mhlawumbe, ngesinye isikhathi, emthaleni kude, kude, amaphrojekthi wokwakha (kuhlanganise ne-.net) avela emgqeni womyalo kwaba ubuhlungu. Manje ungakha, uhlole futhi ushicilele iphrojekthi ngamaqembu angu-3:
dotnet build
dotnet test
dotnet pack
Ngokwemvelo, kukhona amanye ama-nuances ngenxa yokuthi sizofaka imiyalo kancane kancane.
- Sifuna ukwakhiwa kokukhishwa, hhayi ukwakhiwa kokususa iphutha, ngakho-ke sengeza kumyalo ngamunye
-c Release
- Uma sihlola, sifuna ukuqoqa idatha yokufakwa kwekhodi, ngakho-ke sidinga ukufaka umhlaziyi wokuhlanganisa kumalabhulali wokuhlola:
- Engeza iphakheji kuwo wonke amalabhulali okuhlola
coverlet.msbuild
:dotnet add package coverlet.msbuild
kusuka kufolda yephrojekthi - Engeza kumyalo wokuqalisa wokuhlola
/p:CollectCoverage=true
- Engeza ukhiye ekucushweni komsebenzi wokuhlola ukuze uthole imiphumela yekhava (bona ngezansi)
- Engeza iphakheji kuwo wonke amalabhulali okuhlola
- Lapho upakisha ikhodi kumaphakheji we-nuget, setha uhla lwemibhalo lokuphumayo lwamaphakheji:
-o .
Iqoqa idatha yokufakwa kwekhodi
Ngemva kokwenza ukuhlola, i-Coverlet ibonisa izibalo zokuqalisa kukhonsoli:
Calculating coverage result...
Generating report 'C:Usersxxxsourcereposmy-projectmyProject.testscoverage.json'
+-------------+--------+--------+--------+
| Module | Line | Branch | Method |
+-------------+--------+--------+--------+
| project 1 | 83,24% | 66,66% | 92,1% |
+-------------+--------+--------+--------+
| project 2 | 87,5% | 50% | 100% |
+-------------+--------+--------+--------+
| project 3 | 100% | 83,33% | 100% |
+-------------+--------+--------+--------+
+---------+--------+--------+--------+
| | Line | Branch | Method |
+---------+--------+--------+--------+
| Total | 84,27% | 65,76% | 92,94% |
+---------+--------+--------+--------+
| Average | 90,24% | 66,66% | 97,36% |
+---------+--------+--------+--------+
I-GitLab ikuvumela ukuthi ucacise isisho esivamile ukuze uthole izibalo, ezingase zitholwe ngendlela yebheji. Isisho esivamile sicaciswa kuzilungiselelo zomsebenzi ngokhiye coverage
; isisho kufanele sibe neqembu lokuthwebula, inani lalo elizodluliselwa ebhejini:
test and cover job:
# snip
coverage: /|s*Totals*|s*(d+[,.]d+%)/
Lapha sithola izibalo emugqeni onesamba esiphelele somugqa.
Sishicilela amaphakheji kanye nemibhalo
Zombili lezi zenzo zihlelelwe isigaba sokugcina sepayipi - njengoba umhlangano nokuhlolwa sekuphumelele, singabelana ngentuthuko yethu nomhlaba.
Okokuqala, ake sibheke ukushicilela kumthombo wephakheji:
-
Uma iphrojekthi ingenalo ifayela lokucushwa le-nuget (
nuget.config
), dala entsha:dotnet new nugetconfig
Kwani: isithombe singase singabi nakho ukufinyelela kokubhala ekucushweni komhlaba jikelele (umsebenzisi nomshini). Ukuze singabambi amaphutha, simane sakhe ukucushwa kwasendaweni okusha futhi sisebenze ngakho.
- Ake sengeze umthombo wephakheji omusha ekucushweni kwendawo:
nuget sources add -name <name> -source <url> -username <organization> -password <gitlab variable> -configfile nuget.config -StorePasswordInClearText
name
- Igama lomthombo wendawo, alibalulekileurl
- I-URL yomthombo kusukela esiteji "Ukulungiselela ama-akhawunti", ikhasi 6organization
- Igama lenhlangano ku-Azure DevOpsgitlab variable
β igama lesiguquli esinethokheni yokungena engezwe ku-GitLab (βUkulungiselela ama-akhawuntiβ, ikhasi 11). Ngokwemvelo, ngefomethi$variableName
-StorePasswordInClearText
- ukugebenga ukudlula iphutha elinqatshelwe ukufinyelela (Angiqali ukunyathela leli reki )- Esimeni samaphutha, kungase kube usizo ukungeza
-verbosity detailed
- Ithumela iphakheji emthonjeni:
nuget push -source <name> -skipduplicate -apikey <key> *.nupkg
- Sithumela wonke amaphakheji kusuka kuhla lwemibhalo lwamanje, ngakho
*.nupkg
. name
- kusukela esinyathelweni esingenhla.key
- yimuphi umugqa. Ku-Azure DevOps, ku-Connect to feed window, isibonelo sihlala siwumugqaaz
.-skipduplicate
- uma uzama ukuthumela iphakheji ekhona kakade ngaphandle kwalo khiye, umthombo uzobuyisela iphutha409 Conflict
; ngokhiye, ukuthumela kuzokweqiwa.
- Sithumela wonke amaphakheji kusuka kuhla lwemibhalo lwamanje, ngakho
Manje ake sisethe ukudalwa kwamadokhumenti:
- Okokuqala, endaweni yokugcina, egatsheni eliyinhloko, siqala iphrojekthi ye-docfx. Ukuze wenze lokhu, sebenzisa umyalo kusuka empandeni
docfx init
futhi usethe ngokuhlanganyela imingcele ebalulekile yokwakha imibhalo. Incazelo enemininingwane yobuncane bokusethwa kwephrojekthilapha .- Lapho usetha, kubalulekile ukucacisa uhla lwemibhalo lokuphumayo
..public
- I-GitLab ngokuzenzakalelayo ithatha okuqukethwe kwefolda yomphakathi kuyimpande yenqolobane njengomthombo Wamakhasi. Ngoba iphrojekthi izotholakala kufolda ebekwe endaweni yokugcina - engeza okukhiphayo kuleveli ephezulu endleleni.
- Lapho usetha, kubalulekile ukucacisa uhla lwemibhalo lokuphumayo
- Masiphushele izinguquko ku-GitLab.
- Engeza umsebenzi ekucushweni kwepayipi
pages
(igama eligodliwe lemisebenzi yokushicilela isayithi emakhasini e-GitLab):- Iskriphthi:
nuget install docfx.console -version 2.51.0
- faka i-docfx; inguqulo icacisiwe ukuze kuqinisekiswe ukuthi izindlela zokufaka iphakheji zilungile..docfx.console.2.51.0toolsdocfx.exe .docfx_projectdocfx.json
- ukuqoqa imibhalo
- Ama-artifact e-Node:
- Iskriphthi:
pages:
# snip
artifacts:
paths:
- public
Ukwehla kwezwi mayelana ne-docfx
Ngaphambilini, lapho ngihlela iphrojekthi, ngacacisa umthombo wekhodi wemibhalo njengefayela lesixazululo. Ububi obukhulu ukuthi imibhalo ibuye yenzelwe amaphrojekthi wokuhlola. Uma kwenzeka lokhu kungenasidingo, ungasetha leli nani ku-node metadata.src
:
{
"metadata": [
{
"src": [
{
"src": "../",
"files": [
"**/*.csproj"
],
"exclude":[
"*.tests*/**"
]
}
],
// --- snip ---
},
// --- snip ---
],
// --- snip ---
}
metadata.src.src: "../"
- sikhuphukela kwelinye izinga ngokuphathelene nendawodocfx.json
, ngoba Ukusesha isihlahla sohla lwemibhalo akusebenzi ngamaphethini.metadata.src.files: ["**/*.csproj"]
- iphethini yomhlaba wonke, siqoqa wonke amaphrojekthi we-C# kuzo zonke izinkomba.metadata.src.exclude: ["*.tests*/**"]
- iphethini yomhlaba wonke, ungafaki yonke into kumafolda.tests
Esihlokweni
Inani eliphelele
Ukucushwa okulula okunjalo kungadalwa ngesigamu sehora kanye nezinkomishi ezimbalwa zekhofi, okuzokuvumela ukuthi uhlole ukuthi ikhodi yakhiwe futhi izivivinyo ziyadlula, wakhe iphakheji elisha, ubuyekeze imibhalo futhi ujabulise iso ngokuhle. amabheji ku-README yephrojekthi nesicelo ngasinye sokuhlanganisa nokuthunyelwa kumphathi.
Okokugcina .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
Ekhuluma ngamabheji
Ngenxa yabo, phela, konke kwaqalwa!
Amabheji anesimo samapayipi kanye nekhodi ayatholakala ku-GitLab kuzilungiselelo ze-CI/CD kubhulokhi yamapayipi e-Gtntral:
Ngidale ibheji elinesixhumanisi sokuya kumadokhumenti endawenikazi
![ΠΡΠΈΠΌΠ΅Ρ Ρ Shields.io](https://img.shields.io/badge/custom-badge-blue)
I-Azure DevOps Artifacts futhi ikuvumela ukuthi udale amabheji amaphakheji ngenguqulo yakamuva. Ukuze wenze lokhu, emthonjeni kuwebhusayithi ye-Azure DevOps, udinga ukuchofoza okuthi Dala ibheji lephakheji elikhethiwe bese ukopisha umaki wokumaka:
Ukwengeza ubuhle
Igqamisa Izingcezu Zokucushwa Ezivamile
Ngenkathi ngibhala ukumisa futhi ngicwaninga kumadokhumenti, ngihlangabezane nesici esijabulisayo se-YAML - ukusebenzisa kabusha izingcezwana.
Njengoba ubona kuzilungiselelo zomsebenzi, zonke zidinga ithegi windows
kumgijimi, futhi icushwa lapho isicelo sokuhlanganisa sithunyelwa kumphathi/okudaliwe (ngaphandle kwemibhalo). Ake sengeze lokhu kucezu esizophinda silusebenzise:
.common_tags: &common_tags
tags:
- windows
.common_only: &common_only
only:
- merge_requests
- master
Futhi manje sesingakwazi ukufaka ucezu olumenyezelwe ngaphambili encazelweni yomsebenzi:
build job:
<<: *common_tags
<<: *common_only
Amagama eziqephu kufanele aqale ngechashazi, ukuze angatolikwa njengomsebenzi.
Inguqulo yephakheji
Lapho udala iphakheji, umhlanganisi uhlola ukushintshwa komugqa womyalo, futhi lapho kungabikho, amafayela wephrojekthi; Ngemva kokuthola i-Node yenguqulo, kuthatha inani layo njengenguqulo yephakheji eyakhiwayo. Kuvela ukuthi ukuze wakhe iphakheji ngenguqulo entsha, udinga ukuyibuyekeza kufayela lephrojekthi noma uyidlulise njengengxabano yomugqa womyalo.
Ake sengeze olunye Uhlu Lwezifiso - vumela izinombolo ezimbili ezincane enguqulweni zibe unyaka futhi sakhe usuku lwephakheji, futhi sengeze izinguqulo ezikhishwe ngaphambilini. Yebo, ungakwazi ukwengeza le datha efayeleni lephrojekthi futhi uhlole ngaphambi kokuthunyelwa ngakunye - kodwa futhi ungakwenza ngokuqhubekayo, uqoqe inguqulo yephakheji kusuka kumongo futhi uyidlulise ku-agumenti yomugqa womyalo.
Masivume ukuthi uma umlayezo wokuzibophezela uqukethe umugqa onjengawo release (v./ver./version) <version number> (rev./revision <revision>)?
, khona-ke sizothatha inguqulo yephakheji kulo mugqa, siyifake ngosuku lwamanje futhi siyidlulisele njengengxabano kumyalo dotnet pack
. Uma ungekho ulayini, ngeke nje siqoqe iphakheji.
Umbhalo olandelayo uxazulula le nkinga:
# ΡΠ΅Π³ΡΠ»ΡΡΠ½ΠΎΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ° ΡΡΡΠΎΠΊΠΈ Ρ Π²Π΅ΡΡΠΈΠ΅ΠΉ
$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
Ukwengeza iskripthi kumsebenzi pack and deploy job
futhi ubheke ukuhlanganiswa kwamaphakheji ngokuqinile uma kunomugqa onikeziwe kumlayezo wokuzibophezela.
Inani
Ngemva kokuchitha cishe isigamu sehora ukuya ehoreni sibhala ukucushwa, ukulungisa iphutha ku-powershell yendawo futhi, ngokunokwenzeka, ukwethulwa okumbalwa okungaphumelelanga, sithole ukucushwa okulula kokuzenzakalela kwemisebenzi yenjwayelo.
Vele, i-GitLab CI/CD ibanzi kakhulu futhi inezici eziningi kunalokho engase ibonakale ngemva kokufunda lo mhlahlandlela -
thola ngokuzenzakalelayo, wakhe, hlola, sebenzisa, futhi ugade izinhlelo zakho zokusebenza
Manje izinhlelo ziwukumisa ipayipi lokuthumela izinhlelo zokusebenza e-Azure, kusetshenziswa i-Pulumi futhi kunqunywe ngokuzenzakalelayo indawo okuhlosiwe, okuzohlanganiswa esihlokweni esilandelayo.
Source: www.habr.com