C# үшін PVS-Studio көмегімен GitLab жүйесінде біріктіру сұрауларын талдау

C# үшін PVS-Studio көмегімен GitLab жүйесінде біріктіру сұрауларын талдау
GitLab ұнайды ма және қателерді жек көресіз бе? Бастапқы кодтың сапасын жақсартқыңыз келе ме? Сонда сіз дұрыс жерге келдіңіз. Бүгін біз біріктіру сұрауларын тексеру үшін PVS-Studio C# анализаторын қалай конфигурациялау керектігін айтамыз. Бір мүйізді көңіл-күй және барлығына бақытты оқу болсын.

PVS-студиясы C, C++, C# және Java тілдерінде жазылған бағдарламалардың бастапқы кодындағы қателер мен ықтимал осалдықтарды анықтау құралы болып табылады. Windows, Linux және macOS жүйелеріндегі 64 биттік жүйелерде жұмыс істейді. 32 биттік, 64 биттік және ендірілген ARM платформаларына арналған кодты талдай алады.

Айтпақшы, біз PVS-Studio 7.08 шығардық, онда біз көп нәрсе жасадық. қызықты. Мысалы:

  • Linux және macOS үшін C# анализаторы;
  • Rider үшін плагин;
  • жаңа файлдар тізімін тексеру режимі.

Файлдар тізімін тексеру режимі

Бұрын белгілі бір файлдарды тексеру үшін анализаторға файлдар тізімі бар .xml жіберу қажет болатын. Бірақ бұл өте ыңғайлы болмағандықтан, біз .txt жіберу мүмкіндігін қостық, бұл өмірді өте қарапайым етеді.

Арнайы файлдарды тексеру үшін жалаушаны көрсету керек --sourceFiles (-f) және файлдар тізімімен .txt файлын тасымалдаңыз. Бұл келесідей көрінеді:

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

Тапсырманы тексеруді немесе сұрауларды тартуды орнатуға қызығушылық танытсаңыз, оны осы режим арқылы да жасауға болады. Айырмашылық талдау үшін файлдар тізімін алуда болады және сіз қандай жүйелерді пайдаланып жатқаныңызға байланысты болады.

Біріктіру сұрауын тексеру принципі

Тексерудің негізгі мәні біріктіру кезінде анализатор анықтаған мәселелердің мастер филиалы. Біз сондай-ақ барлық жобаны әр уақытта талдағымыз келмейді. Сонымен қатар, филиалдарды біріктіру кезінде бізде өзгертілген файлдар тізімі болады. Сондықтан біріктіру сұрауын тексеруді қосуды ұсынамын.

Статикалық анализаторды іске қоспас бұрын біріктіру сұрауы осылай көрінеді:

C# үшін PVS-Studio көмегімен GitLab жүйесінде біріктіру сұрауларын талдау
Яғни, филиалда болған барлық қателер өзгерістер, негізгі филиалға ауысады. Біз мұны қаламайтындықтан, талдауды қосамыз, енді диаграмма келесідей болады:

C# үшін PVS-Studio көмегімен GitLab жүйесінде біріктіру сұрауларын талдау
Талдау өзгерістер2 және, егер қателер болмаса, біріктіру сұрауын қабылдаймыз, әйтпесе оны қабылдамаймыз.

Айтпақшы, егер сіз C/C++ үшін тапсырмаларды талдауға және сұрауларды тартуға қызығушылық танытсаңыз, онда сіз бұл туралы оқи аласыз. осында.

GitLab

GitLab бұл Git үшін өзінің вики, ақауларды бақылау жүйесі, CI/CD құбыры және басқа мүмкіндіктері бар код репозиторийін басқару жүйесін қамтамасыз ететін ашық бастапқы веб-негізделген DevOps өмірлік цикл құралы.

Біріктіру сұрауларын талдауды бастамас бұрын, жобаңызды тіркеу және жүктеп салу қажет. Егер сіз мұны қалай жасау керектігін білмесеңіз, мен ұсынамын мақала менің әріптесім.

ескерту. Төменде сипатталған ортаны орнату әдісі ықтимал әдістердің бірі болып табылады. Мақсат - анализаторды іске қосу және талдау үшін қажетті ортаны орнату қадамдарын көрсету. Мүмкін сіздің жағдайыңызда ортаны дайындау (репозитарийлерді қосу, анализаторды орнату) және талдау кезеңдерін бөлу оңтайлы болар еді: мысалы, қажетті ортамен Docker кескіндерін дайындау және оларды пайдалану немесе басқа әдіс.

Енді не болатынын жақсы түсіну үшін келесі диаграмманы қарауды ұсынамын:

C# үшін PVS-Studio көмегімен GitLab жүйесінде біріктіру сұрауларын талдау
Талдағыш жұмыс істеуі үшін .NET Core SDK 3 қажет, сондықтан анализаторды орнатпас бұрын анализаторға қажетті тәуелділіктер орнатылатын Microsoft репозитарийлерін қосу керек. Әр түрлі Linux дистрибутивтері үшін Microsoft репозиторийлерін қосу тиісті құжатта сипатталған.

PVS-Studio бағдарламасын бума менеджері арқылы орнату үшін сізге PVS-Studio репозиторийлерін де қосу қажет. Әртүрлі таратулар үшін репозиторийлерді қосу бөлімінде толығырақ сипатталған құжаттаманың тиісті бөлімі.

Анализатор жұмыс істеу үшін лицензиялық кілтті қажет етеді. Сынақ лицензиясын мына жерден ала аласыз анализаторды жүктеп алу беті.

ескерту. Сипатталған жұмыс режимі (біріктіру сұрауларын талдау) Кәсіпорын лицензиясын қажет ететінін ескеріңіз. Сондықтан, егер сіз осы жұмыс режимін қолданғыңыз келсе, «Хабар» өрісінде сізге кәсіпорын лицензиясы қажет екенін көрсетуді ұмытпаңыз.

Біріктіру сұрауы орын алса, біз тек өзгертілген файлдар тізімін талдауымыз керек, әйтпесе барлық файлдарды талдаймыз. Талдаудан кейін журналдарды қажетті форматқа түрлендіру керек.

Енді сіздің көз алдыңызда жұмыс алгоритмі бола отырып, сценарий жазуға көшуге болады. Ол үшін файлды өзгерту керек .gitlab-ci.yml немесе, егер ол жоқ болса, оны жасаңыз. Оны жасау үшін жобаңыздың атын -> басу керек CI/CD орнатыңыз.

C# үшін PVS-Studio көмегімен GitLab жүйесінде біріктіру сұрауларын талдау
Енді сценарий жазуға дайынбыз. Алдымен анализаторды орнататын кодты жазып, лицензияны енгізейік:

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

Орнату және белсендіру барлық басқа сценарийлерден бұрын болуы керек болғандықтан, біз арнайы белгіні қолданамыз алдында_скрипт. Осы үзіндіні аздап түсіндірейін.

Анализаторды орнатуға дайындық:

  - 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

PVS-Studio репозиторийлері мен анализаторын қосу:

  - 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

$PVS_NAME - Қолданушының аты.

$PVS_KEY - өнімнің кілті.

Жобаға тәуелділіктерді қалпына келтіру $CI_PROJECT_DIR – жоба каталогына толық жол:

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

Дұрыс талдау үшін жоба сәтті құрылуы керек және оның тәуелділіктері қалпына келтірілуі керек (мысалы, қажетті NuGet бумаларын жүктеп алу керек).

Лицензия ақпаратын қамтитын орта айнымалы мәндерін басу арқылы орнатуға болады параметр, және кейін - қосу CI/CD.

C# үшін PVS-Studio көмегімен GitLab жүйесінде біріктіру сұрауларын талдау
Ашылған терезеде элементті табыңыз Айнымалылар, оң жақтағы түймені басыңыз кеңейту және айнымалыларды қосыңыз. Нәтиже келесідей болуы керек:

C# үшін PVS-Studio көмегімен GitLab жүйесінде біріктіру сұрауларын талдау
Енді талдауға көшуге болады. Алдымен, толық талдау үшін сценарийді қосамыз. Туға -t тудың шешіміне апаратын жолды өтеміз -o талдау нәтижелері жазылатын файлдың жолын жазыңыз. Бізді қайтару коды да қызықтырады. Бұл жағдайда біз қайтару кодында талдау кезінде ескертулер берілгені туралы ақпарат болған кезде операцияның тоқтатылуына мүдделіміз. Бұл фрагмент келесідей көрінеді:

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

Қайтару кодтары бит маскасы принципі бойынша жұмыс істейді. Мысалы, талдау нәтижесінде ескертулер берілген болса, онда қайтару коды 8-ге тең болады. Егер лицензияның мерзімі бір ай ішінде аяқталса, қайтару коды 4-ке тең болады. Талдау кезінде қателер анықталса, және лицензияның мерзімі бір ай ішінде аяқталады, қайтарылатын код, екі мән де жазылады: сандарды қосып, соңғы қайтару кодын алыңыз - 8+4=12. Осылайша, сәйкес биттерді тексеру арқылы талдау кезінде әртүрлі күйлер туралы ақпаратты алуға болады. Қайтару кодтары құжаттың "pvs-studio-dotnet (Linux / macOS) қайтару кодтары" бөлімінде толығырақ сипатталған.PVS-Studio арқылы пәрмен жолынан Visual Studio / MSBuild / .NET Core жобаларын тексеру".

Бұл жағдайда бізді 8 пайда болатын барлық қайтару кодтары қызықтырады.

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

Қайтару кодында бізді қызықтыратын санның биті болған кезде біз 1 аламыз, әйтпесе біз 0 аламыз.

Біріктіру сұрауының талдауын қосу уақыты келді. Мұны жасамас бұрын, сценарийге орын дайындап алайық. Біз оны біріктіру сұрауы пайда болған кезде ғана орындауымыз керек. Бұл келесідей көрінеді:

merge:
  script:
  only:
  - merge_requests

Сценарийдің өзіне көшейік. Мен виртуалды машинаның ештеңе білмейтініне тап болдым бастау/шебер. Ендеше оған аздап көмектесейік:

  - git fetch origin

Енді біз филиалдар арасындағы айырмашылықты аламыз және нәтижені сақтаймыз TXT файл:

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

Қайда? $CI_COMMIT_SHA – соңғы міндеттеменің хэші.

Әрі қарай, жалаушаны пайдаланып файлдар тізімін талдауды бастаймыз -f. Біз оған бұрын қабылданған .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

Біріктіру сұрауын тексеруге арналған толық сценарий келесідей болады:

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

Барлық сценарийлер өңделгеннен кейін журналды түрлендіруді қосу ғана қалады. Біз белгіні қолданамыз кейінгі_скрипт және утилита плог түрлендіргіш:

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

Утилита плог түрлендіргіш талдаушы қателерінің есептерін HTML сияқты әртүрлі пішіндерге түрлендіру үшін пайдаланылатын ашық бастапқы жоба. Утилитаның толығырақ сипаттамасы «Plog Converter Utility» бөлімінде берілген. құжаттаманың тиісті бөлімі.

Айтпақшы, егер сіз IDE-ден жергілікті .json есептерімен ыңғайлы жұмыс істегіңіз келсе, мен біздің қосылатын модуль IDE Rider үшін. Оның қолданылуы толығырақ сипатталған тиісті құжат.

Ыңғайлы болу үшін, міне .gitlab-ci.yml толығымен:

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

Барлығын файлға қосқаннан кейін түймесін басыңыз Өзгерістерді қабылдау. Барлығы дұрыс екенін көру үшін өтіңіз CI / CD -> Құбырлар -> Жүгіру. Виртуалды машина терезесі ашылады, оның соңында келесілер болуы керек:

C# үшін PVS-Studio көмегімен GitLab жүйесінде біріктіру сұрауларын талдау
көрді Жұмыс сәтті болды - сәттілік, бәрі жақсы. Енді сіз не істегеніңізді тексере аласыз.

Жұмыс үлгілері

Жұмыс мысалы үшін қарапайым жобаны жасайық ( мастер) бірнеше файлдарды қамтитын болады. Осыдан кейін басқа филиалда біз тек бір файлды өзгертеміз және біріктіру сұрауын жасауға тырысамыз.

Екі жағдайды қарастырайық: өзгертілген файлда қате болған кезде және ол болмаған кезде. Біріншіден, қатесі бар мысал.

Негізгі бөлімде файл бар делік Program.cs, онда қателер жоқ, бірақ басқа тармақта әзірлеуші ​​қате кодты қосып, біріктіру сұрауын жасағысы келеді. Оның қандай қателік жібергені соншалықты маңызды емес, бастысы оның бар екендігі. Мысалы, оператор ұмытып кетті тастаңыз (Иә, соншалықты қате):

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

Қате бар мысалды талдау нәтижесін қарастырайық. Сондай-ақ, тек бір файл талданғанына көз жеткізу үшін жалаушаны қостым -r pvs-studio-dotnet іске қосу жолына:

C# үшін PVS-Studio көмегімен GitLab жүйесінде біріктіру сұрауларын талдау
Талдағыш қате тауып, тармақтарды біріктіруге рұқсат бермегенін көреміз.

Мысалды қатесіз тексерейік. Кодты түзету:

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

Біріктіру сұрауын талдау нәтижелері:

C# үшін PVS-Studio көмегімен GitLab жүйесінде біріктіру сұрауларын талдау
Көріп отырғанымыздай, қателер табылмады және тапсырма сәтті орындалды, біз оны тексергіміз келді.

қорытынды

Бұтақтарды біріктіру алдында нашар кодты жою өте ыңғайлы және жағымды. Сондықтан CI/CD қолданып жатсаңыз, тексеру үшін статикалық анализаторды ендіріп көріңіз. Оның үстіне, бұл өте қарапайым түрде жасалады.

Назарларыңызға рахмет.

C# үшін PVS-Studio көмегімен GitLab жүйесінде біріктіру сұрауларын талдау
Егер сіз осы мақаланы ағылшын тілінде сөйлейтін аудиториямен бөліскіңіз келсе, аударма сілтемесін пайдаланыңыз: Николай Миронов. C# үшін PVS-Studio көмегімен GitLab жүйесінде біріктіру сұрауларын талдау.

Ақпарат көзі: www.habr.com

пікір қалдыру