Ongororo yekubatanidza zvikumbiro muGitLab uchishandisa PVS-Studio yeC #.

Ongororo yekubatanidza zvikumbiro muGitLab uchishandisa PVS-Studio yeC #.
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.

PVS Studio chishandiso chekuziva zvikanganiso uye zvinogona kukanganisa mune sosi kodhi yezvirongwa zvakanyorwa muC, C ++, C # uye Java. Inoshanda pane 64-bit masisitimu paWindows, Linux uye macOS. Inogona kuongorora kodhi yakagadzirirwa 32-bit, 64-bit uye yakamisikidzwa ARM mapuratifomu.

Nenzira, takaburitsa PVS-Studio 7.08, umo takaita zvinhu zvakawanda zvinonakidza. Somuenzaniso:

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

Ongororo yekubatanidza zvikumbiro muGitLab uchishandisa PVS-Studio yeC #.
Kureva, kukanganisa kwese kwaive mubazi kuchinja, ichaenda kubazi guru. Sezvo isu tisingade izvi, tinowedzera ongororo, uye zvino dhizaini rinotaridzika seizvi:

Ongororo yekubatanidza zvikumbiro muGitLab uchishandisa PVS-Studio yeC #.
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. pano.

GitLab

GitLab ndeye yakavhurika sosi webhu-yakavakirwa DevOps lifecycle chishandiso chinopa kodhi repository manejimendi system yeGit ine yayo wiki, nyaya yekutevera system, CI/CD pombi uye zvimwe zvinhu.

Usati watanga kuongorora kubatanidza zvikumbiro, unofanirwa kunyoresa uye kurodha purojekiti yako. Kana iwe usingazive maitiro ekuita izvi, saka ini ndinokupa zano chinyorwa shamwari yangu.

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:

Ongororo yekubatanidza zvikumbiro muGitLab uchishandisa PVS-Studio yeC #.
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 inotsanangurwa mugwaro rinoenderana.

Kuisa PVS-Studio kuburikidza nepakeji maneja, iwe zvakare uchafanirwa kuwedzera iyo PVS-Studio repositori. Kuwedzera repositories yekugovera kwakasiyana kunotsanangurwa zvakadzama mukati chikamu chakakodzera chezvinyorwa.

Iyo analyzer inoda kiyi yerezinesi kuti ishande. Unogona kuwana rezinesi rekuyedza pa analyzer download peji.

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.

Ongororo yekubatanidza zvikumbiro muGitLab uchishandisa PVS-Studio yeC #.
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.

Ongororo yekubatanidza zvikumbiro muGitLab uchishandisa PVS-Studio yeC #.
Muhwindo rinovhurwa, tsvaga chinhu Zvinyorwa, tinya bhatani riri kurudyi wedzera uye wedzera zvinoshanduka. Mhedzisiro inofanira kutaridzika seizvi:

Ongororo yekubatanidza zvikumbiro muGitLab uchishandisa PVS-Studio yeC #.
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 "Kutarisa Visual Studio / MSBuild / .NET Core mapurojekiti kubva kumutsara wekuraira uchishandisa PVS-Studio".

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 purogi-inoshandura ndeye yakavhurika sosi purojekiti iyo inoshandiswa kushandura parser kukanganisa mishumo kuita akasiyana mafomu, senge HTML. Tsanangudzo yakadzama yezvishandiso inopiwa muchikamu che "Plog Converter Utility" chikamu chakakodzera chezvinyorwa.

Nenzira, kana iwe uchida kushanda zviri nyore ne .json inoshuma munharaunda kubva kuIDE, ipapo ini ndinopa zano redu. pfekera yeIDE Rider. Kushandiswa kwayo kunotsanangurwa zvakadzama mu gwaro rakakodzera.

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:

Ongororo yekubatanidza zvikumbiro muGitLab uchishandisa PVS-Studio yeC #.
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, zvisizvo):

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:

Ongororo yekubatanidza zvikumbiro muGitLab uchishandisa PVS-Studio yeC #.
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:

Ongororo yekubatanidza zvikumbiro muGitLab uchishandisa PVS-Studio yeC #.
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.

Ongororo yekubatanidza zvikumbiro muGitLab uchishandisa PVS-Studio yeC #.
Kana iwe uchida kugovera chinyorwa ichi nevateereri vanotaura Chirungu, tapota shandisa shanduro yekushandura: Nikolay Mironov. Ongororo yekubatanidza zvikumbiro muGitLab uchishandisa PVS-Studio yeC #..

Source: www.habr.com

Voeg