Tlhahlobo ea likopo tsa ho kopanya ho GitLab u sebelisa PVS-Studio bakeng sa C #.

Tlhahlobo ea likopo tsa ho kopanya ho GitLab u sebelisa PVS-Studio bakeng sa C #.
Na u rata GitLab 'me u hloile likokoana-hloko? U batla ho ntlafatsa boleng ba khoutu ea hau ea mohloli? Ebe u fihla sebakeng se nepahetseng. Kajeno re tla u bolella mokhoa oa ho lokisa PVS-Studio C # analyzer ho hlahloba likopo tsa ho kopanya. Eba le maikutlo a unicorn le ho balla motho e mong le e mong ka thabo.

Studio-PVS ke sesebelisoa sa ho khetholla liphoso le bofokoli bo ka bang teng mohloling oa mohloli oa mananeo a ngotsoeng ho C, C ++, C # le Java. E sebetsa ho sistimi ea 64-bit ho Windows, Linux le macOS. E ka sekaseka khoutu e etselitsoeng li-platform tsa 32-bit, 64-bit le tse kenelletseng tsa ARM.

Ka tsela, re ile ra lokolla PVS-Studio 7.08, eo ho eona re entseng lintho tse ngata thahasellisang. Ka mohlala:

  • C # analyzer bakeng sa Linux le macOS;
  • plugin bakeng sa Rider;
  • mokhoa o mocha oa ho hlahloba lenane la lifaele.

Mokhoa oa ho hlahloba lenane la lifaele

Nakong e fetileng, e le hore u hlahlobe lifaele tse itseng, ho ne ho hlokahala hore u fetise .xml ka lethathamo la lifaele ho mohlahlobi. Empa kaha sena ha se bonolo haholo, re kentse bokhoni ba ho fetisetsa .txt, e leng se etsang hore bophelo bo be bonolo haholo.

E le hore u hlahlobe lifaele tse itseng, u tlameha ho hlakisa folakha --sourceFiles (-f) le ho fetisa .txt ka lethathamo la lifaele. E shebahala tjena:

pvs-studio-dotnet -t path/to/solution.sln -f fileList.txt -o project.json

Haeba u thahasella ho theha likopo tsa ho hlahloba kapa ho hula, u ka etsa joalo ka mokhoa ona. Phapang e tla ba ho fumana lethathamo la lifaele tseo u lokelang ho li hlahloba 'me ho tla itšetleha ka hore na u sebelisa mekhoa efe.

Molao-motheo oa ho hlahloba kopo ea ho kopanya

Ntho e ka sehloohong ea cheke ke ho netefatsa hore mathata a fumanoeng ke mohlahlobi nakong ea ho kopanya ha a oele ho mong'a lekala. Hape ha re batle ho sekaseka morero kaofela nako le nako. Ho feta moo, ha re kopanya makala, re na le lethathamo la lifaele tse fetotsoeng. Ka hona, ke khothaletsa ho eketsa tlhahlobo ea kopo ea ho kopanya.

Sena ke kamoo kopo ea ho kopanya e shebahalang kateng pele o kenya ts'ebetsong analyzer e tsitsitseng:

Tlhahlobo ea likopo tsa ho kopanya ho GitLab u sebelisa PVS-Studio bakeng sa C #.
Ke hore liphoso tsohle tse neng li le lekaleng liphetoho, e tla fallela lekaleng le leholo. Kaha re ne re sa batle sena, re eketsa tlhahlobo, 'me joale setšoantšo se shebahala tjena:

Tlhahlobo ea likopo tsa ho kopanya ho GitLab u sebelisa PVS-Studio bakeng sa C #.
Re sekaseka liphetoho2 'me, haeba ho se na liphoso, re amohela kopo ea ho kopanya, ho seng joalo re e hana.

Ka tsela, haeba u thahasella ho sekaseka boitlamo le ho hula likopo tsa C/C++, u ka bala ka eona. mona.

GitLab

GitLab ke sesebelisoa se bulehileng sa marang-rang sa DevOps se fanang ka sistimi ea taolo ea polokelo ea khoutu bakeng sa Git e nang le wiki ea eona, sistimi ea ho latela litaba, phala ea CI/CD le likarolo tse ling.

Pele o qala ho sekaseka likopo tsa ho kopanya, o hloka ho ingolisa le ho kenya projeke ea hau. Haeba u sa tsebe ho etsa sena, joale ke fana ka tlhahiso sengoloa mosebetsi-'moho le 'na.

mantsoe. Mokhoa oa ho theha tikoloho o hlalositsoeng ka tlase ke o mong oa mekhoa e ka khonehang. Sepheo ke ho bontša mehato ea ho theha tikoloho e hlokahalang bakeng sa ho hlahloba le ho qala analyzer. Mohlomong molemong oa hau ho ka ba molemo haholo ho arola mekhahlelo ea ho lokisa tikoloho (ho eketsa polokelo, ho kenya analyzer) le tlhahlobo: mohlala, ho lokisa litšoantšo tsa Docker le tikoloho e hlokahalang le ho li sebelisa, kapa mokhoa o mong.

Ho utloisisa hantle se tla etsahala hona joale, ke fana ka maikutlo a ho sheba setšoantšo se latelang:

Tlhahlobo ea likopo tsa ho kopanya ho GitLab u sebelisa PVS-Studio bakeng sa C #.
Mohlahlobi o hloka hore .NET Core SDK 3 e sebetse, kahoo pele o kenya analyzer o hloka ho eketsa li-repositories tsa Microsoft tseo ho tsona ho tla kenngoa litšepiso tse hlokahalang bakeng sa mohlahlobi. Ho eketsa polokelo ea Microsoft bakeng sa liphaello tse fapaneng tsa Linux e hlalositsoeng tokomaneng e tsamaellanang le yona.

Ho kenya PVS-Studio ka mookameli oa sephutheloana, o tla hloka hape ho kenyelletsa polokelo ea PVS-Studio. Ho eketsa polokelo bakeng sa likabo tse fapaneng ho hlalositsoe ka botlalo ho karolo e amehang ea litokomane.

Analyzer e hloka senotlolo sa laesense ho sebetsa. U ka fumana lengolo la tumello ho analyzer download leqephe.

mantsoe. Ka kopo hlokomela hore mokhoa o hlalositsoeng oa ts'ebetso (tlhahlobo ea likopo tsa ho kopanya) o hloka laesense ea Khoebo. Ka hona, haeba u batla ho leka mokhoa ona oa ts'ebetso, u se ke ua lebala ho bontša tšimong ea "Molaetsa" hore u hloka lengolo la khoebo.

Haeba kopo ea ho kopanya e etsahala, joale re hloka ho sekaseka feela lethathamo la lifaele tse fetotsoeng, ho seng joalo re sekaseka lifaele tsohle. Ka mor'a tlhahlobo, re hloka ho fetola li-logs ka mokhoa oo re o hlokang.

Hona joale, ho ba le algorithm ea mosebetsi ka pel'a mahlo a hau, u ka tsoela pele ho ngola script. Ho etsa sena, o hloka ho fetola file .gitlab-ci.yml kapa, ha e le siyo, e bope. Ho e theha, o hloka ho tobetsa lebitsong la morero oa hau -> Theha CI/CD.

Tlhahlobo ea likopo tsa ho kopanya ho GitLab u sebelisa PVS-Studio bakeng sa C #.
Hona joale re se re loketse ho ngola script. Ha re qale ka ho ngola khoutu e tla kenya analyzer ebe o kenya laesense:

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

Kaha ho kenya le ho kenya tshebetsong ho tlameha ho etsahala pele ho mangolo a mang kaofela, re sebelisa leibole e khethehileng pele_sengoloa. E re ke hlalose sekhechana sena hanyane.

Ho itokisetsa ho kenya 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

Ho eketsa polokelo ea PVS-Studio le 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

Kenya laesense:

  - pvs-studio-analyzer credentials $PVS_NAME $PVS_KEY

$PVS_NAME - Username.

$PVS_KEY - senotlolo sa sehlahisoa.

Ho khutlisa litšepeho tsa morero moo $CI_PROJECT_DIR - tsela e felletseng ea bukana ea morero:

  - dotnet restore "$CI_PROJECT_DIR"/Path/To/Solution.sln

Bakeng sa tlhahlobo e nepahetseng, projeke e tlameha ho hahuoa ka katleho, 'me litšepeho tsa eona li tlameha ho khutlisoa (mohlala, liphutheloana tse hlokahalang tsa NuGet li tlameha ho jarollwa).

O ka seta maemo a tikoloho a nang le tlhaiso-leseling ea laesense ka ho tobetsa ho ipehela, 'me ka mor'a moo CI/CD.

Tlhahlobo ea likopo tsa ho kopanya ho GitLab u sebelisa PVS-Studio bakeng sa C #.
Fesetereng e butsoeng, fumana ntho eo Mefuta-futa, tobetsa konopo e ka ho le letona Eketsa le ho eketsa mefuta e fapaneng. Sephetho se lokela ho shebahala tjena:

Tlhahlobo ea likopo tsa ho kopanya ho GitLab u sebelisa PVS-Studio bakeng sa C #.
Hona joale o ka tsoela pele ho hlahloba. Taba ea pele, ha re kenyeng mongolo bakeng sa tlhahlobo e felletseng. Ho ea folakha -t re fetisa tsela e isang tharollong ea folakha -o ngola tsela ea faele eo liphetho tsa tlhahlobo li tla ngoloa ho eona. Re boetse re thahasella khoutu ea ho khutlela. Tabeng ena, re thahasella ho emisa ts'ebetso ha khoutu ea ho khutlisa e na le tlhahisoleseding ea hore litemoso li fanoe nakong ea tlhahlobo. Sena ke hore na sekhechana sena se shebahala joang:

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

Likhoutu tsa ho khutlisa li sebetsa ka molao-motheo oa maske hanyane. Ka mohlala, haeba litemoso li fanoe ka lebaka la tlhahlobo, joale khoutu ea ho khutlisa e tla lekana le 8. Haeba lengolo la tumello le fela ka hare ho khoeli, joale khoutu ea ho khutlisa e tla lekana le 4. Haeba liphoso li ile tsa fumanoa nakong ea tlhahlobo, mme laesense e felloa ke nako nakong ea khoeli, khoutu e khutla, litekanyetso ka bobeli li tla ngoloa: eketsa linomoro hammoho 'me u fumane khoutu ea ho qetela ea ho khutla - 8+4=12. Kahoo, ka ho hlahloba likotoana tse tsamaellanang, tlhahisoleseling mabapi le linaha tse fapaneng e ka fumanoa nakong ea tlhahlobo. Likhoutu tsa ho khutlisa li hlalositsoe ka botlalo ho "pvs-studio-dotnet (Linux / macOS) Return Codes" karolong ea tokomane "Ho hlahloba Visual Studio / MSBuild / .NET Core merero e tsoang molaong oa taelo o sebelisa PVS-Studio".

Tabeng ena, re thahasella mekhoa eohle ea ho khutlela moo 8 e hlahang teng.

  - exit_code=$((($exit_code & 8)/8))

Re tla amohela 1 ha khoutu ea ho khutla e na le palo e nyane eo re e ratang, ho seng joalo re tla fumana 0.

Ke nako ea ho kenya tlhahlobo ea kopo ea ho kopanya. Pele re etsa sena, a re lokisetseng sebaka sa script. Re hloka hore e etsoe feela ha kopo ea ho kopanya e etsahala. E shebahala tjena:

merge:
  script:
  only:
  - merge_requests

Ha re feteleng ho script ka boeona. Ke ne ke tobane le taba ea hore mochine oa sebele ha o tsebe letho ka tšimoloho/master. Kahoo ha re mo thuse hanyane:

  - git fetch origin

Hona joale re fumana phapang pakeng tsa makala le ho boloka sephetho ho txt faele:

  - git diff --name-only origin/master $CI_COMMIT_SHA > pvs-fl.txt

Moo $CI_COMMIT_SHA - hash ea boitlamo ba ho qetela.

Ka mor'a moo, re qala ho hlahloba lethathamo la lifaele tse sebelisang folakha -f. Re fetisetsa faele e fumanoeng pele ea .txt ho eona. Hantle, ka papiso le tlhahlobo e felletseng, re sheba likhoutu tsa ho khutla:

  - 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

Sengoloa se felletseng sa ho lekola kopo ea ho kopanya se tla shebahala tjena:

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

Ho setseng ke ho kenya phetoho ea log ka mor'a hore mangolo ohle a sebetsoe. Re sebelisa label after_script le thuso mofetoheli oa pola:

after_script:
  - plog-converter -t html -o eLog ./PVS-Studio.json

Tšebeliso mofetoheli oa pola ke projeke ea mohloli o bulehileng o sebelisoang ho fetolela litlaleho tsa liphoso tsa mohlahlobi hore e be mefuta e fapaneng, joalo ka HTML. Tlhaloso e qaqileng haholoanyane ea ts'ebeliso e fanoe ka tlas'a "Plog Converter Utility" karolo e amehang ea litokomane.

Ka tsela, haeba u batla ho sebetsa le .json litlaleho sebakeng sa heno ho tsoa ho IDE, joale ke fana ka maikutlo a rona. plugin bakeng sa IDE Rider. Tšebeliso ea eona e hlalosoa ka ho qaqileng haholoanyane ho tokomane e amehang.

Bakeng sa boiketlo, ke ena .gitlab-ci.yml ka botlalo:

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

Hang ha u se u kentse tsohle faeleng, tobetsa Etsa liphetoho. E le hore u bone hore ntho e 'ngoe le e' ngoe e nepahetse, e-ea ho CI / CD -> Lipeipi -> matha. Ho tla buloa fensetere ea mochini o hlakileng, eo qetellong ea eona ho lokelang ho ba le tse latelang:

Tlhahlobo ea likopo tsa ho kopanya ho GitLab u sebelisa PVS-Studio bakeng sa C #.
bone Jobo o ile a atleha - katleho, tsohle li hantle. Joale u ka leka seo u se entseng.

Mehlala ea mosebetsi

Bakeng sa mohlala oa mosebetsi, ha re theheng morero o bonolo (in mong'a) e tla ba le lifaele tse 'maloa. Ka mor'a moo, lekaleng le leng re tla fetola faele e le 'ngoe feela ebe re leka ho etsa kopo ea ho kopanya.

Ha re nahaneng ka linyeoe tse peli: ha faele e fetotsoeng e na le phoso le ha e se na eona. Ntlha ea pele, mohlala o nang le phoso.

Ha re re ho na le faele lekaleng la master Lenaneo.cs, e se nang liphoso, empa lekaleng le leng moqapi o kentse khoutu e fosahetseng mme o batla ho etsa kopo ea ho kopanya. Ke phoso ea mofuta ofe eo a e entseng ha e bohlokoa hakaalo, ntho e ka sehloohong ke hore e teng. Ka mohlala, mosebeletsi o lebetse lahlela (Ho joalo, e fosahetse haholo):

void MyAwesomeMethod(String name)
{
  if (name == null)
    new ArgumentNullException(....);
  // do something
  ....
}

Ha re shebe sephetho sa ho sekaseka mohlala ka phoso. Hape ho etsa bonnete ba hore faele e le 'ngoe feela e arotsoe, ke kentse folakha -r ho mohala oa ho qala oa pvs-studio-dotnet:

Tlhahlobo ea likopo tsa ho kopanya ho GitLab u sebelisa PVS-Studio bakeng sa C #.
Rea bona hore mohlahlobi o fumane phoso mme ha a ka a lumella ho kopanya makala.

Ha re hlahlobeng mohlala ntle le phoso. Ho lokisa khoutu:

void MyAwesomeMethod(String name)
{
  if (name == null)
    throw new ArgumentNullException(....);
  // do something
  ....
}

Kopanya liphetho tsa tlhahlobo ea kopo:

Tlhahlobo ea likopo tsa ho kopanya ho GitLab u sebelisa PVS-Studio bakeng sa C #.
Joalokaha re bona, ha ho liphoso tse fumanoeng, 'me ts'ebetso ea mosebetsi e atlehile, e leng seo re neng re batla ho se hlahloba.

fihlela qeto e

Ho tlosa khoutu e mpe pele u kopanya makala ho bonolo ebile ho monate. Kahoo haeba u sebelisa CI/CD, leka ho kenya analyzer e tsitsitseng ho hlahloba. Ho feta moo, sena se etsoa ka mokhoa o bonolo.

Kea le leboha ka tlhokomelo ea hao.

Tlhahlobo ea likopo tsa ho kopanya ho GitLab u sebelisa PVS-Studio bakeng sa C #.
Haeba u batla ho arolelana sengoloa sena le bamameli ba buang Senyesemane, ka kopo sebelisa sehokelo sa phetolelo: Nikolay Mironov. Tlhahlobo ea likopo tsa ho kopanya ho GitLab u sebelisa PVS-Studio bakeng sa C #..

Source: www.habr.com

Eketsa ka tlhaloso