Greining á sameiningarbeiðnum í GitLab með PVS-Studio fyrir C#

Greining á sameiningarbeiðnum í GitLab með PVS-Studio fyrir C#
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.

PVS-stúdíó er tæki til að bera kennsl á villur og hugsanlega veikleika í frumkóða forrita sem eru skrifuð í C, C++, C# og Java. Virkar á 64-bita kerfum á Windows, Linux og macOS. Getur greint kóða sem hannaður er fyrir 32-bita, 64-bita og innbyggða ARM palla.

Við gáfum út PVS-Studio 7.08, þar sem við gerðum ýmislegt áhugavert. Til dæmis:

  • 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:

Greining á sameiningarbeiðnum í GitLab með PVS-Studio fyrir C#
Þ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:

Greining á sameiningarbeiðnum í GitLab með PVS-Studio fyrir C#
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ð hér.

GitLab

GitLab er opinn uppspretta vef-undirstaða DevOps líftíma tól sem býður upp á kóða geymslustjórnunarkerfi fyrir Git með eigin wiki, útgáfu rakningarkerfi, CI/CD leiðslu og öðrum eiginleikum.

Áð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ð grein samstarfsmaður minn.

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:

Greining á sameiningarbeiðnum í GitLab með PVS-Studio fyrir C#
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 lýst í samsvarandi skjali.

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 í viðeigandi hluta skjala.

Greiningartækið þarf leyfislykil til að starfa. Hægt er að fá prufuleyfi á niðurhalssíða greiningartækis.

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.

Greining á sameiningarbeiðnum í GitLab með PVS-Studio fyrir C#
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.

Greining á sameiningarbeiðnum í GitLab með PVS-Studio fyrir C#
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:

Greining á sameiningarbeiðnum í GitLab með PVS-Studio fyrir C#
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 „Athugaðu Visual Studio / MSBuild / .NET Core verkefni frá skipanalínunni með PVS-Studio".

Í þ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 plog-breytir er opinn uppspretta verkefni sem er notað til að umbreyta þáttunarvilluskýrslum í ýmis form, svo sem HTML. Nánari lýsing á tólinu er að finna í undirkaflanum "Plog Converter Utility" viðeigandi hluta skjala.

Við the vegur, ef þú vilt vinna með .json skýrslur á staðnum frá IDE, þá legg ég til okkar stinga inn fyrir IDE Rider. Notkun þess er lýst nánar í viðeigandi skjal.

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:

Greining á sameiningarbeiðnum í GitLab með PVS-Studio fyrir C#
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á, svo rangt):

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:

Greining á sameiningarbeiðnum í GitLab með PVS-Studio fyrir C#
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:

Greining á sameiningarbeiðnum í GitLab með PVS-Studio fyrir C#
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.

Greining á sameiningarbeiðnum í GitLab með PVS-Studio fyrir C#
Ef þú vilt deila þessari grein með enskumælandi áhorfendum, vinsamlegast notaðu þýðingartengilinn: Nikolay Mironov. Greining á sameiningarbeiðnum í GitLab með PVS-Studio fyrir C#.

Heimild: www.habr.com

Bæta við athugasemd