Armastad GitLabi ja vihkad vigu? Kas soovite oma lähtekoodi kvaliteeti parandada? Siis olete jõudnud õigesse kohta. Täna räägime teile, kuidas konfigureerida PVS-Studio C# analüsaatorit ühendamistaotluste kontrollimiseks. Ükssarviku meeleolu ja mõnusat lugemist kõigile.
Muide, andsime välja PVS-Studio 7.08, milles tegime palju asju
- C# analüsaator Linuxi ja macOS-i jaoks;
- Rideri pistikprogramm;
- uue faililoendi kontrollimise režiim.
Failide loendi kontrollimise režiim
Varem oli teatud failide kontrollimiseks vaja analüsaatorisse edastada failide nimekirjaga .xml. Aga kuna see pole eriti mugav, oleme lisanud .txt edastamise võimaluse, mis teeb elu väga lihtsaks.
Konkreetsete failide kontrollimiseks peate määrama lipu --allikafailid (-f) ja teisaldage .txt koos failide loendiga. See näeb välja selline:
pvs-studio-dotnet -t path/to/solution.sln -f fileList.txt -o project.json
Kui olete huvitatud kohustuste kontrollimise või tõmbamistaotluste seadistamisest, saate seda teha ka selles režiimis. Erinevus seisneb analüüsitavate failide loendi hankimises ja see sõltub sellest, milliseid süsteeme te kasutate.
Ühinemistaotluse kontrollimise põhimõte
Kontrollimise põhiolemus on tagada, et analüsaatori poolt ühendamisel tuvastatud probleemid ei satuks süsteemi meister haru. Samuti ei taha me iga kord kogu projekti analüüsida. Veelgi enam, filiaalide ühendamisel on meil muudetud failide loend. Seetõttu soovitan lisada liitmistaotluse kontrolli.
Selline näeb välja liitmistaotlus enne staatilise analüsaatori rakendamist:
See tähendab, et kõik vead, mis filiaalis olid muutused, kolib põhiharusse. Kuna me seda ei sooviks, lisame analüüsi ja nüüd näeb diagramm välja selline:
Analüüsides muutused2 ja kui vigu pole, aktsepteerime liitmistaotlust, vastasel juhul lükkame selle tagasi.
Muide, kui olete huvitatud C/C++ sissekannete ja tõmbamistaotluste analüüsimisest, siis võite selle kohta lugeda
GitLab
Enne liitmistaotluste analüüsi alustamist peate registreeruma ja oma projekti üles laadima. Kui te ei tea, kuidas seda teha, siis soovitan
Märkus. Allpool kirjeldatud keskkonna seadistamise meetod on üks võimalikest. Eesmärk on näidata samme analüüsiks vajaliku keskkonna seadistamiseks ja analüsaatori käivitamiseks. Võib-olla oleks Sinu puhul optimaalsem eraldada keskkonna ettevalmistamise (hoidlate lisamine, analüsaatori paigaldamine) ja analüüsi etapid: näiteks Dockeri piltide ettevalmistamine koos vajaliku keskkonnaga ja nende kasutamine või mõni muu meetod.
Et paremini mõista, mis nüüd juhtub, soovitan vaadata järgmist diagrammi:
Analüsaator vajab töötamiseks .NET Core SDK 3, seega tuleb enne analüsaatori paigaldamist lisada Microsofti hoidlad, kust analüsaatori jaoks vajalikud sõltuvused installeeritakse. Microsofti hoidlate lisamine erinevatele Linuxi distributsioonidele
PVS-Studio installimiseks paketihalduri kaudu peate lisama ka PVS-Studio hoidlad. Erinevate distributsioonide hoidlate lisamist kirjeldatakse üksikasjalikumalt artiklis
Analüsaatori tööks on vaja litsentsivõtit. Proovilitsentsi saate aadressil
Märkus. Pange tähele, et kirjeldatud töörežiim (liitmistaotluste analüüs) nõuab ettevõtte litsentsi. Seetõttu, kui soovite seda töörežiimi proovida, ärge unustage väljale "Sõnum" märkida, et vajate ettevõtte litsentsi.
Kui tekib liitmistaotlus, peame analüüsima ainult muudetud failide loendit, vastasel juhul analüüsime kõiki faile. Pärast analüüsi peame teisendama logid meile vajalikusse vormingusse.
Nüüd, kui tööalgoritm on teie silme ees, võite liikuda skripti kirjutamise juurde. Selleks peate faili muutma .gitlab-ci.yml või kui seda pole, looge see. Selle loomiseks peate klõpsama oma projekti nimel -> Seadistage CI/CD.
Nüüd oleme valmis stsenaariumi kirjutama. Kirjutame esmalt analüsaatori installimise koodi ja sisestame litsentsi:
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
Kuna installimine ja aktiveerimine peavad toimuma enne kõiki teisi skripte, kasutame spetsiaalset silti enne_skripti. Lubage mul seda fragmenti veidi selgitada.
Analüsaatori paigaldamise ettevalmistamine:
- 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
PVS-Studio hoidlate ja analüsaatori lisamine:
- 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
Litsentsi aktiveerimine:
- pvs-studio-analyzer credentials $PVS_NAME $PVS_KEY
$PVS_NAME - Kasutajanimi.
$PVS_KEY - tootevõti.
Projekti sõltuvuste taastamine kus $CI_PROJECT_DIR – täielik tee projektikataloogi:
- dotnet restore "$CI_PROJECT_DIR"/Path/To/Solution.sln
Korrektseks analüüsiks tuleb projekt edukalt üles ehitada ja selle sõltuvused taastada (näiteks alla laadida vajalikud NuGeti paketid).
Litsentsiteavet sisaldavaid keskkonnamuutujaid saate määrata klõpsates Kehtestamine, ja pärast - sisse CI/CD.
Leidke avanevas aknas üksus Muutujad, klõpsake paremal asuvat nuppu Laiendama ja lisada muutujaid. Tulemus peaks välja nägema selline:
Nüüd saate analüüsi juurde minna. Esmalt lisame täieliku analüüsi jaoks skripti. Lipu juurde -t läbime tee lahenduse juurde lipule -o kirjutage faili tee, kuhu analüüsitulemused kirjutatakse. Oleme huvitatud ka tagastuskoodist. Sel juhul oleme huvitatud, et toiming peatuks, kui tagastuskood sisaldab teavet selle kohta, et analüüsi käigus anti hoiatusi. See fragment näeb välja selline:
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
Tagastuskoodid töötavad bitimaski põhimõttel. Näiteks kui analüüsi tulemusena tehti hoiatusi, siis tagastamiskood võrdub 8-ga. Kui tegevusluba aegub kuu aja jooksul, siis on tagastuskood võrdne 4-ga. Kui analüüsi käigus tuvastati vigu, siis on tagastuskood võrdne 8-ga. ja litsents aegub kuu aja jooksul, tagastab kood, kirjutatakse mõlemad väärtused: liitke numbrid kokku ja saate lõpliku tagastuskoodi - 4+12=XNUMX. Seega saab vastavaid bitte kontrollides analüüsi käigus saada infot erinevate olekute kohta. Tagastuskoode kirjeldatakse üksikasjalikumalt dokumendi "pvs-studio-dotnet (Linux / macOS) tagastuskoodid" jaotises "
Sel juhul oleme huvitatud kõigist tagastuskoodidest, kus kuvatakse 8.
- exit_code=$((($exit_code & 8)/8))
1 saame siis, kui tagastuskood sisaldab meid huvitava numbri bitti, vastasel juhul saame 0.
On aeg lisada liitmistaotluse analüüs. Enne kui seda teeme, valmistame ette skripti jaoks koha. Peame seda täitma ainult siis, kui esitatakse ühendamistaotlus. See näeb välja selline:
merge:
script:
only:
- merge_requests
Liigume edasi skripti enda juurde. Seisin silmitsi tõsiasjaga, et virtuaalmasin ei tea sellest midagi päritolu/meister. Nii et aitame teda natuke:
- git fetch origin
Nüüd saame harude erinevuse ja salvestame tulemuse sisse txt fail:
- git diff --name-only origin/master $CI_COMMIT_SHA > pvs-fl.txt
kus $CI_COMMIT_SHA – viimase sidumise räsi.
Järgmisena hakkame lipu abil failide loendit analüüsima -f. Edastame sellele eelnevalt saadud .txt faili. Noh, analoogselt täieliku analüüsiga vaatame tagastuskoode:
- 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
Liitmistaotluse kontrollimise täielik skript näeb välja järgmine:
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
Jääb vaid lisada logikonversioon pärast kõigi skriptide töötlemist. Kasutame silti järel_skript ja kasulikkust plog-muundur:
after_script:
- plog-converter -t html -o eLog ./PVS-Studio.json
Utiliit
Muide, kui soovite mugavalt töötada IDE-st pärit .json-aruannetega, siis soovitan meie
Mugavuse huvides on see siin .gitlab-ci.yml täielikult:
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
Kui olete kõik faili lisanud, klõpsake nuppu Tehke muudatused. Selleks, et näha, kas kõik on õige, minge aadressile CI / CD -> Torujuhtmed -> Running. Avaneb virtuaalmasina aken, mille lõpus peaks olema järgmine teave:
Saag Töö õnnestus - edu, kõik on hästi. Nüüd saate testida, mida olete teinud.
Näited töödest
Töö näite jaoks loome lihtsa projekti (in meister), mis sisaldab mitut faili. Pärast seda muudame teises harus ainult ühte faili ja proovime teha liitmistaotluse.
Vaatleme kahte juhtumit: kui muudetud fail sisaldab viga ja millal mitte. Esiteks näide veaga.
Oletame, et põhiharus on fail Programm.cs, mis ei sisalda vigu, kuid teises harus lisas arendaja vigase koodi ja soovib teha liitmistaotluse. Millise vea ta tegi, polegi nii oluline, peaasi, et see on olemas. Näiteks operaator unustas viskama (jah,
void MyAwesomeMethod(String name)
{
if (name == null)
new ArgumentNullException(....);
// do something
....
}
Vaatame veaga näite analüüsimise tulemust. Samuti lisasin lipu, et veenduda, et sõeluti ainult üks fail -r pvs-studio-dotneti käivitusliinile:
Näeme, et analüsaator leidis vea ja ei lubanud harusid liita.
Kontrollime näidet ilma veata. Koodi parandamine:
void MyAwesomeMethod(String name)
{
if (name == null)
throw new ArgumentNullException(....);
// do something
....
}
Ühenda taotluse analüüsi tulemused:
Nagu näeme, vigu ei leitud ja ülesande täitmine oli edukas, mida tahtsime kontrollida.
Järeldus
Halva koodi väljarookimine enne harude liitmist on väga mugav ja meeldiv. Nii et kui kasutate CI/CD-d, proovige kontrollimiseks manustada staatiline analüsaator. Pealegi tehakse seda üsna lihtsalt.
Tänan teid tähelepanu eest.
Kui soovite seda artiklit inglise keelt kõneleva publikuga jagada, kasutage tõlkelinki: Nikolai Mironov.
Allikas: www.habr.com