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.
Ka tsela, re ile ra lokolla PVS-Studio 7.08, eo ho eona re entseng lintho tse ngata
- 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:
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:
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.
GitLab
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
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:
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
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
Analyzer e hloka senotlolo sa laesense ho sebetsa. U ka fumana lengolo la tumello ho
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.
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.
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:
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 "
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
Ka tsela, haeba u batla ho sebetsa le .json litlaleho sebakeng sa heno ho tsoa ho IDE, joale ke fana ka maikutlo a rona.
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:
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,
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:
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:
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.
Haeba u batla ho arolelana sengoloa sena le bamameli ba buang Senyesemane, ka kopo sebelisa sehokelo sa phetolelo: Nikolay Mironov.
Source: www.habr.com