A bheil gaol agad air GitLab agus a bheil gràin agad air biastagan? A bheil thu airson càileachd a’ chòd stòr agad a leasachadh? An uairsin tha thu air tighinn dhan àite cheart. An-diugh innsidh sinn dhut mar a rèiticheas tu an anailisiche PVS-Studio C # gus sùil a thoirt air iarrtasan aonaidh. Biodh faireachdainn aon-adharcach agad agus leughadh toilichte don h-uile duine.
Co-dhiù, leig sinn a-mach PVS-Studio 7.08, anns an do rinn sinn tòrr rudan
- C # anailisiche airson Linux agus macOS;
- plugan airson Rider;
- modh sgrùdaidh liosta faidhle ùr.
Modh sgrùdaidh liosta faidhle
Roimhe sin, gus sùil a thoirt air cuid de na faidhlichean, bha e riatanach a dhol seachad air .xml le liosta de na faidhlichean chun an analyzer. Ach leis nach eil seo glè ghoireasach, tha sinn air an comas gluasad .txt a chuir ris, a tha a’ dèanamh beatha gu math sìmplidh.
Gus sgrùdadh a dhèanamh air faidhlichean sònraichte, feumaidh tu am bratach a shònrachadh --sourceFiles (-f) agus a 'gluasad .txt le liosta de na faidhlichean. Tha e coltach ri seo:
pvs-studio-dotnet -t path/to/solution.sln -f fileList.txt -o project.json
Ma tha ùidh agad ann a bhith a’ stèidheachadh iarrtasan sgrùdaidh no tarraing, faodaidh tu sin a dhèanamh leis a’ mhodh seo cuideachd. Bidh an diofar ann a bhith a’ faighinn liosta fhaidhlichean airson an sgrùdadh agus bidh e an urra ri dè na siostaman a tha thu a’ cleachdadh.
Prionnsabal sgrùdadh air iarrtas co-aonaidh
Is e prìomh adhbhar an t-seic dèanamh cinnteach nach bi na duilgheadasan a lorg an anailisiche aig àm an aonaidh a’ tuiteam a-steach don mhaighstir meur. Chan eil sinn cuideachd airson mion-sgrùdadh a dhèanamh air a’ phròiseact gu lèir a h-uile turas. A bharrachd air an sin, nuair a thèid meuran a chur còmhla, tha liosta againn de fhaidhlichean atharraichte. Mar sin, tha mi a’ moladh sgrùdadh iarrtas aonaidh a chuir ris.
Seo cò ris a tha iarrtas co-aonaidh coltach mus cuir thu anailisiche statach an gnìomh:
Is e sin, a h-uile mearachd a bha anns a 'mheur atharrachaidhean, gluaisidh e chun phrìomh mheur. Leis nach biodh sinn ag iarraidh seo, bidh sinn a’ cur mion-sgrùdadh ris, agus a-nis tha an diagram a’ coimhead mar seo:
A' mion-sgrùdadh atharraichean 2 agus, mura h-eil mearachdan ann, gabhaidh sinn ris an iarrtas co-aonaidh, air neo bidh sinn ga dhiùltadh.
Co-dhiù, ma tha ùidh agad ann a bhith a’ dèanamh anailis air geallaidhean agus a’ tarraing iarrtasan airson C/C ++, faodaidh tu leughadh mu dheidhinn
GitLab
Mus tòisich thu a’ mion-sgrùdadh iarrtasan co-aonaidh, feumaidh tu do phròiseact a chlàradh agus a luchdachadh suas. Mura h-eil fios agad ciamar a nì thu seo, tha mi a’ moladh
thuirt. Is e an dòigh air an àrainneachd a tha air a mhìneachadh gu h-ìosal aon den fheadhainn a dh’ fhaodadh a bhith ann. Is e an t-amas na ceumannan a nochdadh airson a bhith a’ stèidheachadh na h-àrainneachd a tha riatanach airson mion-sgrùdadh agus an anailisiche a chuir air bhog. Is dòcha anns a 'chùis agad gum biodh e na b' fheàrr a bhith a 'sgaradh ìrean ullachadh na h-àrainneachd (a' cur stòran-tasgaidh, a 'stàladh anailisiche) agus mion-sgrùdadh: mar eisimpleir, ag ullachadh ìomhaighean Docker leis an àrainneachd riatanach agus gan cleachdadh, no dòigh air choireigin eile.
Gus tuigse nas fheàrr fhaighinn air na thachras a-nis, tha mi a’ moladh coimhead air an diagram a leanas:
Feumaidh an anailisiche .NET Core SDK 3 obrachadh, agus mar sin mus cuir thu a-steach an anailisiche feumaidh tu na stòran Microsoft a chuir ris às an tèid na h-eisimeileachd a tha riatanach airson an anailisiche a chuir a-steach. A’ cur stòran Microsoft ris airson diofar sgaoilidhean Linux
Gus PVS-Studio a chuir a-steach tron mhanaidsear pacaid, feumaidh tu cuideachd na stòran PVS-Studio a chuir ris. Thathas a’ toirt cunntas nas mionaidiche air a bhith a’ cur tasgaidhean airson diofar sgaoilidhean ris
Feumaidh an anailisiche iuchair cead airson obrachadh. Gheibh thu cead deuchainn aig
thuirt. Thoir an aire gu bheil feum aig a’ mhodh obrachaidh a chaidh a mhìneachadh (mion-sgrùdadh air iarrtasan co-aonaidh) air cead Iomairt. Mar sin, ma tha thu airson am modh obrachaidh seo fheuchainn, na dìochuimhnich innse anns an raon “Teachdaireachd” gu bheil feum agad air cead Iomairt.
Ma thachras iarrtas co-aonaidh, cha leig sinn a leas ach an liosta de fhaidhlichean atharraichte a sgrùdadh, air neo bidh sinn a’ sgrùdadh a h-uile faidhle. Às deidh mion-sgrùdadh, feumaidh sinn na logaichean a thionndadh a-steach don chruth a dh’ fheumas sinn.
A-nis, le algorithm na h-obrach ro do shùilean, faodaidh tu gluasad air adhart gu bhith a’ sgrìobhadh sgriobt. Gus seo a dhèanamh, feumaidh tu am faidhle atharrachadh .gitlab-ci.yml no, mura h-eil e ann, cruthaich e. Gus a chruthachadh, feumaidh tu briogadh air ainm do phròiseact -> Stèidhich CI / CD.
A-nis tha sinn deiseil airson an sgriobt a sgrìobhadh. An toiseach sgrìobh sinn an còd a stàlaicheas an anailisiche agus a chuireas a-steach an cead:
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
Leis gum feum an stàladh agus an gnìomhachadh tachairt ro gach sgriobt eile, bidh sinn a’ cleachdadh bileag sònraichte roimh_script. Leig leam am pìos seo a mhìneachadh beagan.
Ag ullachadh airson an anailisiche a stàladh:
- 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
A’ cur ri tasgaidhean PVS-Studio agus anailisiche:
- 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
Gnìomhachadh ceadachas:
- pvs-studio-analyzer credentials $PVS_NAME $PVS_KEY
$PVS_NAME - Ainm-cleachdaidh.
$PVS_KEY - iuchair toraidh.
A’ faighinn air ais eisimeileachd pròiseict far a bheil $CI_PROJECT_DIR - slighe slàn gu eòlaire a’ phròiseict:
- dotnet restore "$CI_PROJECT_DIR"/Path/To/Solution.sln
Airson mion-sgrùdadh ceart, feumar am pròiseact a thogail gu soirbheachail, agus feumar na h-eisimeileachd aige ath-nuadhachadh (mar eisimpleir, feumar na pacaidean NuGet riatanach a luchdachadh sìos).
Faodaidh tu caochladairean àrainneachd a shuidheachadh anns a bheil fiosrachadh ceadachais le bhith a’ cliogadh suidheachadh, agus às deidh - air adhart CI/CD.
Anns an uinneag a tha a’ fosgladh, lorg an nì Variables, cliog air a’ phutan air an taobh cheart Meudaich agus cuir caochladairean ris. Bu chòir don toradh coimhead mar seo:
A-nis faodaidh tu a dhol air adhart gu mion-sgrùdadh. An toiseach, leig dhuinn sgriobt a chuir ris airson mion-sgrùdadh iomlan. Chun a 'bhratach -t bidh sinn a 'dol seachad air an t-slighe gu fuasgladh na brataich -o sgrìobh an t-slighe chun an fhaidhle anns an tèid toraidhean an anailis a sgrìobhadh. Tha ùidh againn cuideachd anns a’ chòd tilleadh. Anns a 'chùis seo, tha ùidh againn anns an obair a' stad nuair a tha fiosrachadh anns a 'chòd tilleadh gun deach rabhaidhean a thoirt seachad rè an anailis. Seo cò ris a tha am pìos seo coltach:
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
Bidh còdan tilleadh ag obair air prionnsapal beagan masg. Mar eisimpleir, ma chaidh rabhaidhean a thoirt seachad mar thoradh air an anailis, bidh an còd tilleadh co-ionann ri 8. Ma thig an cead gu crìch taobh a-staigh mìos, bidh an còd tilleadh co-ionann ri 4. Ma chaidh mearachdan a lorg rè an sgrùdaidh, agus thig an cead gu crìch taobh a-staigh mìos, tillidh an còd, thèid an dà luach a sgrìobhadh: cuir na h-àireamhan ri chèile agus faigh an còd tilleadh mu dheireadh - 8+4=12. Mar sin, le bhith a’ sgrùdadh nam pìosan co-fhreagarrach, gheibhear fiosrachadh mu dhiofar stàitean rè mion-sgrùdadh. Thathas a’ toirt cunntas nas mionaidiche air còdan tilleadh anns an earrainn “Pvs-studio-dotnet (Linux / macOS) Return Codes" den sgrìobhainn"
Anns a 'chùis seo, tha ùidh againn anns a h-uile còd tilleadh far a bheil 8 a' nochdadh.
- exit_code=$((($exit_code & 8)/8))
Gheibh sinn 1 nuair a bhios am pìos den àireamh anns a bheil ùidh againn anns a’ chòd tilleadh, air neo gheibh sinn 0.
Tha an t-àm ann mion-sgrùdadh iarrtas co-aonaidh a chuir ris. Mus dèan sinn seo, ullaich sinn àite airson an sgriobt. Feumaidh sinn a bhith air a chuir gu bàs dìreach nuair a thig iarrtas co-aonaidh. Tha e coltach ri seo:
merge:
script:
only:
- merge_requests
Gluaisidh sinn air adhart chun an sgriobt fhèin. Bha mi na aghaidh leis nach eil fios aig an inneal brìgheil dad mu dheidhinn tùs / maighstir. Mar sin cuidichidh sinn i beagan:
- git fetch origin
A-nis gheibh sinn an eadar-dhealachadh eadar na geugan agus sàbhail an toradh a-steach txt faidhle:
- git diff --name-only origin/master $CI_COMMIT_SHA > pvs-fl.txt
Càite $CI_COMMIT_SHA — hash a' gheallaidh mu dheireadh.
An ath rud, tòisichidh sinn a’ sgrùdadh liosta nam faidhlichean a’ cleachdadh a’ bhratach -f. Bidh sinn a' gluasad am faidhle .txt a fhuair sinn roimhe thuige. Uill, le samhlachas leis an làn anailis, bidh sinn a’ coimhead air na còdan tilleadh:
- 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
Bidh an sgriobt iomlan airson sgrùdadh a dhèanamh air iarrtas co-aonaidh a’ coimhead mar seo:
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
Chan eil air fhàgail ach tionndadh log a chuir ris às deidh na sgriobtaichean gu lèir a bhith air an giullachd. Cleachdaidh sinn an leubail às dèidh_script agus goireasachd plog-tionndaidh:
after_script:
- plog-converter -t html -o eLog ./PVS-Studio.json
Goireasach
Co-dhiù, ma tha thu airson obrachadh gu goireasach le aithisgean .json gu h-ionadail bhon IDE, tha mi a’ moladh ar
Airson goireasachd, seo e .gitlab-ci.yml gu h-iomlan:
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
Aon uair ‘s gu bheil thu air a h-uile càil a chuir ris an fhaidhle, cliog air Geall atharraichean. Gus faicinn gu bheil a h-uile dad ceart, rachaibh gu CI / CD -> Pìoban -> Running. Fosglaidh uinneag inneal brìgheil, agus aig an deireadh bu chòir na leanas a bhith ann:
chunnaic Shoirbhich le Job - soirbheachas, tha a h-uile dad gu math. A-nis faodaidh tu deuchainn a dhèanamh air na rinn thu.
Eisimpleirean obrach
Airson eisimpleir de dh'obair, cruthaichidh sinn pròiseact sìmplidh (a-steach mhaighstir) anns am bi grunn fhaidhlichean. Às deidh sin, ann am meur eile chan atharraich sinn ach aon fhaidhle agus feuchaidh sinn ri iarrtas co-aonaidh a dhèanamh.
Beachdaichidh sinn air dà chùis: nuair a tha mearachd anns an fhaidhle atharraichte agus nuair nach eil. An toiseach, eisimpleir le mearachd.
Canaidh sinn gu bheil faidhle anns a’ phrìomh mheur Prògram.cs, anns nach eil mearachdan, ach ann am meur eile chuir an leasaiche còd mearachdach ris agus tha e airson iarrtas co-aonaidh a dhèanamh. Dè an seòrsa mearachd a rinn e nach eil cho cudromach, is e am prìomh rud gu bheil e ann. Mar eisimpleir, dhìochuimhnich an gnìomhaiche tilgeil (Tha,
void MyAwesomeMethod(String name)
{
if (name == null)
new ArgumentNullException(....);
// do something
....
}
Bheir sinn sùil air toradh mion-sgrùdadh eisimpleir le mearachd. Cuideachd gus dèanamh cinnteach nach deach ach aon fhaidhle a pharsadh, chuir mi a’ bhratach ris -r gu loidhne tòiseachaidh pvs-studio-dotnet:
Tha sinn a’ faicinn gun do lorg an anailisiche mearachd agus nach do leig leis meuran a chur còmhla.
Feuch an toir sinn sùil air an eisimpleir gun mhearachd. A 'ceartachadh a' chòd:
void MyAwesomeMethod(String name)
{
if (name == null)
throw new ArgumentNullException(....);
// do something
....
}
Cuir còmhla toraidhean mion-sgrùdadh iarrtas:
Mar a chì sinn, cha deach mearachdan sam bith a lorg, agus bha coileanadh na h-obrach soirbheachail, agus is e sin a bha sinn airson sgrùdadh.
co-dhùnadh
Tha e glè ghoireasach agus tlachdmhor a bhith a’ glanadh droch chòd mus tèid geugan a chur còmhla. Mar sin ma tha thu a’ cleachdadh CI/CD, feuch ri sgrùdaire statach a stèidheachadh airson sgrùdadh. A bharrachd air an sin, tha seo air a dhèanamh gu math sìmplidh.
Tapadh leibh airson ur aire.
Ma tha thu airson an artaigil seo a cho-roinn le luchd-èisteachd Beurla, cleachd an ceangal eadar-theangachaidh: Nikolay Mironov.
Source: www.habr.com