Uchambuzi wa maombi ya kuunganisha katika GitLab kwa kutumia PVS-Studio kwa C #

Uchambuzi wa maombi ya kuunganisha katika GitLab kwa kutumia PVS-Studio kwa C #
Unapenda GitLab na kuchukia mende? Je, ungependa kuboresha ubora wa msimbo wako wa chanzo? Kisha umefika mahali pazuri. Leo tutakuambia jinsi ya kusanidi PVS-Studio C # analyzer ili kuangalia maombi ya kuunganisha. Kuwa na hali ya nyati na usomaji wa furaha kwa kila mtu.

PVS-Studio ni zana ya kutambua makosa na udhaifu unaowezekana katika msimbo wa chanzo wa programu zilizoandikwa katika C, C++, C# na Java. Inafanya kazi kwenye mifumo ya 64-bit kwenye Windows, Linux na macOS. Inaweza kuchanganua msimbo iliyoundwa kwa ajili ya 32-bit, 64-bit na majukwaa ya ARM yaliyopachikwa.

Kwa njia, tulitoa PVS-Studio 7.08, ambayo tulifanya mambo mengi kuvutia. Kwa mfano:

  • C # analyzer kwa Linux na macOS;
  • programu-jalizi ya Rider;
  • hali mpya ya kukagua orodha ya faili.

Hali ya kukagua orodha ya faili

Hapo awali, ili kuangalia faili fulani, ilikuwa ni lazima kupitisha .xml na orodha ya faili kwa analyzer. Lakini kwa kuwa hii si rahisi sana, tumeongeza uwezo wa kuhamisha .txt, ambayo inafanya maisha rahisi sana.

Ili kuangalia faili maalum, lazima ueleze bendera --sourceFiles (-f) na uhamishe .txt na orodha ya faili. Inaonekana kama hii:

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

Ikiwa ungependa kusanidi maombi ya kuangalia au kuvuta, unaweza pia kufanya hivyo kwa kutumia hali hii. Tofauti itakuwa katika kupata orodha ya faili za kuchambua na itategemea ni mifumo gani unayotumia.

Kanuni ya kuangalia ombi la kuunganisha

Kiini kuu cha hundi ni kuhakikisha kuwa matatizo yaliyogunduliwa na analyzer wakati wa kuunganisha hayaingii kwenye bwana tawi. Pia hatutaki kuchanganua mradi mzima kila wakati. Aidha, wakati wa kuunganisha matawi, tuna orodha ya faili zilizobadilishwa. Kwa hivyo, ninapendekeza kuongeza ukaguzi wa ombi la kuunganisha.

Hivi ndivyo ombi la kuunganisha linavyoonekana kabla ya kutekeleza kichanganuzi tuli:

Uchambuzi wa maombi ya kuunganisha katika GitLab kwa kutumia PVS-Studio kwa C #
Hiyo ni, makosa yote ambayo yalikuwa kwenye tawi mabadiliko, itahamia kwenye tawi kuu. Kwa kuwa hatukutaka hii, tunaongeza uchambuzi, na sasa mchoro unaonekana kama hii:

Uchambuzi wa maombi ya kuunganisha katika GitLab kwa kutumia PVS-Studio kwa C #
Kuchambua mabadiliko2 na, ikiwa hakuna makosa, tunakubali ombi la kuunganisha, vinginevyo tunakataa.

Kwa njia, ikiwa una nia ya kuchambua ahadi na ombi la kuvuta kwa C/C++, basi unaweza kusoma juu yake. hapa.

GitLab

GitLab ni zana huria ya mtandao wa DevOps lifecycle ambayo hutoa mfumo wa usimamizi wa hazina wa Git na wiki yake, mfumo wa kufuatilia suala, bomba la CI/CD na vipengele vingine.

Kabla ya kuanza kuchambua maombi ya kuunganisha, unahitaji kujiandikisha na kupakia mradi wako. Ikiwa hujui jinsi ya kufanya hivyo, basi ninapendekeza nakala mwenzangu.

Kumbuka. Njia ya kuanzisha mazingira iliyoelezwa hapo chini ni mojawapo ya iwezekanavyo. Lengo ni kuonyesha hatua za kuweka mazingira muhimu kwa ajili ya uchambuzi na uzinduzi wa analyzer. Labda kwa upande wako itakuwa bora zaidi kutenganisha hatua za utayarishaji wa mazingira (kuongeza hazina, kusanikisha analyzer) na uchambuzi: kwa mfano, kuandaa picha za Docker na mazingira muhimu na kuzitumia, au njia nyingine.

Ili kuelewa vyema kitakachotokea sasa, napendekeza kutazama mchoro ufuatao:

Uchambuzi wa maombi ya kuunganisha katika GitLab kwa kutumia PVS-Studio kwa C #
Kichanganuzi kinahitaji NET Core SDK 3 kufanya kazi, kwa hivyo kabla ya kusakinisha kichanganuzi unahitaji kuongeza hazina za Microsoft ambazo tegemezi zinazohitajika kwa kichanganuzi zitasakinishwa. Kuongeza hazina za Microsoft kwa usambazaji mbalimbali wa Linux ilivyoelezwa katika hati sambamba.

Ili kusakinisha PVS-Studio kupitia msimamizi wa kifurushi, utahitaji pia kuongeza hazina za PVS-Studio. Kuongeza hazina kwa usambazaji tofauti kunaelezewa kwa undani zaidi katika sehemu husika ya nyaraka.

Kichanganuzi kinahitaji ufunguo wa leseni ili kufanya kazi. Unaweza kupata leseni ya majaribio kwa ukurasa wa kupakua wa analyzer.

Kumbuka. Tafadhali kumbuka kuwa njia iliyoelezwa ya uendeshaji (uchambuzi wa maombi ya kuunganisha) inahitaji leseni ya Biashara. Kwa hivyo, ikiwa unataka kujaribu hali hii ya operesheni, usisahau kuonyesha kwenye uwanja wa "Ujumbe" kuwa unahitaji leseni ya Biashara.

Ikiwa ombi la kuunganisha linatokea, basi tunahitaji tu kuchambua orodha ya faili zilizobadilishwa, vinginevyo tunachambua faili zote. Baada ya uchambuzi, tunahitaji kubadilisha kumbukumbu katika muundo tunaohitaji.

Sasa, kuwa na algorithm ya kazi mbele ya macho yako, unaweza kuendelea na kuandika hati. Ili kufanya hivyo, unahitaji kubadilisha faili .gitlab-ci.yml au, ikiwa haipo, iunde. Ili kuiunda, unahitaji kubofya jina la mradi wako -> Sanidi CI/CD.

Uchambuzi wa maombi ya kuunganisha katika GitLab kwa kutumia PVS-Studio kwa C #
Sasa tuko tayari kuandika script. Wacha kwanza tuandike nambari ambayo itasakinisha kichanganuzi na kuingiza leseni:

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

Kwa kuwa usakinishaji na uanzishaji lazima ufanyike kabla ya hati zingine zote, tunatumia lebo maalum kabla_hati. Acha nieleze kipande hiki kidogo.

Inajiandaa kusakinisha kichanganuzi:

  - 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

Kuongeza hazina za PVS-Studio na kichanganuzi:

  - 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

Uwezeshaji wa leseni:

  - pvs-studio-analyzer credentials $PVS_NAME $PVS_KEY

$PVS_NAME - Jina la mtumiaji.

$PVS_KEY - ufunguo wa bidhaa.

Kurejesha utegemezi wa mradi wapi $CI_PROJECT_DIR - njia kamili ya saraka ya mradi:

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

Kwa uchambuzi sahihi, mradi lazima ujengwe kwa ufanisi, na utegemezi wake lazima urejeshwe (kwa mfano, vifurushi muhimu vya NuGet lazima vipakuliwe).

Unaweza kuweka vigezo vya mazingira vilivyo na maelezo ya leseni kwa kubofya Maandalizi ya, na baada ya - juu CI/CD.

Uchambuzi wa maombi ya kuunganisha katika GitLab kwa kutumia PVS-Studio kwa C #
Katika dirisha linalofungua, pata kipengee vigezo, bofya kitufe kilicho upande wa kulia Kupanua na kuongeza vigezo. Matokeo yake yanapaswa kuonekana kama hii:

Uchambuzi wa maombi ya kuunganisha katika GitLab kwa kutumia PVS-Studio kwa C #
Sasa unaweza kuendelea na uchambuzi. Kwanza, hebu tuongeze hati kwa uchambuzi kamili. Kwa bendera -t tunapitisha njia ya suluhisho la bendera -o andika njia ya faili ambayo matokeo ya uchambuzi yataandikwa. Pia tunavutiwa na msimbo wa kurudi. Katika kesi hii, tuna nia ya kuacha operesheni wakati msimbo wa kurejesha una taarifa kwamba maonyo yalitolewa wakati wa uchambuzi. Hivi ndivyo kipande hiki kinavyoonekana:

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

Nambari za kurejesha hufanya kazi kwa kanuni ya mask kidogo. Kwa mfano, ikiwa maonyo yalitolewa kutokana na uchambuzi, basi msimbo wa kurudi utakuwa sawa na 8. Ikiwa leseni inaisha ndani ya mwezi, basi msimbo wa kurudi utakuwa sawa na 4. Ikiwa makosa yaligunduliwa wakati wa uchambuzi, na leseni inaisha ndani ya mwezi, kurudi kwa nambari, maadili yote mawili yataandikwa: ongeza nambari pamoja na upate nambari ya mwisho ya kurudi - 8+4=12. Hivyo, kwa kuangalia bits sambamba, taarifa kuhusu majimbo mbalimbali inaweza kupatikana wakati wa uchambuzi. Nambari za kurejesha zimeelezewa kwa undani zaidi katika sehemu ya "pvs-studio-dotnet (Linux / macOS)" ya hati "Kuangalia Miradi ya Visual Studio / MSBuild / .NET Core kutoka kwa mstari wa amri kwa kutumia PVS-Studio".

Katika kesi hii, tunavutiwa na nambari zote za kurudi ambapo 8 inaonekana.

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

Tutapokea 1 wakati nambari ya kurejesha ina sehemu ndogo ya nambari tunayopenda, vinginevyo tutapokea 0.

Ni wakati wa kuongeza uchanganuzi wa ombi la kuunganisha. Kabla ya kufanya hivi, hebu tuandae mahali pa hati. Tunahitaji itekelezwe tu wakati ombi la kuunganisha linatokea. Inaonekana kama hii:

merge:
  script:
  only:
  - merge_requests

Wacha tuendelee kwenye hati yenyewe. Nilikabiliwa na ukweli kwamba mashine ya kawaida haijui chochote kuhusu asili/bwana. Kwa hivyo wacha tumsaidie kidogo:

  - git fetch origin

Sasa tunapata tofauti kati ya matawi na kuokoa matokeo ndani txt faili:

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

Je! $CI_COMMIT_SHA - heshi ya ahadi ya mwisho.

Ifuatayo, tunaanza kuchambua orodha ya faili kwa kutumia bendera -f. Tunahamisha faili ya .txt iliyopokelewa hapo awali kwake. Kweli, kwa mlinganisho na uchambuzi kamili, tunaangalia nambari za kurudi:

  - 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

Hati kamili ya kuangalia ombi la kuunganisha itaonekana kama hii:

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

Kilichobaki ni kuongeza ubadilishaji wa logi baada ya hati zote kuchakatwa. Tunatumia lebo after_script na matumizi kibadilishaji cha plagi:

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

Huduma kibadilishaji cha plagi ni mradi wa chanzo huria ambao hutumika kubadilisha ripoti za hitilafu za vichanganuzi kuwa aina mbalimbali, kama vile HTML. Maelezo ya kina zaidi ya matumizi yametolewa katika kifungu kidogo "Utility wa Kubadilisha Plog" sehemu husika ya nyaraka.

Kwa njia, ikiwa unataka kufanya kazi kwa urahisi na .json ripoti za ndani kutoka kwa IDE, basi ninapendekeza yetu. jalizi kwa IDE Rider. Matumizi yake yameelezwa kwa undani zaidi katika hati husika.

Kwa urahisi, hapa ni .gitlab-ci.yml kamili:

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

Mara baada ya kuongeza kila kitu kwenye faili, bofya Fanya mabadiliko. Ili kuona kuwa kila kitu ni sawa, nenda kwa CI / CD -> Mabomba -> Mbio. Dirisha la mashine ya kweli litafungua, ambayo mwisho wake inapaswa kuwa na yafuatayo:

Uchambuzi wa maombi ya kuunganisha katika GitLab kwa kutumia PVS-Studio kwa C #
saw Ayubu alifaulu - mafanikio, kila kitu ni sawa. Sasa unaweza kujaribu kile umefanya.

Mifano ya kazi

Kwa mfano wa kazi, wacha tuunda mradi rahisi (in bwana) ambayo itakuwa na faili kadhaa. Baada ya hayo, katika tawi lingine tutabadilisha faili moja tu na jaribu kufanya ombi la kuunganisha.

Hebu fikiria kesi mbili: wakati faili iliyobadilishwa ina kosa na wakati haipo. Kwanza, mfano na makosa.

Wacha tuseme kuna faili kwenye tawi kuu Programu.cs, ambayo haina makosa, lakini katika tawi lingine msanidi aliongeza msimbo wenye makosa na anataka kufanya ombi la kuunganisha. Ni aina gani ya kosa alilofanya sio muhimu sana, jambo kuu ni kwamba lipo. Kwa mfano, operator alisahau kutupa (Ndiyo, vibaya sana):

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

Wacha tuangalie matokeo ya kuchambua mfano na kosa. Pia ili kuhakikisha kuwa faili moja tu ilichanganuliwa, niliongeza bendera -r kwa mstari wa uzinduzi wa pvs-studio-dotnet:

Uchambuzi wa maombi ya kuunganisha katika GitLab kwa kutumia PVS-Studio kwa C #
Tunaona kwamba analyzer alipata hitilafu na hakuruhusu kuunganisha matawi.

Wacha tuangalie mfano bila kosa. Kurekebisha kanuni:

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

Unganisha matokeo ya uchambuzi wa ombi:

Uchambuzi wa maombi ya kuunganisha katika GitLab kwa kutumia PVS-Studio kwa C #
Kama tunavyoona, hakuna makosa yaliyopatikana, na utekelezaji wa kazi ulifanikiwa, ambayo ndio tulitaka kuangalia.

Hitimisho

Kupalilia msimbo mbaya kabla ya kuunganisha matawi ni rahisi sana na ya kupendeza. Kwa hivyo ikiwa unatumia CI/CD, jaribu kupachika kichanganuzi tuli ili kuangalia. Aidha, hii inafanywa kwa urahisi kabisa.

Asante kwa mawazo yako.

Uchambuzi wa maombi ya kuunganisha katika GitLab kwa kutumia PVS-Studio kwa C #
Ikiwa ungependa kushiriki makala hii na hadhira inayozungumza Kiingereza, tafadhali tumia kiungo cha kutafsiri: Nikolay Mironov. Uchambuzi wa maombi ya kuunganisha katika GitLab kwa kutumia PVS-Studio kwa C #.

Chanzo: mapenzi.com

Kuongeza maoni