Kana kuti ungawana sei mabheji akanaka epurojekiti yako mune imwe manheru ekuzorora kwekodhi
Zvichida, mugadziri wese ane kanenge kamwe pet project pane imwe nguva ane itch yemabheji akanaka ane mastatus, code coverage, package versions in nuget... Uye itch iyi yakanditungamirira kuti ndinyore chinyorwa ichi. Mukugadzirira kuinyora, ndakawana runako urwu mune rimwe remapurojekiti angu:
Chinyorwa ichi chichabata kugadzwa kwekutanga kwekubatanidzwa uye kuendeswa kwe.Net Core class library library muGitLab, kuburitsa zvinyorwa kuGitLab Mapeji uye kutumira mapakeji akaunganidzwa kune yakavanzika feed muAzure DevOps.
VS Code nekuwedzera yakashandiswa senzvimbo yekusimudzira
Nhanganyaya Yekutanga
CD ndipo paunongosunda, asi mutengi atorasikirwa nezvose?
Chii chinonzi CI/CD uye nei ichidiwa? Unogona kuita google zviri nyore. Tsvaga magwaro akazara ekumisikidza mapaipi muGitLab
- mugadziri anotumira kuzvipira kune repository, anogadzira chikumbiro chekubatanidza kuburikidza newebhusaiti, kana neimwe nzira zviripachena kana zvisina kujeka kuburitsa pombi,
- kubva pakurongeka, mabasa ese anosarudzwa ane mamiriro ezvinhu anovabvumira kutangwa mune yakapihwa mamiriro,
- mabasa akarongwa maererano nematanho awo,
- matanho anoitwa achichinjana - i.e. zvakafanana mabasa ese echikamu chino anopedzwa,
- kana nhanho ikatadza (kureva kuti rimwe remabasa echikuva rakatadza) - pombi inomira (zvinenge nguva dzose),
- kana matanho ese akapedzwa zvinobudirira, pombi inoonekwa seyakabudirira.
Saka tine:
- pipeline seti yemabasa akarongwa mumatanho maunogona kuunganidza, kuyedza, pasuru kodhi, kuendesa iyo yakapera gungano kune gore sevhisi, nezvimwe.
- danho (siteji) - chikamu chesangano repombi, ine 1+ basa,
- basa (basa) chikamu chebasa mupombi. Inosanganisira script (inodiwa), mamiriro ekuvhura, marongero ekushambadzira / caching artifacts nezvimwe zvakawanda.
Saizvozvo, iro basa pakumisikidza CI/CD rinouya pasi pakugadzira seti yemabasa anoita ese anodiwa zviito zvekuunganidza, kuyedza uye kuburitsa kodhi uye zvigadzirwa.
Tisati tatanga: sei?
- Sei GitLab?
Nekuti pakamuka kudikanwa kwekugadzira matura epachivande emapurojekiti ezvipfuyo, vakabhadharwa paGitHub, uye ndaive nemakaro. Iwo marepositori ave emahara, asi parizvino ichi hachisi chikonzero chakanaka chekuti ndiende kuGitHub.
- Sei usiri Azure DevOps Mapaipi?
Nekuti kuseta kuri nyore - hautomboda ruzivo rwemutsara wekuraira. Kubatanidzwa nevekunze git vanopa - mukudzvanya kwakati, kuendesa kunze kweSSH makiyi ekutumira anoisa kune repository - zvakare, pombi inogadziriswa zviri nyore kunyangwe isina template.
Nzvimbo yekutanga: zvaunazvo uye zvaunoda
Tine:
- repository muGitLab.
Tinoda:
- kuungana otomatiki uye kuyedzwa kwechikumbiro chega chega chekubatanidza,
- kuvaka mapakeji kune yega yega yekubatanidza chikumbiro uye kusundira kuna tenzi, chero paine imwe mutsara mune yekuita meseji,
- kutumira mapakeji akaunganidzwa kune yakavanzika feed muAzure DevOps,
- kuungana kwezvinyorwa uye kuburitswa muGitLab Mapeji,
- mabheji!11
Izvo zvinotsanangurwa zvinodikanwa zvinoenderana nemasikirwo mune inotevera pombi modhi:
- Danho 1 - gungano
- Isu tinounganidza iyo kodhi, kushambadza mafaera akabuda seartifacts
- Danho rechipiri - kuedza
- Isu tinogashira zvigadzirwa kubva padanho rekuvaka, kumhanya bvunzo, kuunganidza kodhi yekuvhara data
- Danho rechitatu - kutumira
- Basa rekutanga - unganidza iyo nuget package uye utumire kuAzure DevOps
- Basa rechipiri - tinounganidza saiti kubva kuxmldoc mune kodhi kodhi uye kuishambadza muGitLab Mapeji.
Ngatitangei!
Kuunganidza configuration
Kugadzirira maakaundi
-
Gadzira account mukati
Microsoft Azure -
Enda ku
Azure DevOps -
Gadzira chirongwa chitsva
- Zita - chero
- Kuonekwa - chero
-
Paunodzvanya paGadzira bhatani, iyo purojekiti ichagadzirwa uye iwe uchaendeswa kune yayo peji. Pane ino peji unogona kudzima zvisina basa maficha nekuenda kumapurojekiti marongero (yepasi chinongedzo mune runyorwa kuruboshwe -> Overview -> Azure DevOps Services block)
-
Enda kuAtrifacts, tinya Gadzira feed
- Isa zita rekwakabva
- Sarudza kuonekwa
- Bvisa bhokisi Batanidza mapasuru kubva munzvimbo dzinowanikwa veruzhinjikuitira kuti sosi irege kushanduka kuita marara emarara e nuget clone
-
Dzvanya Batanidza kudyisa, sarudza Visual Studio, kopira Kwabva kubva kuMuchina Setup block
-
Enda kune zvigadziriso zveakaunti, sarudza Personal Access Token
-
Gadzira chiratidzo chitsva chekuwana
- Zita - zvekupopota
- Sangano - ikozvino
- Nguva yekushanda: yakawanda 1 gore
- Scope - Packaging/Read & Nyora
-
Kopa chiratidzo chakagadzirwa - mushure mekuvhara hwindo re modal kukosha hakuzovepo
-
Enda kune repository marongero muGitLab, sarudza CI/CD marongero
-
Wedzera iyo Variables block uye wedzera imwe nyowani
- Zita - chero pasina nzvimbo (richave riripo mune yekuraira shell)
- Kukosha ndiyo chiratidzo chekuwana kubva padanho 9
- Sarudza Mask variable
Izvi zvinopedzisa gadziriro yekutanga.
Kugadzirira chimiro chekugadzirisa
Nekutadza, faira rinoshandiswa kugadzirisa CI/CD muGitLab ndiro .gitlab-ci.yml
kubva pamudzi we repository. Iwe unogona kugadzirisa nzira yetsika kune iyi faira mune repository marongero, asi mune iyi kesi hazvidiwi.
Sezvingaonekwa kubva pakuwedzera, iyo faira ine gadziriso mune iyo fomati YAML
. Zvinyorwa zvinotsanangura zvakadzama ndeapi makiyi anogona kuve ari padanho repamusoro rekugadzirisa, uye mune yega yega mazinga akaiswa.
Kutanga, ngatiwedzere kune faira yekumisikidza chinongedzo kune docker mufananidzo umo mabasa achaitwa. Kuita izvi tinowana
image: mcr.microsoft.com/dotnet/core/sdk:3.1
Iye zvino, paunotanga pombi, mufananidzo wakatsanangurwa uchatorwa kubva kuMicrosoft image repository, umo mabasa ose kubva pakugadzirisa achaitwa.
Nhanho inotevera ndeyekuwedzera siteji's. By default, GitLab inotsanangura 5 nhanho:
.pre
- inoitwa kumatanho ese,.post
- yakaitwa mushure mematanho ese,build
- kutanga pashure.pre
stage,test
- chikamu chechipiri,deploy
- danho rechitatu.
Hapana chinokutadzisa kuti uzvitaure zvakajeka, zvisinei. Kurongeka kwematanho akarongwa kunokanganisa marongerwo aanopedzwa nawo. Kuti uwane kukwana, ngatiwedzere kune iyo gadziriso:
stages:
- build
- test
- deploy
Kugadzirisa, zvine musoro kuwana ruzivo nezve nharaunda umo mabasa anoitwa. Ngatiwedzerei seti yemirairo yepasirese inozoitwa basa rega rega risati rashandiswa before_script
:
before_script:
- $PSVersionTable.PSVersion
- dotnet --version
- nuget help | select-string Version
Inosara yekuwedzera kanenge basa rimwe chete kuitira kuti kana madhiri atumirwa, pombi inotanga. Parizvino, ngatiwedzerei basa risina chinhu rekuratidzira:
dummy job:
script:
- echo ok
Isu tinotanga kusimbiswa, tora meseji yekuti zvese zvakanaka, zvipira, sundidzira, tarisa mhinduro pane saiti... Uye isu tinowana script kukanganisa - bash: .PSVersion: command not found
. WTF?
Zvese zvine musoro - nekusarudzika, vanomhanya (vane basa rekuita zvinyorwa zvebasa uye zvakapihwa neGitLab) shandisa. bash
kuita mirairo. Iwe unogona kugadzirisa izvi nekuratidza zvakajeka mune tsananguro yebasa kuti ma tag anouraya mumhanyi wepombi anofanira kuva nawo:
dummy job on windows:
script:
- echo ok
tags:
- windows
Hukuru! Pombi yava kushanda.
Muverengi anoteerera, achidzokorora nhanho idzi, anozoona kuti basa rakapedzwa pachikuva test
, kunyange zvazvo tisina kutsanangura dariro. Sezvaungafungidzira, test
ndiyo danho rekutanga.
Ngatirambei tichigadzira skeleton yekumisikidza nekuwedzera mabasa ese anotsanangurwa pamusoro:
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
Hatina kunyanya kushanda, asi zvakadaro pombi chaiyo.
Kugadzira zvinokonzeresa
Nekuda kwekuti hapana mafirita anokonzeresa anotsanangurwa kune chero emabasa, pombi ichaita zvakakwana kuurayiwa nguva dzese dzekuita dzinotumirwa kune repository. Sezvo aya asiri iwo maitiro anodiwa kazhinji, isu tichagadzirisa mafirita emabasa.
Mafirita anogona kugadzirwa ari maviri mafomati: only/except
inobvumidza iwe kugadzirisa mafirita nezvinokonzeresa (merge_request
, semuenzaniso - inogadzirisa basa kuti riitwe pese panogadzirwa chikumbiro chekubatanidza uye nguva dzese dzekuita dzinotumirwa kubazi rinova iro tsime mukubatanidzwa mukukumbira) nemazita emapazi (kusanganisira kushandisa mataurirwo enguva dzose); rules
inokutendera iwe kugadzirisa seti yemamiriro uye, sarudzo, shandura mamiriro ekuita basa zvichienderana nekubudirira kwemabasa apfuura (when
muGitLab CI/CD
Ngatirangarirei seti yezvinodiwa - kusangana uye kuyedzwa chete kwekubatanidza zvikumbiro, kurongedza uye kutumira kuAzure DevOps - yekubatanidza zvikumbiro uye kusundira kuna tenzi, chizvarwa chezvinyorwa - zvekusundira kuna tenzi.
Chekutanga, ngatimisei kodhi yekubatanidza basa nekuwedzera chirevo chekusimudzira chinongokonzeresa chikumbiro chekubatanidza:
build job:
# snip
only:
- merge_request
Zvino ngatigadzirisei basa rekurongedza kukonzeresa chikumbiro chekubatanidza uye kuwedzera kuzvipira kuna tenzi:
pack and deploy job:
# snip
only:
- merge_request
- master
Sezvaunogona kuona, zvose zviri nyore uye zvakananga.
Iwe unogona zvakare kugadzirisa iro basa kuti ritange chete kana chikumbiro chekubatanidza chagadzirwa neicho chinangwa kana sosi bazi:
rules:
- if: $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "master"
Mumamiriro ezvinhu anogona kushandiswa rules
zvisingaenderani nemitemo only/except
.
Kugadzirisa Artifact Saving
Apo basa riri kushanda build job
tichava nekuvaka zvigadzirwa zvakagadzirwa zvinogona kushandiswa zvakare mumabasa anotevera. Kuti uite izvi, iwe unofanirwa kuwedzera nzira dzekugadzirisa basa, mafaera ayo achada kuchengetwa uye kushandiswazve mumabasa anotevera, kune kiyi. artifacts
build job:
# snip
artifacts:
paths:
- path/to/build/artifacts
- another/path
- MyCoolLib.*/bin/Release/*
Nzira dzinotsigira makadhi emusango, izvo zvinoita kuti zvive nyore kuseta.
Kana basa richigadzira zvigadzirwa, ipapo rimwe nerimwe rinotevera basa rinozokwanisa kuzviwana - ivo vanozowanikwa munzira dzakafanana dzine chekuita nemudzi wekuchengetedza wavakaunganidzwa kubva pabasa rekutanga. Zvigadzirwa zviripo zvakare kurodha pawebhusaiti.
Iye zvino zvatava negadziriro yegadziriro yakagadzirira (uye yakasimbiswa), tinogona kuenderera mberi nekunyora zvinyorwa zvemabasa.
Tinonyora zvinyorwa
Zvichida, pane imwe nguva, mune imwe galaxy kure, kure, mapurojekiti ekuvaka (kusanganisira .net ndivo) kubva kumutsara wekuraira kwaiva marwadzo. Iye zvino unogona kuunganidza, kuedza uye kushambadza chirongwa ichi muzvikwata zvitatu:
dotnet build
dotnet test
dotnet pack
Nomuzvarirwo, kune mamwe nuances nekuda kwatichaita kuomesa mirairo neimwe nzira.
- Tinoda kusunungurwa, kwete debug, kuvaka, saka tinowedzera kune umwe neumwe murairo
-c Release
- Kana tichiyedza, isu tinoda kuunganidza dhata pamusoro pekuvhara kodhi, saka isu tinofanirwa kubatanidza yekuvhara yekuongorora kumaraibhurari ebvunzo:
- Iyo package inofanirwa kuwedzerwa kumaraibhurari ese ebvunzo
coverlet.msbuild
:dotnet add package coverlet.msbuild
kubva kufolda yeprojekiti - Wedzera kune test launch command
/p:CollectCoverage=true
- Ngatiwedzerei kiyi yekumisikidza basa rekuyedza kuti tiwane mibairo yekuvhara (ona pazasi)
- Iyo package inofanirwa kuwedzerwa kumaraibhurari ese ebvunzo
- Pakurongedza iyo kodhi mumapakeji e nuget, isu tichaisa iyo inobuda dhairekitori yemapakeji:
-o .
Kuunganidza kodhi yekuvhara data
Mushure mekuita bvunzo, Coverlet inoratidza nhamba dzekutanga kune iyo console:
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% |
+---------+--------+--------+--------+
GitLab inokutendera kuti utaure yenguva dzose kutaura kuti uwane manhamba, ayo anogona kubva awanikwa ari muchimiro chebheji. Chirevo chenguva dzose chinotsanangurwa muzvirongwa zvebasa nekiyi coverage
; chirevo chinofanira kunge chine boka rekutora, kukosha kwaro kuchaendeswa kune bheji:
test and cover job:
# snip
coverage: /|s*Totals*|s*(d+[,.]d+%)/
Pano tinowana zviverengero kubva mumutsara une kuvharika kwese nemitsetse.
Isu tinoburitsa mapakeji uye zvinyorwa
Tine zvese zviito zvakapihwa padanho rekupedzisira repombi - sezvo gungano uye bvunzo zvapfuura, tinogona kugovera zviitiko zvedu nenyika.
Kutanga, ngatitarisei kushambadza kune pasuru sosi:
-
Kana iyo purojekiti isina nuget yekumisikidza faira (
nuget.config
), gadzira imwe itsva:dotnet new nugetconfig
Yechii: Mufananidzo wacho unogona kunge usina mukana wekunyora kune zvepasi rose (mushandisi nemuchina) zvigadziriso. Kuti tisabate zvikanganiso, isu tichangogadzira gadziriso nyowani yenzvimbo uye tishande nayo.
- Ngatiwedzerei pasuru nyowani kugadziriso yenzvimbo:
nuget sources add -name <name> -source <url> -username <organization> -password <gitlab variable> -configfile nuget.config -StorePasswordInClearText
name
- zita renzvimbo, harina kukoshaurl
- URL yenzvimbo kubva padanho re "Kugadzirira maakaunti", nhanho yechitanhatuorganization
- zita resangano muAzure DevOpsgitlab variable
- zita rekushandura rine chiratidzo chekuwana chakawedzerwa kuGitLab ("Kugadzirira maakaunti", p. 11). Sezvingatarisirwa, muchimiro$variableName
-StorePasswordInClearText
- hack yekunzvenga kupinda kwarambwa kukanganisa (Handisi wekutanga kutsika reko iri )- Kana pane kukanganisa zvinogona kubatsira kuwedzera
-verbosity detailed
- Isu tinotumira iyo package kune sosi:
nuget push -source <name> -skipduplicate -apikey <key> *.nupkg
- Isu tinotumira ese mapakeji kubva kune yazvino dhairekitori, saka
*.nupkg
. name
- kubva padanho riri pamusoro.key
- chero mutsara. MuAzure DevOps, muBatanidza kudyisa hwindo, mutsara wemuenzaniso unogaraaz
.-skipduplicate
- kana ukaedza kutumira pasuru yagara iripo pasina kiyi iyi, kwainozobva kunodzosera chikanganiso409 Conflict
; nekiyi, kutumira kuchasvetuka.
- Isu tinotumira ese mapakeji kubva kune yazvino dhairekitori, saka
Zvino ngatigadzirirei kugadzirwa kwezvinyorwa:
- Kutanga, mune repository, mune master bazi, isu tinotanga iyo docfx chirongwa. Kuti uite izvi, unofanirwa kumhanya murairo kubva pamudzi
docfx init
uye nekudyidzana kuseta akakosha ma paramita ekuunganidza zvinyorwa. Tsanangudzo yakadzama yekuseta kweprojekiti kushomapano .- Paunenge uchigadzira, zvakakosha kutsanangura dhairekitori rekubuda
..public
- GitLab nekusarudzika inotora zviri mukati meruzhinji folda pamudzi we repository sesosi yeMapeji. Nokuti iyo purojekiti ichave iri mufolda yakarongedzwa mune repository - wedzera yekubuda kune inotevera nhanho munzira.
- Paunenge uchigadzira, zvakakosha kutsanangura dhairekitori rekubuda
- Ngatisundirei shanduko kuGitLab.
- Wedzera basa kune pombi configuration
pages
(izwi rakachengeterwa rekuita saiti yekushambadzira mabasa muGitLab Mapeji):- Script:
nuget install docfx.console -version 2.51.0
- isa docfx; Iyo vhezheni inopihwa kuti ive nechokwadi chekuti mapakeji ekuisa nzira dzakarurama..docfx.console.2.51.0toolsdocfx.exe .docfx_projectdocfx.json
- kuunganidza zvinyorwa
- Artifacts node:
- Script:
pages:
# snip
artifacts:
paths:
- public
Lyrical digression nezve docfx
Pakutanga, pakugadzira purojekiti, ndakatsanangura iyo kodhi sosi yezvinyorwa semhinduro faira. Chinhu chikuru chakashata ndechekuti zvinyorwa zvinogadzirwa zvakare kumapurojekiti ebvunzo. Kana izvi zvisingakoshi, unogona kuseta kukosha uku kune node metadata.src
:
{
"metadata": [
{
"src": [
{
"src": "../",
"files": [
"**/*.csproj"
],
"exclude":[
"*.tests*/**"
]
}
],
// --- snip ---
},
// --- snip ---
],
// --- snip ---
}
metadata.src.src: "../"
- enda nhanho imwe kumusoro inoenderana nenzvimbodocfx.json
, nokuti Kutsvaga kumusoro kwemuti wedhairekitori hakushande mumapateni.metadata.src.files: ["**/*.csproj"]
- maitiro epasi rose, tinounganidza ese mapurojekiti eC # kubva kune ese madhairekitori.metadata.src.exclude: ["*.tests*/**"]
- yepasirese pateni, bvisa zvese kubva kumaforodha ane.tests
Mumusoro
Subtotal
Ichi chigadziriso chakareruka chinogona kugadzirwa mune chaiyo hafu yeawa uye akati wandei makapu ekofi, izvo zvinokutendera kuti utarise nechikumbiro chega chega chekubatanidza uye utumire kuna tenzi kuti kodhi iri kuvakwa uye bvunzo dziri kupfuura, kuunganidza itsva. pasuru, kugadzirisa zvinyorwa uye kufadza ziso nemabheji akanaka muchirongwa README.
Final .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
Kutaura nezve mabheji
Kwakanga kuri nokuda kwavo kuti zvinhu zvose zvakatangwa!
Mabheji ane zvimiro zvepombi uye kuvharwa kwekodhi anowanikwa muGitLab mune CI/CD marongero muGtntral mapaipi block:
Ndakagadzira bheji rine link yezvinyorwa papuratifomu
![ΠΡΠΈΠΌΠ΅Ρ Ρ Shields.io](https://img.shields.io/badge/custom-badge-blue)
Azure DevOps Artifacts zvakare inobvumidza iwe kugadzira mabheji emapakeji anoratidza iyo yazvino vhezheni. Kuti uite izvi, mune sosi pawebhusaiti yeAzure DevOps, unofanirwa kudzvanya paGadzira bheji repakeji yakasarudzwa uye kukopa markup markup:
Kuwedzera runako
Isu tinosimbisa zvakajairika zvimedu zvekugadzirisa
Ndichiri kunyora zvigadziriso uye ndichitsvaga kuburikidza nezvinyorwa, ndakawana inonakidza YAML chimiro - kushandisazve zvimedu.
Sezvauri kuona kubva pazvirongwa zvebasa, ese anoda tag windows
kubva kumumhanyi, uye zvinokonzereswa pakutumira chikumbiro chekubatanidza kuna tenzi / kugadzira chikumbiro chekubatanidza (kunze kwezvinyorwa). Ngatiwedzerei ichi kuchidimbu chatichazoshandisazve:
.common_tags: &common_tags
tags:
- windows
.common_only: &common_only
only:
- merge_requests
- master
Uye ikozvino isu tinogona kuisa iyo yakamboziviswa chidimbu mune tsananguro yebasa:
build job:
<<: *common_tags
<<: *common_only
Mazita ezvimedu anofanira kutanga nenguva kuti asaturike sebasa.
Package versioning
Paunenge uchigadzira pasuru, mugadziri anotarisa mutsara wemirairo switch, uye mukusavapo kwavo, mafaira eprojekiti; Wawana iyo Version node, zvinotora kukosha kwayo sevhezheni yepasuru iri kuvakwa. Zvinoitika kuti kuti uvake pasuru ine vhezheni nyowani, iwe unofanirwa kuigadzirisa mupurojekiti faira kana kuipfuudza seyekuraira mutsara nharo.
Ngatiwedzerei chimwe chishuwo - regai nhamba dzakaderera mbiri mushanduro dzive gore uye zuva rekuvaka kwepakeji, uye wedzera prerelease shanduro. Ehe, iwe unogona kuwedzera iyi data kune purojekiti faira uye woitarisa isati yatumirwa yega yega - asi iwe unogona zvakare kuita izvi mupombi, kuunganidza iyo package vhezheni kubva kumamiriro uye kuipfuudza kuburikidza nekuraira mutsara nharo.
Ngatibvumiranei kuti kana meseji yekutumira ine mutsara wakadai release (v./ver./version) <version number> (rev./revision <revision>)?
, tobva tatora vhezheni yepakiti kubva mumutsara uyu, toiwedzera nezuva razvino uye toipfuudza senharo kumurairo. dotnet pack
. Mukushaikwa kwemutsara, isu hatingo unganidza pasuru.
Chinyorwa chinotevera chinogadzirisa dambudziko iri:
# ΡΠ΅Π³ΡΠ»ΡΡΠ½ΠΎΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ° ΡΡΡΠΎΠΊΠΈ Ρ Π²Π΅ΡΡΠΈΠ΅ΠΉ
$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
Kuwedzera script kune rimwe basa pack and deploy job
uye tarisa kuungana kwemapakeji zvakanyanya kana paine mutsara wakapihwa mumeseji yekuzvipira.
Total
Mushure mekushandisa ingangoita hafu yeawa kusvika paawa tichinyora zvigadziriso, kugadzirisa mushell yenzvimbo uye, pamwe, mashoma mashoma asina kubudirira, takagamuchira gadziriso yakapusa yekuita otomatiki mabasa.
Ehe, GitLab CI/CD yakawedzera kuwanda uye yakawandisa kupfuura zvazvingaite mushure mekuverenga gwaro iri -
ona otomatiki, gadzira, edza, tumira uye tarisa maapplication ako
Iye zvino zvirongwa ndezvekugadzirisa pombi yekuisa zvikumbiro muAzure, uchishandisa Pulumi uye nekuona otomatiki nzvimbo yakanangwa, iyo ichavharwa muchinyorwa chinotevera.
Source: www.habr.com