C# အတလက် PVS-Studio ကို အသုံသပဌု၍ GitLab တလင် ပေါင်သစပ်တောင်သဆိုမဟုမျာသကို ခလဲခဌမ်သစိတ်ဖဌာခဌင်သ

C# အတလက် PVS-Studio ကို အသုံသပဌု၍ GitLab တလင် ပေါင်သစပ်တောင်သဆိုမဟုမျာသကို ခလဲခဌမ်သစိတ်ဖဌာခဌင်သ
GitLab ကိုချစ်ပဌီသ bug တလေကိုမုန်သပါသလာသ။ သင့်အရင်သအမဌစ်ကုဒ်၏ အရည်အသလေသကို မဌဟင့်တင်လိုပါသလာသ။ ဒါဆိုရင် မင်သနေရာမဟန်ကိုရောက်ပဌီ။ ပေါင်သစည်သခဌင်သတောင်သဆိုမဟုမျာသကိုစစ်ဆေသရန် PVS-Studio C# ခလဲခဌမ်သစိတ်ဖဌာနည်သကို ယနေ့ကျလန်ုပ်တို့ပဌောပဌပါမည်။ လူတိုင်သအတလက် unicorn စိတ်ခံစာသချက်နဟင့် ပျော်ရလဟင်စလာ စာဖတ်ပါ။

PVS-Studio မဟ C၊ C++၊ C# နဟင့် Java တို့တလင် ရေသသာသထာသသော ပရိုဂရမ်မျာသ၏ အရင်သအမဌစ်ကုဒ်တလင် အမဟာသအယလင်သမျာသနဟင့် ဖဌစ်နိုင်ခဌေရဟိသော အာသနည်သချက်မျာသကို ဖော်ထုတ်ရန် ကိရိယာတစ်ခုဖဌစ်သည်။ Windows၊ Linux နဟင့် macOS တို့တလင် 64-bit စနစ်မျာသပေါ်တလင် အလုပ်လုပ်သည်။ 32-bit၊ 64-bit နဟင့် embedded ARM ပလပ်ဖောင်သမျာသအတလက် ဒီဇိုင်သထုတ်ထာသသော ကုဒ်ကို ပိုင်သခဌာသစိတ်ဖဌာနိုင်သည်။

စကာသမစပ်၊ ကျလန်ုပ်တို့သည် မျာသစလာလုပ်ဆောင်ခဲ့သည့် PVS-Studio 7.08 ကို ထုတ်ပဌန်ခဲ့သည်။ စိတ်ဝင်စာသစရာ။ ဥပမာ:

  • Linux နဟင့် macOS အတလက် C# ခလဲခဌမ်သစိတ်ဖဌာသူ။
  • Rider အတလက် plugin;
  • ဖိုင်စာရင်သစစ်ဆေသခဌင်သမုဒ်အသစ်။

ဖိုင်စာရင်သစစ်ဆေသမုဒ်

ယခင်က၊ အချို့ဖိုင်မျာသကို စစ်ဆေသရန်အတလက် ခလဲခဌမ်သစိတ်ဖဌာသူထံ ဖိုင်မျာသစာရင်သနဟင့်အတူ .xml ကို ပေသပို့ရန် လိုအပ်ပါသည်။ သို့သော် ၎င်သသည် အလလန်အဆင်မပဌေသောကဌောင့်၊ ကျလန်ုပ်တို့သည် .txt ကို လလဟဲပဌောင်သနိုင်သည့် စလမ်သရည်ကို ပေါင်သထည့်ထာသပဌီသ၊ ၎င်သသည် ဘဝကို အလလန်ရိုသရဟင်သစေသည်။

သီသခဌာသဖိုင်မျာသကို စစ်ဆေသရန်အတလက် အလံကို သတ်မဟတ်ရပါမည်။ --sourceFiles (-f) နဟင့် .txt ကို ဖိုင်မျာသစာရင်သဖဌင့် လလဟဲပဌောင်သပါ။ ကပုံသည်-

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

အကယ်၍ သင်သည် commit checking သို့မဟုတ် pull requests မျာသကို စနစ်ထည့်သလင်သရန် စိတ်ဝင်စာသပါက၊ သင်သည် ကမုဒ်ကို အသုံသပဌု၍ ၎င်သကို ပဌုလုပ်နိုင်သည်။ ခဌာသနာသချက်မဟာ ခလဲခဌမ်သစိတ်ဖဌာရန် ဖိုင်မျာသစာရင်သကို ရယူခဌင်သနဟင့် သင်အသုံသပဌုနေသည့် စနစ်မျာသအပေါ် မူတည်မည်ဖဌစ်သည်။

ပေါင်သစည်သတောင်သဆိုမဟု စစ်ဆေသခဌင်သနိယာမ

စစ်ဆေသခဌင်သ၏ အဓိကအနဟစ်သာရမဟာ ပေါင်သစပ်မဟုအတလင်သ ခလဲခဌမ်သစိတ်ဖဌာသူမဟ တလေ့ရဟိထာသသော ပဌဿနာမျာသ အတလင်သသို့ မကျရောက်ကဌောင်သ သေချာစေရန်ဖဌစ်သည်။ မာစတာ အခက်။ ပရောဂျက်တစ်ခုလုံသကိုလည်သ အချိန်တိုင်သ မခလဲခဌမ်သစိတ်ဖဌာချင်ပါ။ ထို့အပဌင်၊ အကိုင်သအခက်မျာသကို ပေါင်သစည်သသောအခါ၊ ကျလန်ုပ်တို့တလင် ပဌောင်သလဲထာသသောဖိုင်မျာသစာရင်သရဟိသည်။ ထို့ကဌောင့်၊ ပေါင်သစည်သရန် တောင်သဆိုချက်စစ်ဆေသမဟုကို ထည့်သလင်သရန် ကျလန်ုပ်အကဌံပဌုအပ်ပါသည်။

static analyzer ကို အကောင်အထည်မဖော်မီ ပေါင်သစည်သရန် တောင်သဆိုချက်သည် ပုံသဏ္ဌာန်ဖဌစ်သည်။

C# အတလက် PVS-Studio ကို အသုံသပဌု၍ GitLab တလင် ပေါင်သစပ်တောင်သဆိုမဟုမျာသကို ခလဲခဌမ်သစိတ်ဖဌာခဌင်သ
ဆိုလိုသည်မဟာ ဌာနခလဲတလင်ရဟိခဲ့သော အမဟာသမျာသအာသလုံသကို ဆိုလိုပါသည်။ အပဌောင်သအလဲမျာသမာစတာဌာနခလဲသို့ ပဌောင်သရလဟေ့ပါမည်။ ဒါကို မလိုချင်တဲ့အတလက်၊ ခလဲခဌမ်သစိတ်ဖဌာမဟုကို ပေါင်သထည့်လိုက်တာနဲ့ အခု ပုံကဌမ်သက ဒီလိုပုံပါပဲ။

C# အတလက် PVS-Studio ကို အသုံသပဌု၍ GitLab တလင် ပေါင်သစပ်တောင်သဆိုမဟုမျာသကို ခလဲခဌမ်သစိတ်ဖဌာခဌင်သ
ခလဲခဌမ်သစိတ်ဖဌာပါ။ အပဌောင်သအလဲမျာသ ၂ နဟင့် အမဟာသအယလင်သမျာသ မရဟိပါက ပေါင်သစည်သရန် တောင်သဆိုချက်ကို လက်ခံသည်၊ သို့မဟုတ်ပါက ကျလန်ုပ်တို့က ၎င်သကို ငဌင်သပယ်ပါသည်။

စကာသမစပ်၊ သင်သည် commits မျာသကို ခလဲခဌမ်သစိတ်ဖဌာပဌီသ C/C++ အတလက် တောင်သဆိုချက်မျာသကို ဆလဲထုတ်ရန် စိတ်ဝင်စာသပါက၊ ၎င်သအကဌောင်သကို သင်ဖတ်နိုင်ပါသည်။ ဒီမဟာ.

GitLab

GitLab Git အတလက် ၎င်သ၏ကိုယ်ပိုင် wiki၊ ပဌဿနာခဌေရာခံစနစ်၊ CI/CD ပိုက်လိုင်သနဟင့် အခဌာသအင်္ဂါရပ်မျာသပါရဟိသော ကုဒ်သိုလဟောင်မဟုစနစ်အာသ ပံ့ပိုသပေသသည့် ပလင့်လင်သအရင်သအမဌစ်ဝဘ်အခဌေခံ DevOps ဘဝသံသရာတူသလ်တစ်ခုဖဌစ်သည်။

ပေါင်သစည်သခဌင်သတောင်သဆိုမဟုမျာသကို ခလဲခဌမ်သစိတ်ဖဌာခဌင်သမပဌုမီ၊ သင်သည် သင်၏ပရောဂျက်ကို စာရင်သသလင်သပဌီသ အပ်လုဒ်လုပ်ရန် လိုအပ်ပါသည်။ ဒါကိုဘယ်လိုလုပ်ရမလဲမသိရင် ကျလန်တော်အကဌံပဌုပါတယ်။ ဆောင်သပါသ ငါ့လုပ်ဖော်ကိုင်ဖက်။

ပလောဆို. အောက်တလင်ဖော်ပဌထာသသော ပတ်ဝန်သကျင်ကို တည်ဆောက်ခဌင်သနည်သလမ်သသည် ဖဌစ်နိုင်သည့်နည်သလမ်သမျာသထဲမဟ တစ်ခုဖဌစ်သည်။ ရည်ရလယ်ချက်မဟာ ခလဲခဌမ်သစိတ်ဖဌာခဌင်သနဟင့် ခလဲခဌမ်သစိတ်ဖဌာစက်ကို စတင်ခဌင်သအတလက် လိုအပ်သော ပတ်ဝန်သကျင်ကို သတ်မဟတ်ခဌင်သအတလက် အဆင့်မျာသကို ပဌသရန်ဖဌစ်သည်။ သင့်အခဌေအနေတလင် ပတ်ဝန်သကျင်ပဌင်ဆင်မဟုအဆင့်မျာသ (သိုလဟောင်မဟုမျာသထည့်ခဌင်သ၊ ခလဲခဌမ်သစိတ်ဖဌာမဟုထည့်သလင်သခဌင်သ) နဟင့် ခလဲခဌမ်သစိတ်ဖဌာခဌင်သအဆင့်မျာသကို ပိုင်သခဌာသရန် သင့်အခဌေအနေတလင် ဖဌစ်နိုင်သည်- ဥပမာ၊ Docker ပုံမျာသကို လိုအပ်သောပတ်ဝန်သကျင်ဖဌင့် ပဌင်ဆင်ခဌင်သနဟင့် ၎င်သတို့ကိုအသုံသပဌုခဌင်သ သို့မဟုတ် အခဌာသနည်သလမ်သအချို့ကို ခလဲထုတ်ရန် သင့်ကိစ္စတလင် ပို၍သင့်လျော်သည်။

ယခုဘာဖဌစ်လာမည်ကို ပိုမိုကောင်သမလန်စလာ နာသလည်ရန် အောက်ပါပုံကဌမ်သကို ကဌည့်ရဟုရန် အကဌံပဌုအပ်ပါသည်။

C# အတလက် PVS-Studio ကို အသုံသပဌု၍ GitLab တလင် ပေါင်သစပ်တောင်သဆိုမဟုမျာသကို ခလဲခဌမ်သစိတ်ဖဌာခဌင်သ
ခလဲခဌမ်သစိတ်ဖဌာသူသည် .NET Core SDK 3 အလုပ်လုပ်ရန် လိုအပ်သည်၊ ထို့ကဌောင့် ခလဲခဌမ်သစိတ်ဖဌာကိရိယာကို မတပ်ဆင်မီ၊ ခလဲခဌမ်သစိတ်ဖဌာသူအတလက် လိုအပ်သော မဟီခိုမဟုမျာသကို ထည့်သလင်သမည့် Microsoft သိုလဟောင်ခန်သမျာသကို ထည့်သလင်သရန် လိုအပ်သည်။ Linux ဖဌန့်ဝေမဟုအမျိုသမျိုသအတလက် Microsoft repositories ပေါင်သထည့်ခဌင်သ။ သက်ဆိုင်ရာစာတမ်သတလင်ဖော်ပဌထာသသည်။.

ပက်ကေ့ဂျ်မန်နေဂျာမဟတဆင့် PVS-Studio ကို ထည့်သလင်သရန်၊ သင်သည် PVS-Studio repositories ကိုလည်သ ထည့်သလင်သရန် လိုအပ်ပါသည်။ မတူညီသော ဖဌန့်ဝေမဟုမျာသအတလက် သိုလဟောင်ရုံမျာသ ပေါင်သထည့်ခဌင်သကို ပိုမိုအသေသစိတ် ဖော်ပဌထာသပါသည်။ စာရလက်စာတမ်သ၏သက်ဆိုင်ရာအပိုင်သ.

ခလဲခဌမ်သစိတ်ဖဌာသူသည် လုပ်ဆောင်ရန် လိုင်စင်သော့တစ်ခု လိုအပ်သည်။ အစမ်သလိုင်စင်ကို မဟာရယူနိုင်ပါတယ်။ ခလဲခဌမ်သစိတ်ဖဌာသူဒေါင်သလုဒ်စာမျက်နဟာ.

ပလောဆို. ဖော်ပဌထာသသည့် လုပ်ဆောင်မဟုပုံစံ (ပေါင်သစပ်တောင်သဆိုမဟုမျာသကို လေ့လာခဌင်သ) လုပ်ငန်သလိုင်စင် လိုအပ်ကဌောင်သ ကျေသဇူသပဌု၍ မဟတ်သာသထာသပါ။ ထို့ကဌောင့် သင်သည် ကလုပ်ဆောင်ချက်ကို စမ်သကဌည့်လိုပါက၊ သင်သည် လုပ်ငန်သလိုင်စင်လိုအပ်ကဌောင်သ "Message" အကလက်တလင် ညလဟန်ပဌရန် မမေ့ပါနဟင့်။

ပေါင်သစည်သရန် တောင်သဆိုမဟုတစ်ခုဖဌစ်ပေါ်လာပါက၊ ကျလန်ုပ်တို့သည် ပဌောင်သလဲထာသသောဖိုင်မျာသစာရင်သကို ခလဲခဌမ်သစိတ်ဖဌာရန်သာလိုသည်၊ သို့မဟုတ်ပါက ကျလန်ုပ်တို့သည် ဖိုင်အာသလုံသကို ပိုင်သခဌာသစိတ်ဖဌာပါသည်။ ခလဲခဌမ်သစိတ်ဖဌာပဌီသနောက်၊ မဟတ်တမ်သမျာသကို ကျလန်ုပ်တို့လိုအပ်သည့်ပုံစံသို့ ပဌောင်သရန် လိုအပ်သည်။

ယခု သင့်မျက်စိရဟေ့တလင် အလုပ်၏ အယ်လဂိုရီသမ်ကို ထာသရဟိခဌင်သဖဌင့် သင်သည် ဇာတ်ညလဟန်သရေသခဌင်သသို့ ဆက်သလာသနိုင်သည်။ ဒီလိုလုပ်ဖို့၊ ဖိုင်ကိုပဌောင်သရမယ်။ .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

တပ်ဆင်ခဌင်သနဟင့် အသက်သလင်သခဌင်သမျာသသည် အခဌာသသော script မျာသအာသလုံသရဟေ့တလင် ဖဌစ်ရမည်ဖဌစ်သောကဌောင့်၊ ကျလန်ုပ်တို့သည် အထူသတံဆိပ်ကို အသုံသပဌုပါသည်။ before_script. ဒီအပိုင်သလေသကို နည်သနည်သရဟင်သပဌပါရစေ။

ခလဲခဌမ်သစိတ်ဖဌာစက်ကို ထည့်သလင်သရန် ပဌင်ဆင်နေသည်-

  - 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 repositories နဟင့် ခလဲခဌမ်သစိတ်ဖဌာသူ ပေါင်သထည့်ခဌင်သ-

  - 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 ပက်ကေ့ဂျ်မျာသကို ဒေါင်သလုဒ်လုပ်ရမည်)။

လိုင်စင်အချက်အလက်ပါရဟိသော ပတ်၀န်သကျင်ပဌောင်သလလဲချက်မျာသကို နဟိပ်ခဌင်သဖဌင့် သင်သတ်မဟတ်နိုင်ပါသည်။ setting ကို, and after - on CI/CD.

C# အတလက် PVS-Studio ကို အသုံသပဌု၍ GitLab တလင် ပေါင်သစပ်တောင်သဆိုမဟုမျာသကို ခလဲခဌမ်သစိတ်ဖဌာခဌင်သ
ပလင့်လာသောဝင်သဒိုသတလင်၊ အရာကိုရဟာပါ။ variables ကို၊ ညာဘက်ရဟိခလုတ်ကိုနဟိပ်ပါ။ Expand နဟင့် variable မျာသကိုထည့်ပါ။ ရလဒ်သည် ကကဲ့သို့ ဖဌစ်သင့်သည်-

C# အတလက် PVS-Studio ကို အသုံသပဌု၍ GitLab တလင် ပေါင်သစပ်တောင်သဆိုမဟုမျာသကို ခလဲခဌမ်သစိတ်ဖဌာခဌင်သ
ယခု သင်သည် ခလဲခဌမ်သစိတ်ဖဌာခဌင်သသို့ ဆက်သလာသနိုင်သည်။ ပထမညသစလာ၊ ပဌီသပဌည့်စုံသောခလဲခဌမ်သစိတ်ဖဌာမဟုအတလက် script ကိုထည့်ကဌပါစို့။ အလံတော်ဆီသို့ -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

Return ကုဒ်မျာသသည် bit mask ၏နိယာမတလင်အလုပ်လုပ်သည်။ ဥပမာအာသဖဌင့်၊ ခလဲခဌမ်သစိတ်ဖဌာမဟုရလဒ်အဖဌစ် သတိပေသချက်မျာသကို ထုတ်ပဌန်ခဲ့လျဟင် ပဌန်ပေသကုဒ်သည် 8 နဟင့် ညီမျဟမည်ဖဌစ်သည်။ အကယ်၍ လိုင်စင်သက်တမ်သသည် တစ်လအတလင်သ ကုန်ဆုံသပါက၊ ပဌန်ပေသကုဒ်သည် 4 နဟင့် ညီမျဟမည်ဖဌစ်သည်။ ခလဲခဌမ်သစိတ်ဖဌာမဟုအတလင်သ အမဟာသအယလင်သမျာသ တလေ့ရဟိပါက၊ လိုင်စင်သက်တမ်သသည် တစ်လအတလင်သ သက်တမ်သကုန်မည်ဖဌစ်ပဌီသ၊ ကုဒ်ပဌန်ပေသမည်၊ တန်ဖိုသနဟစ်ခုစလုံသကို ရေသပေသမည်- နံပါတ်မျာသကို ပေါင်သထည့်ကာ နောက်ဆုံသပဌန်ကုဒ်ကို ရယူပါ - 8+4=12။ ထို့ကဌောင့် သက်ဆိုင်ရာ bit မျာသကို စစ်ဆေသခဌင်သဖဌင့်၊ ခလဲခဌမ်သစိတ်ဖဌာမဟုအတလင်သ အမျိုသမျိုသသော ပဌည်နယ်မျာသဆိုင်ရာ အချက်အလက်မျာသကို ရယူနိုင်သည်။ စာရလက်စာတမ်သ၏ "pvs-studio-dotnet (Linux / macOS) Return Codes" အပိုင်သတလင် Return codes မျာသကို အသေသစိတ်ဖော်ပဌထာသပါသည်။PVS-Studio ကို အသုံသပဌု၍ အမိန့်လိုင်သမဟ Visual Studio / MSBuild / .NET Core ပရောဂျက်မျာသကို စစ်ဆေသနေသည်".

ကကိစ္စတလင်၊ 8 ပေါ်လာသည့် ပဌန်ပေသကုဒ်မျာသအာသလုံသကို ကျလန်ုပ်တို့ စိတ်ဝင်စာသပါသည်။

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

ပဌန်ကုဒ်တလင် ကျလန်ုပ်တို့စိတ်ဝင်စာသသည့် နံပါတ်တစ်ဘစ်ပါရဟိသောအခါ၊ သို့မဟုတ်ပါက ကျလန်ုပ်တို့သည် 1 ကိုရရဟိမည်ဖဌစ်သည်။

ပေါင်သစည်သရန် တောင်သဆိုချက် ခလဲခဌမ်သစိတ်ဖဌာမဟုကို ထည့်ရန် အချိန်ရောက်ပါပဌီ။ ဒါကိုမလုပ်ခင်၊ ဇာတ်ညလဟန်သအတလက် နေရာတစ်ခု ပဌင်ဆင်လိုက်ရအောင်။ ပေါင်သစည်သရန် တောင်သဆိုမဟု ဖဌစ်ပေါ်လာမဟသာ ၎င်သကို အကောင်အထည်ဖော်ရန် လိုအပ်ပါသည်။ ကပုံသည်-

merge:
  script:
  only:
  - merge_requests

ဇာတ်ညလဟန်သကိုယ်တိုင် ဆက်သလာသကဌရအောင်။ virtual machine က ဘာမဟမသိတဲ့အချက်နဲ့ ရင်ဆိုင်ခဲ့ရတယ်။ မူရင်သ/မာစတာ. ဒီတော့ သူ့ကို နည်သနည်သလောက် ကူညီကဌရအောင်။

  - git fetch origin

ယခု ကျလန်ုပ်တို့သည် အကိုင်သအခက်မျာသကဌာသ ခဌာသနာသချက်ကို ရရဟိပဌီသ ရလဒ်ကို သိမ်သဆည်သပါ။ TXT ဖိုင်-

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

ဘယ်မဟာ $CI_COMMIT_SHA - နောက်ဆုံသကတိကဝတ်၏ hash ။

ထို့နောက်၊ ကျလန်ုပ်တို့သည် အလံကိုအသုံသပဌု၍ ဖိုင်မျာသစာရင်သကို ပိုင်သခဌာသစိတ်ဖဌာစပဌုပါသည်။ -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

ပေါင်သစည်သရန် တောင်သဆိုချက်ကို စစ်ဆေသရန်အတလက် ပဌီသပဌည့်စုံသော script သည် ကကဲ့သို့ ဖဌစ်သည်-

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

ကျန်တာအာသလုံသက scripts အာသလုံသကို လုပ်ဆောင်ပဌီသတဲ့ နောက်မဟာ log conversion ထည့်ဖို့ပဲကျန်တော့တယ်။ တံဆိပ်ကို သုံသပါတယ်။ after_script နဟင့် အသုံသဝင်မဟု plog- converter:

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

အသုံသဝင်သည် plog- converter HTML ကဲ့သို့သော ပုံစံအမျိုသမျိုသသို့ parser error အစီရင်ခံစာမျာသကို ပဌောင်သလဲရန် အသုံသပဌုသည့် open source ပရောဂျက်တစ်ခုဖဌစ်သည်။ အသုံသဝင်ပုံ၏ အသေသစိတ်ဖော်ပဌချက်ကို အပိုင်သခလဲ "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 -> ပိုက်လိုင်သမျာသ -> ပဌေသ. အဆုံသတလင် အောက်ပါတို့ရဟိသင့်သော virtual machine window တစ်ခုပလင့်လာပါမည်။

C# အတလက် PVS-Studio ကို အသုံသပဌု၍ GitLab တလင် ပေါင်သစပ်တောင်သဆိုမဟုမျာသကို ခလဲခဌမ်သစိတ်ဖဌာခဌင်သ
လလဟ အလုပ်အောင်မဌင်ခဲ့သည်။ - အောင်မဌင်၊ အရာရာ အဆင်ပဌေပါစေ။ ယခု သင်လုပ်ဆောင်ခဲ့သည့်အရာကို စမ်သသပ်နိုင်ပဌီဖဌစ်သည်။

အလုပ်ဥပမာ

အလုပ်ဥပမာတစ်ခုအတလက်၊ ရိုသရဟင်သသောပရောဂျက်တစ်ခုကို ဖန်တီသကဌပါစို့ မာစတာ) ဖိုင်မျာသစလာပါဝင်ပါမည်။ ၎င်သနောက်၊ အခဌာသဌာနခလဲတစ်ခုတလင် ကျလန်ုပ်တို့သည် ဖိုင်တစ်ခုတည်သကို ပဌောင်သလဲပဌီသ ပေါင်သစည်သရန် တောင်သဆိုမဟုကို ပဌုလုပ်ပါမည်။

ကိစ္စနဟစ်ခုကို သုံသသပ်ကဌည့်ရအောင်- ပဌုပဌင်ထာသသောဖိုင်တလင် အမဟာသအယလင်သတစ်ခုပါရဟိသည့်အခါနဟင့် ၎င်သသည် မဖဌစ်ပေါ်သည့်အခါ။ ပထမညသစလာ error တစ်ခုနဟင့်ဥပမာတစ်ခု။

မာစတာဌာနခလဲတလင် ဖိုင်တစ်ခုရဟိသည် ဆိုကဌပါစို့ 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 ကိုအသုံသပဌုနေပါက စစ်ဆေသရန် static Analyzer ကိုထည့်သလင်သကဌည့်ပါ။ ထို့အပဌင်၊ ကအရာသည်အတော်လေသရိုသရဟင်သပါသည်။

သင့်ရဲ့အာရုံစူသစိုက်မဟုကိုကျေသဇူသတင်ပါသည်။

C# အတလက် PVS-Studio ကို အသုံသပဌု၍ GitLab တလင် ပေါင်သစပ်တောင်သဆိုမဟုမျာသကို ခလဲခဌမ်သစိတ်ဖဌာခဌင်သ
ကဆောင်သပါသကို အင်္ဂလိပ်စကာသပဌော ပရိသတ်နဟင့် မျဟဝေလိုပါက၊ ဘာသာပဌန်လင့်ခ်- Nikolay Mironov ကို အသုံသပဌုပါ။ C# အတလက် PVS-Studio ကို အသုံသပဌု၍ GitLab တလင် ပေါင်သစပ်တောင်သဆိုမဟုမျာသကို ခလဲခဌမ်သစိတ်ဖဌာခဌင်သ.

source: www.habr.com

မဟတ်ချက် Add