Kuda GitLab uye kuvenga tsikidzi? Unoda kuvandudza mhando yekodhi yako yekubva? Ipapo iwe wauya kunzvimbo chaiyo. Nhasi tichakuudza maitiro ekugadzirisa iyo PVS-Studio C # analyzer kutarisa kusanganisa zvikumbiro. Iva neunicorn mood uye kuverenga kunofadza kune wese munhu.
Nenzira, takaburitsa PVS-Studio 7.08, umo takaita zvinhu zvakawanda
- C # analyzer yeLinux uye macOS;
- plugin yeRider;
- new file list checking mode.
Faira list check mode
Kare, kuti utarise mamwe mafaera, zvaive zvakafanira kupfuudza .xml ine runyoro rwemafaira kune analyzer. Asi sezvo izvi zvisiri nyore, takawedzera kugona kutamisa .txt, izvo zvinoita kuti hupenyu huve nyore.
Kuti utarise mafaera chaiwo, unofanirwa kutsanangura mureza --sourceFiles (-f) uye transfer .txt nerunyoro rwemafaira. Zvinoita seizvi:
pvs-studio-dotnet -t path/to/solution.sln -f fileList.txt -o project.json
Kana iwe uchida kumisikidza kuzvipira kutarisa kana kudhonza zvikumbiro, unogona zvakare kuzviita uchishandisa iyi modhi. Musiyano uchave mukuwana runyoro rwemafaira ekuongorora uye zvinoenderana nekuti ndeapi masisitimu auri kushandisa.
Nheyo yekutarisa chikumbiro chekubatanidza
Chinhu chikuru checheki ndechekuona kuti matambudziko akaonekwa neanalyzer panguva yekubatanidza haawire mukati. tenzi bazi. Isu hatidiwo kuongorora chirongwa chese nguva dzese. Uyezve, pakubatanidza matavi, tine runyoro rwemafaira akachinjwa. Naizvozvo, ini ndinokurudzira kuwedzera cheki yekukumbira yekubatanidza.
Izvi ndizvo zvinoita chikumbiro chekubatanidza usati waita static analyzer:
Kureva, kukanganisa kwese kwaive mubazi kuchinja, ichaenda kubazi guru. Sezvo isu tisingade izvi, tinowedzera ongororo, uye zvino dhizaini rinotaridzika seizvi:
Tinoongorora shanduko2 uye, kana pasina zvikanganiso, tinobvuma chikumbiro chekubatanidza, tikasadaro tinochiramba.
Nenzira, kana iwe uchida kuongorora kuzvipira uye kudhonza zvikumbiro zveC / C ++, saka unogona kuverenga nezvazvo.
GitLab
Usati watanga kuongorora kubatanidza zvikumbiro, unofanirwa kunyoresa uye kurodha purojekiti yako. Kana iwe usingazive maitiro ekuita izvi, saka ini ndinokupa zano
taura pfungwa. Nzira yekugadzirisa zvakatipoteredza inotsanangurwa pasi apa ndeimwe yezvinobvira. Chinangwa ndechekuratidza matanho ekumisikidza nharaunda inodiwa pakuongorora uye kuvhura iyo analyzer. Zvichida mune yako zvingave zvakanyanya kunaka kuparadzanisa matanho ekugadzirira nharaunda (kuwedzera repositori, kuisa analyzer) uye kuongorora: semuenzaniso, kugadzirira Docker mifananidzo ine nharaunda inodiwa uye nekuishandisa, kana imwe nzira.
Kuti unzwisise zviri nani zvichaitika ikozvino, ini ndinokurudzira kutarisa pamufananidzo unotevera:
Iyo analyzer inoda .NET Core SDK 3 kuti ishande, saka usati waisa analyzer iwe unofanirwa kuwedzera maMicrosoft repositories kubva izvo zvinotsamira zvinodiwa kuti analyzer ichaiswa. Kuwedzera Microsoft repositories kune akasiyana Linux kugoverwa
Kuisa PVS-Studio kuburikidza nepakeji maneja, iwe zvakare uchafanirwa kuwedzera iyo PVS-Studio repositori. Kuwedzera repositories yekugovera kwakasiyana kunotsanangurwa zvakadzama mukati
Iyo analyzer inoda kiyi yerezinesi kuti ishande. Unogona kuwana rezinesi rekuyedza pa
taura pfungwa. Ndokumbira utarise kuti iyo yakatsanangurwa maitiro ekushanda (kuongororwa kwekubatanidza zvikumbiro) inoda Enterprise rezinesi. Naizvozvo, kana iwe uchida kuyedza iyi maitiro ekushanda, usakanganwa kuratidza mu "Mharidzo" ndima kuti unoda Enterprise rezinesi.
Kana chikumbiro chekubatanidza chikaitika, saka isu tinongoda kuongorora rondedzero yemafaira akachinjwa, zvikasadaro tinoongorora mafaera ese. Mushure mekuongorora, tinoda kushandura matanda kuita fomu yatinoda.
Iye zvino, uine algorithm yebasa pamberi pemeso ako, unogona kuenderera mberi nekunyora script. Kuti uite izvi, unofanirwa kuchinja faira .gitlab-ci.yml kana, kana isipo, igadzire. Kuti uigadzire, unofanirwa kudzvanya pazita reprojekiti yako -> Gadzira CI/CD.
Iye zvino takagadzirira kunyora script. Ngatitangei kunyora kodhi inozoisa analyzer uye tiise rezinesi:
before_script:
- apt-get update && apt-get -y install wget gnupg
- apt-get -y install git
- wget https://packages.microsoft.com/config/debian/10/
packages-microsoft-prod.deb -O packages-microsoft-prod.deb
- dpkg -i packages-microsoft-prod.deb
- apt-get update
- apt-get install apt-transport-https
- apt-get update
- wget -q -O - https://files.viva64.com/etc/pubkey.txt | apt-key add -
- wget -O /etc/apt/sources.list.d/viva64.list
https://files.viva64.com/etc/viva64.list
- apt-get update
- apt-get -y install pvs-studio-dotnet
- pvs-studio-analyzer credentials $PVS_NAME $PVS_KEY
- dotnet restore "$CI_PROJECT_DIR"/Test/Test.sln
Sezvo kuisirwa uye activation kunofanirwa kuitika pamberi pemamwe ese mascript, isu tinoshandisa yakakosha label before_script. Rega nditsanangure chidimbu ichi zvishoma.
Kugadzirira kuisa analyzer:
- wget https://packages.microsoft.com/config/debian/10/
packages-microsoft-prod.deb -O packages-microsoft-prod.deb
- dpkg -i packages-microsoft-prod.deb
- apt-get update
- apt-get install apt-transport-https
- apt-get update
Kuwedzera PVS-Studio repositories uye analyzer:
- wget -q -O - https://files.viva64.com/etc/pubkey.txt | apt-key add -
- wget -O /etc/apt/sources.list.d/viva64.list
https://files.viva64.com/etc/viva64.list
- apt-get update
- apt-get -y install pvs-studio-dotnet
Rezinesi activation:
- pvs-studio-analyzer credentials $PVS_NAME $PVS_KEY
$PVS_NAME - Username.
$PVS_KEY - chigadzirwa kiyi.
Kudzoreredza kutsamira kweprojekiti kupi $CI_PROJECT_DIR - nzira yakazara kune dhairekitori reprojekiti:
- dotnet restore "$CI_PROJECT_DIR"/Path/To/Solution.sln
Kuti uwane ongororo chaiyo, purojekiti inofanirwa kuvakwa zvinobudirira, uye kutsamira kwayo kunofanirwa kudzoserwa (semuenzaniso, iwo anodiwa NuGet mapakeji anofanirwa kutorwa pasi).
Iwe unogona kuseta nharaunda dzakasiyana dzine ruzivo rwerezinesi nekudzvanya marongero, uye shure - mberi CI/CD.
Muhwindo rinovhurwa, tsvaga chinhu Zvinyorwa, tinya bhatani riri kurudyi wedzera uye wedzera zvinoshanduka. Mhedzisiro inofanira kutaridzika seizvi:
Iye zvino unogona kuenderera mberi nekuongorora. Chekutanga, ngatiwedzerei script kuti iongororwe zvizere. Kumureza -t tinopfuudza nzira inoenda kumhinduro kumureza -o nyora nzira yefaira umo mibairo yekuongorora ichanyorwa. Isu tinofarirawo kodhi yekudzoka. Muchiitiko ichi, isu tinofarira kushanda kumira apo kodhi yekudzoka ine ruzivo rwakapiwa yambiro panguva yekuongorora. Izvi ndizvo zvinoita chidimbu ichi:
job:
script:
- exit_code=0
- pvs-studio-dotnet -t "$CI_PROJECT_DIR"/Test/Test.sln -o
PVS-Studio.json || exit_code=$?
- exit_code=$((($exit_code & 8)/8))
- if [[ $exit_code == 1 ]]; then exit 1; else exit 0; fi
Dzorera makodhi anoshanda pamusimboti we bit mask. Semuenzaniso, kana nyevero dzakapiwa semugumisiro wekuongorora, ipapo kodhi yekudzoka ichave yakaenzana ne8. Kana reisensi inopera mukati memwedzi, ipapo kodhi yekudzoka ichave yakaenzana ne 4. Kana zvikanganiso zvakaonekwa panguva yekuongorora, uye rezinesi rinopera mukati memwedzi, iyo kodhi inodzoka, ese ari maviri hunhu achanyorwa: wedzera nhamba pamwe chete uye uwane yekupedzisira kodhi kodhi - 8+4 = 12. Nokudaro, nekutarisa mabheti anowirirana, ruzivo pamusoro pemarudzi akasiyana-siyana runogona kuwanikwa panguva yekuongorora. Makodhi ekudzosa anotsanangurwa zvakadzama mu "pvs-studio-dotnet (Linux / macOS) Return Codes" chikamu chegwaro "
Muchiitiko ichi, isu tinofarira makodhi ese ekudzoka uko 8 inoonekwa.
- exit_code=$((($exit_code & 8)/8))
Isu tinogashira 1 kana kodhi yekudzoka iine chidimbu chenhamba yatiri kufarira, zvikasadaro tichagamuchira 0.
Yave nguva yekuwedzera kubatanidza chikumbiro chekuongorora. Tisati taita izvi, ngatigadzirirei nzvimbo yezvinyorwa. Tinoda kuti iitwe chete kana chikumbiro chekubatanidza chaitika. Zvinoita seizvi:
merge:
script:
only:
- merge_requests
Ngatienderere mberi kune script pachayo. Ndainge ndatarisana nenyaya yekuti virtual muchina hapana chavanoziva nezvayo mavambo/tenzi. Saka ngatimubatsire zvishoma:
- git fetch origin
Iye zvino tinowana mutsauko pakati pematavi uye chengetedza mhedzisiro mukati txt faira:
- git diff --name-only origin/master $CI_COMMIT_SHA > pvs-fl.txt
Kupi $CI_COMMIT_SHA - hashi yekupedzisira kuzvipira.
Tevere, tinotanga kuongorora rondedzero yemafaira tichishandisa mureza -f. Isu tinoendesa iyo yakambogamuchirwa .txt faira kwairi. Zvakanaka, nekuenzanisa nekuongorora kwakazara, tinotarisa makodhi ekudzoka:
- exit_code=0
- pvs-studio-dotnet -t "$CI_PROJECT_DIR"/Test/Test.sln -f
pvs-fl.txt -o PVS-Studio.json || exit_code=$?
- exit_code=$((($exit_code & 8)/8))
- if [[ $exit_code == 1 ]]; then exit 1; else exit 0; fi
Iyo yakazara script yekutarisa chikumbiro chekubatanidza ichaita seizvi:
merge:
script:
- git fetch origin
- git diff --name-only origin/master $CI_COMMIT_SHA > pvs-fl.txt
- exit_code=0
- pvs-studio-dotnet -t "$CI_PROJECT_DIR"/Test/Test.sln -f
pvs-fl.txt -o PVS-Studio.json || exit_code=$?
- exit_code=$((($exit_code & 8)/8))
- if [[ $exit_code == 1 ]]; then exit 1; else exit 0; fi
only:
- merge_requests
Chinosara ndechekuwedzera kutendeuka kwelog mushure mekunge zvinyorwa zvese zvagadziriswa. Isu tinoshandisa label after_script uye utility purogi-inoshandura:
after_script:
- plog-converter -t html -o eLog ./PVS-Studio.json
Zvinobatsira
Nenzira, kana iwe uchida kushanda zviri nyore ne .json inoshuma munharaunda kubva kuIDE, ipapo ini ndinopa zano redu.
Kuti zvive nyore, hezvino .gitlab-ci.yml zvizere:
image: debian
before_script:
- apt-get update && apt-get -y install wget gnupg
- apt-get -y install git
- wget https://packages.microsoft.com/config/debian/10/
packages-microsoft-prod.deb -O packages-microsoft-prod.deb
- dpkg -i packages-microsoft-prod.deb
- apt-get update
- apt-get install apt-transport-https
- apt-get update
- wget -q -O - https://files.viva64.com/etc/pubkey.txt | apt-key add -
- wget -O /etc/apt/sources.list.d/viva64.list
https://files.viva64.com/etc/viva64.list
- apt-get update
- apt-get -y install pvs-studio-dotnet
- pvs-studio-analyzer credentials $PVS_NAME $PVS_KEY
- dotnet restore "$CI_PROJECT_DIR"/Test/Test.sln
merge:
script:
- git fetch origin
- git diff --name-only origin/master $CI_COMMIT_SHA > pvs-fl.txt
- exit_code=0
- pvs-studio-dotnet -t "$CI_PROJECT_DIR"/Test/Test.sln -f
pvs-fl.txt -o PVS-Studio.json || exit_code=$?
- exit_code=$((($exit_code & 8)/8))
- if [[ $exit_code == 1 ]]; then exit 1; else exit 0; fi
only:
- merge_requests
job:
script:
- exit_code=0
- pvs-studio-dotnet -t "$CI_PROJECT_DIR"/Test/Test.sln -o
PVS-Studio.json || exit_code=$?
- exit_code=$((($exit_code & 8)/8))
- if [[ $exit_code == 1 ]]; then exit 1; else exit 0; fi
after_script:
- plog-converter -t html -o eLog ./PVS-Studio.json
Paunenge wawedzera zvese kufaira, tinya pa Ita shanduko. Kuti uone kuti zvese zvakanaka, enda CI / CD -> Mapipi -> kumhanya. Iwindo remuchina rinovhurika, pamagumo panofanira kunge paine zvinotevera:
akaona Jobho akabudirira - kubudirira, zvese zvakanaka. Zvino unogona kuedza zvawakaita.
Mienzaniso yebasa
Semuenzaniso webasa, ngatigadzirei chirongwa chakareruka (in tenzi) iyo ichange iine mafaera akati wandei. Mushure meizvi, mune rimwe bazi tichashandura faira imwe chete uye edza kuita chikumbiro chekubatanidza.
Ngatitarisei nyaya mbiri: kana iyo yakagadziridzwa faira ine kukanganisa uye kana isina. Kutanga, muenzaniso une chikanganiso.
Ngatitii pane faira mubazi guru Program.cs, iyo isina zvikanganiso, asi mune rimwe bazi mugadziri akawedzera kukanganisa kodhi uye anoda kuita chikumbiro chekubatanidza. Chikanganiso chipi chaakaita hachina kunyanya kukosha, chinhu chikuru ndechekuti iripo. Somuenzaniso, mushandisi akanganwa Throw (Ehe,
void MyAwesomeMethod(String name)
{
if (name == null)
new ArgumentNullException(....);
// do something
....
}
Ngatitarisei mhedzisiro yekuongorora muenzaniso nekukanganisa. Zvakare kuti ndive nechokwadi chekuti faira rimwe chete rakapatsanurwa, ndakawedzera mureza -r kune pvs-studio-dotnet yekutanga mutsara:
Tinoona kuti analyzer akawana kukanganisa uye haana kubvumira kubatanidza mapazi.
Ngatitarisei muenzaniso pasina kukanganisa. Kugadzirisa kodhi:
void MyAwesomeMethod(String name)
{
if (name == null)
throw new ArgumentNullException(....);
// do something
....
}
Batanidza mhinduro dzekuongorora chikumbiro:
Sezvatinoona, hapana zvikanganiso zvakawanikwa, uye basa rekuita rakabudirira, izvo zvataida kuongorora.
mhedziso
Kusakura kodhi yakaipa usati wabatanidza matavi kuri nyore uye kunonakidza. Saka kana uri kushandisa CI/CD, edza kupinza static analyzer kuti utarise. Uyezve, izvi zvinoitwa zviri nyore.
Ndinokutendai uchicherechedze.
Kana iwe uchida kugovera chinyorwa ichi nevateereri vanotaura Chirungu, tapota shandisa shanduro yekushandura: Nikolay Mironov.
Source: www.habr.com