Elska GitLab og hata pöddur? Viltu bæta gæði frumkóðans þíns? Þá ertu kominn á réttan stað. Í dag munum við segja þér hvernig á að stilla PVS-Studio C# greiningartækið til að athuga sameiningarbeiðnir. Vertu með einhyrningastemningu og gleðilegan lestur fyrir alla.
Við gáfum út PVS-Studio 7.08, þar sem við gerðum ýmislegt
- C# greiningartæki fyrir Linux og macOS;
- viðbót fyrir Rider;
- nýjan skráalistaathugunarham.
Athugunarhamur skráarlista
Áður, til þess að athuga ákveðnar skrár, var nauðsynlegt að senda .xml með lista yfir skrár í greiningartækið. En þar sem þetta er ekki mjög þægilegt, höfum við bætt við möguleikanum á að flytja .txt, sem gerir lífið mjög einfalt.
Til að athuga tilteknar skrár verður þú að tilgreina fánann --sourceFiles (-f) og flytja .txt með lista yfir skrár. Það lítur svona út:
pvs-studio-dotnet -t path/to/solution.sln -f fileList.txt -o project.json
Ef þú hefur áhuga á að setja upp skuldbindingar eða draga beiðnir, geturðu líka gert það með þessari stillingu. Munurinn mun liggja í því að fá lista yfir skrár til að greina og fer eftir því hvaða kerfi þú notar.
Meginreglan um að athuga sameiningarbeiðni
Meginkjarni eftirlitsins er að tryggja að vandamál sem greiningartækið greinir við sameiningu falli ekki inn í húsbóndi útibú. Við viljum heldur ekki greina allt verkefnið í hvert skipti. Þar að auki, við sameiningu útibúa, höfum við lista yfir breyttar skrár. Þess vegna legg ég til að bæta við sameiningarbeiðni.
Svona lítur sameiningarbeiðni út áður en kyrrstöðugreiningartæki er innleitt:
Það er að segja allar villurnar sem voru í greininni breytingar, mun flytja í meistaraútibú. Þar sem við myndum ekki vilja þetta bætum við við greiningu og nú lítur skýringarmyndin svona út:
Við greinum breytingar 2 og ef engar villur eru samþykkjum við sameiningarbeiðnina, annars höfnum við henni.
Við the vegur, ef þú hefur áhuga á að greina skuldbindingar og draga beiðnir fyrir C/C++, þá geturðu lesið um það
GitLab
Áður en þú byrjar að greina sameiningarbeiðnir þarftu að skrá þig og hlaða upp verkefninu þínu. Ef þú veist ekki hvernig á að gera þetta, þá mæli ég með
Athugið. Aðferðin við að setja upp umhverfið sem lýst er hér að neðan er ein af þeim mögulegu. Markmiðið er að sýna skrefin til að setja upp umhverfið sem nauðsynlegt er fyrir greiningu og ræsa greiningartækið. Kannski í þínu tilviki væri ákjósanlegra að aðgreina stig umhverfisundirbúnings (bæta við geymslum, setja upp greiningartæki) og greiningu: til dæmis að útbúa Docker myndir með nauðsynlegu umhverfi og nota þær, eða einhverja aðra aðferð.
Til að skilja betur hvað mun gerast núna, legg ég til að þú skoðir eftirfarandi skýringarmynd:
Greiningartækið krefst .NET Core SDK 3 til að virka, svo áður en þú setur upp greiningartækið þarftu að bæta við Microsoft geymslum þar sem ósjálfstæðin sem krafist er fyrir greiningartækið verða sett upp. Bætir við Microsoft geymslum fyrir ýmsar Linux dreifingar
Til að setja upp PVS-Studio í gegnum pakkastjórann þarftu einnig að bæta við PVS-Studio geymslunum. Að bæta við geymslum fyrir mismunandi dreifingu er lýst nánar í
Greiningartækið þarf leyfislykil til að starfa. Hægt er að fá prufuleyfi á
Athugið. Vinsamlega athugið að aðferðin sem lýst er (greining á samrunabeiðnum) krefst Enterprise leyfis. Þess vegna, ef þú vilt prófa þennan aðgerðarmáta, ekki gleyma að gefa til kynna í reitnum „Skilaboð“ að þú þurfir Enterprise leyfi.
Ef sameiningarbeiðni á sér stað, þá þurfum við aðeins að greina listann yfir breyttar skrár, annars greinum við allar skrár. Eftir greiningu þurfum við að breyta annálunum í það snið sem við þurfum.
Nú, með reiknirit vinnunnar fyrir augum þínum, geturðu haldið áfram að skrifa handrit. Til að gera þetta þarftu að breyta skránni .gitlab-ci.yml eða, ef það er ekki til, búið til það. Til að búa það til þarftu að smella á heiti verkefnisins -> Settu upp CI/CD.
Nú erum við tilbúin að skrifa handritið. Við skulum fyrst skrifa kóðann sem mun setja upp greiningartækið og slá inn leyfið:
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
Þar sem uppsetning og virkjun verður að eiga sér stað á undan öllum öðrum forskriftum notum við sérstakan merkimiða fyrir_skrift. Leyfðu mér að útskýra þetta brot aðeins.
Undirbúningur að setja upp greiningartækið:
- 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
Bætir við PVS-Studio geymslum og greiningartæki:
- 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
Leyfisvirkjun:
- pvs-studio-analyzer credentials $PVS_NAME $PVS_KEY
$PVS_NAME - Notandanafn.
$PVS_KEY - vörulykill.
Endurheimt verkefni ósjálfstæði hvar $CI_PROJECT_DIR – full slóð að verkefnaskránni:
- dotnet restore "$CI_PROJECT_DIR"/Path/To/Solution.sln
Fyrir rétta greiningu verður að byggja verkefnið með góðum árangri og endurheimta ósjálfstæði þess (til dæmis verður að hlaða niður nauðsynlegum NuGet pakka).
Þú getur stillt umhverfisbreytur sem innihalda leyfisupplýsingar með því að smella Stilling, og eftir - á CI/CD.
Finndu hlutinn í glugganum sem opnast Breytur, smelltu á hnappinn til hægri Stækka og bæta við breytum. Útkoman ætti að líta svona út:
Nú er hægt að fara yfir í greiningu. Fyrst skulum við bæta við handriti til að fá heildargreiningu. Til fánans -t við förum leiðina að lausn fánans -o skrifaðu slóðina að skránni þar sem greiningarniðurstöðurnar verða skrifaðar. Við höfum líka áhuga á skilakóðanum. Í þessu tilviki höfum við áhuga á að aðgerðin hætti þegar skilakóði inniheldur upplýsingar um að viðvaranir hafi verið gefnar út við greininguna. Svona lítur þetta brot út:
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
Skilakóðar virka á meginreglunni um bitagrímu. Til dæmis, ef viðvaranir voru gefnar út vegna greiningarinnar, þá mun skilakóði vera jöfn 8. Ef leyfið rennur út innan mánaðar, þá mun skilakóði vera jafn 4. Ef villur fundust við greininguna, og leyfið rennur út innan mánaðar, kóðinn skilar, bæði gildin verða skrifuð: bættu tölunum saman og fáðu endanlega skilakóðann - 8+4=12. Þannig, með því að athuga samsvarandi bita, er hægt að fá upplýsingar um ýmis ástand við greiningu. Skilakóðum er lýst nánar í hlutanum „pvs-studio-dotnet (Linux / macOS) Skilakóðar“ í skjalinu „
Í þessu tilviki höfum við áhuga á öllum skilakóðum þar sem 8 kemur fyrir.
- exit_code=$((($exit_code & 8)/8))
Við fáum 1 þegar skilakóðinn inniheldur bitinn af númerinu sem við höfum áhuga á, annars fáum við 0.
Það er kominn tími til að bæta við sameiningarbeiðnagreiningu. Áður en við gerum þetta skulum við undirbúa stað fyrir handritið. Við þurfum að framkvæma hana aðeins þegar sameiningbeiðni á sér stað. Það lítur svona út:
merge:
script:
only:
- merge_requests
Við skulum halda áfram að handritinu sjálfu. Ég stóð frammi fyrir því að sýndarvélin veit ekkert um uppruna/meistari. Svo skulum við hjálpa henni aðeins:
- git fetch origin
Nú fáum við muninn á greinunum og vistum niðurstöðuna inn txt skrá:
- git diff --name-only origin/master $CI_COMMIT_SHA > pvs-fl.txt
Hvar $CI_COMMIT_SHA – kjötkássa síðasta commit.
Næst byrjum við að greina lista yfir skrár með því að nota fánann -f. Við flytjum áður móttekna .txt skrá yfir á hana. Jæja, á hliðstæðan hátt við alla greininguna lítum við á skilakóðana:
- 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
Heildarforskriftin til að athuga sameiningarbeiðni mun líta svona út:
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
Allt sem er eftir er að bæta við logumbreytingu eftir að búið er að vinna úr öllum forskriftum. Við notum merkið eftir_skrift og gagnsemi plog-breytir:
after_script:
- plog-converter -t html -o eLog ./PVS-Studio.json
Gagnsemi
Við the vegur, ef þú vilt vinna með .json skýrslur á staðnum frá IDE, þá legg ég til okkar
Til þæginda, hér er það .gitlab-ci.yml að fullu:
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
Þegar þú hefur bætt öllu við skrána, smelltu á Skuldbinda breytingar. Til að sjá að allt sé rétt skaltu fara á CI / CD -> Leiðslur -> Hlaupandi. Sýndarvélargluggi opnast, í lok hans ætti að vera eftirfarandi:
sá Job tókst - árangur, allt er í lagi. Nú geturðu prófað hvað þú hefur gert.
Vinnudæmi
Fyrir dæmi um vinnu skulum við búa til einfalt verkefni (í húsbóndi) sem mun innihalda nokkrar skrár. Eftir það, í annarri grein munum við breyta aðeins einni skrá og reyna að gera sameiningarbeiðni.
Við skulum íhuga tvö tilvik: þegar breytta skráin inniheldur villu og þegar hún gerir það ekki. Í fyrsta lagi dæmi með villu.
Segjum að það sé skrá í aðalgreininni Program.cs, sem inniheldur ekki villur, en í annarri grein bætti verktaki við röngum kóða og vill leggja fram sameiningarbeiðni. Hvers konar mistök hann gerði er ekki svo mikilvægt, aðalatriðið er að þau séu til. Til dæmis gleymdi rekstraraðili kasta (Já,
void MyAwesomeMethod(String name)
{
if (name == null)
new ArgumentNullException(....);
// do something
....
}
Við skulum skoða niðurstöðuna af því að greina dæmi með villu. Einnig til að tryggja að aðeins ein skrá væri þáttuð bætti ég við fánanum -r til pvs-studio-dotnet kynningarlínunnar:
Við sjáum að greiningartækið fann villu og leyfði ekki sameiningu útibúa.
Við skulum athuga dæmið án villu. Leiðrétting á kóða:
void MyAwesomeMethod(String name)
{
if (name == null)
throw new ArgumentNullException(....);
// do something
....
}
Sameina niðurstöður beiðnagreiningar:
Eins og við sjáum fundust engar villur og framkvæmd verksins tókst vel, sem við vildum athuga.
Ályktun
Það er mjög þægilegt og notalegt að eyða slæmum kóða fyrir sameiningu útibúa. Þannig að ef þú ert að nota CI/CD, reyndu að setja inn static greiningartæki til að athuga. Þar að auki er þetta einfaldlega gert.
Þakka þér fyrir athygli þína.
Ef þú vilt deila þessari grein með enskumælandi áhorfendum, vinsamlegast notaðu þýðingartengilinn: Nikolay Mironov.
Heimild: www.habr.com