GitLab-д дуртай, алдаануудыг үзэн яддаг уу? Эх кодынхоо чанарыг сайжруулахыг хүсч байна уу? Тэгвэл та зөв газартаа хүрлээ. Өнөөдөр бид нэгтгэх хүсэлтийг шалгахын тулд PVS-Studio C# анализаторыг хэрхэн тохируулахыг танд хэлэх болно. Ганц эвэртийн уур амьсгалтай, хүн бүрд аз жаргалтай уншаарай.
Дашрамд хэлэхэд бид маш олон зүйлийг хийсэн 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
Хэрэв та үйлдлийг шалгах эсвэл татах хүсэлтийг тохируулах сонирхолтой байгаа бол энэ горимыг ашиглан үүнийг хийж болно. Ялгаа нь дүн шинжилгээ хийх файлуудын жагсаалтыг авахад байх бөгөөд таны ашиглаж буй системээс хамаарна.
Нэгтгэх хүсэлтийг шалгах зарчим
Шалгалтын гол мөн чанар нь нэгтгэх явцад анализаторын илрүүлсэн асуудалд орохгүй байх явдал юм. мастер салбар. Мөн бид төслийн бүх талаар дүн шинжилгээ хийхийг хүсдэггүй. Түүнчлэн, салбаруудыг нэгтгэх үед бид өөрчлөгдсөн файлуудын жагсаалттай болно. Тиймээс би нэгтгэх хүсэлтийн шалгалтыг нэмэхийг санал болгож байна.
Статик анализаторыг хэрэгжүүлэхийн өмнө нэгтгэх хүсэлт иймэрхүү харагдаж байна:
Энэ нь салбар дахь бүх алдаанууд юм өөрчлөлтүүд, мастер салбар руу шилжинэ. Бид үүнийг хүсэхгүй байгаа тул бид дүн шинжилгээг нэмсэн бөгөөд одоо диаграмм дараах байдалтай байна.
Шинжилгээ хийж байна өөрчлөлт2 Хэрэв ямар ч алдаа байхгүй бол бид нэгтгэх хүсэлтийг хүлээн зөвшөөрч, эс тэгвээс татгалзана.
Дашрамд дурдахад, хэрэв та C/C++-ийн үүрэг хариуцлагын дүн шинжилгээ хийх, татах хүсэлтийг сонирхож байгаа бол энэ талаар уншиж болно.
GitLab
Та нэгтгэх хүсэлтэд дүн шинжилгээ хийж эхлэхээсээ өмнө төслөө бүртгүүлж, байршуулах хэрэгтэй. Хэрэв та үүнийг яаж хийхээ мэдэхгүй байгаа бол би санал болгож байна
тайлбар. Доор тайлбарласан орчныг бий болгох арга нь боломжит аргуудын нэг юм. Зорилго нь дүн шинжилгээ хийх, анализаторыг ажиллуулахад шаардлагатай орчныг бүрдүүлэх алхмуудыг харуулах явдал юм. Магадгүй таны тохиолдолд хүрээлэн буй орчныг бэлтгэх (репозитор нэмэх, анализатор суурилуулах) болон дүн шинжилгээ хийх үе шатуудыг салгах нь илүү оновчтой байх болно: жишээлбэл, Docker зургийг шаардлагатай орчинд бэлтгэх, тэдгээрийг ашиглах эсвэл өөр аргыг ашиглах.
Одоо юу болохыг илүү сайн ойлгохын тулд би дараах диаграмыг үзэхийг санал болгож байна.
Анализаторыг ажиллуулахын тулд .NET Core SDK 3 шаардлагатай тул анализаторыг суулгахаасаа өмнө анализаторт шаардлагатай хамаарлыг суулгах Microsoft репозиторуудыг нэмэх хэрэгтэй. Төрөл бүрийн Linux түгээлтийн Microsoft репозиторыг нэмж байна
Багц менежерээр дамжуулан PVS-Studio-г суулгахын тулд та мөн PVS-Studio хадгалах санг нэмэх шаардлагатай. Төрөл бүрийн түгээлтийн репозиторуудыг нэмэх талаар илүү дэлгэрэнгүй тайлбарласан болно
Анализаторыг ажиллуулахын тулд лицензийн түлхүүр шаардлагатай. Та туршилтын лиценз авах боломжтой
тайлбар. Тодорхойлсон үйл ажиллагааны горим (нэгтгэх хүсэлтийн шинжилгээ) нь аж ахуйн нэгжийн лиценз шаарддаг гэдгийг анхаарна уу. Тиймээс, хэрэв та энэ үйлдлийн горимыг туршиж үзэхийг хүсч байвал "Мессеж" талбарт аж ахуйн нэгжийн лиценз хэрэгтэй гэдгээ бүү мартаарай.
Хэрэв нэгтгэх хүсэлт гарвал бид зөвхөн өөрчлөгдсөн файлуудын жагсаалтыг шинжлэх хэрэгтэй, эс тэгвээс бид бүх файлд дүн шинжилгээ хийх хэрэгтэй. Шинжилгээ хийсний дараа бид бүртгэлийг шаардлагатай формат руу хөрвүүлэх хэрэгтэй.
Одоо таны нүдний өмнө ажлын алгоритм байгаа тул та скрипт бичих рүү шилжиж болно. Үүнийг хийхийн тулд та файлыг өөрчлөх хэрэгтэй .gitlab-ci.yml эсвэл байхгүй бол үүсгэ. Үүнийг үүсгэхийн тулд та төслийнхөө нэр дээр дарах хэрэгтэй -> CI/CD-г тохируулна уу.
Одоо бид зохиолоо бичихэд бэлэн боллоо. Эхлээд анализаторыг суулгах кодыг бичээд лицензээ оруулна уу.
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.
Нээгдсэн цонхонд тухайн зүйлийг олоорой Хувьсагчууд, баруун талд байгаа товчлуур дээр дарна уу Expand болон хувьсагч нэмэх. Үр дүн нь иймэрхүү харагдах ёстой:
Одоо та шинжилгээнд шилжиж болно. Эхлээд бүрэн дүн шинжилгээ хийх скрипт нэмье. Туг руу -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=XNUMX. Тиймээс, харгалзах битүүдийг шалгаснаар дүн шинжилгээ хийх явцад янз бүрийн төлөв байдлын талаархи мэдээллийг авах боломжтой. Буцаах кодуудыг баримт бичгийн "pvs-studio-dotnet (Linux / macOS) Буцаах кодууд" хэсэгт илүү дэлгэрэнгүй тайлбарласан болно.
Энэ тохиолдолд бид 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
Хэрэгсэл
Дашрамд хэлэхэд, хэрэв та IDE-ийн .json тайлантай орон нутгийн хэмжээнд эвтэйхэн ажиллахыг хүсвэл би манайхыг санал болгож байна.
Тохиромжтой болгох үүднээс энд байна .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 -> Шугам хоолой -> ажиллаж байгаа. Виртуал машины цонх нээгдэх бөгөөд үүний төгсгөлд дараахь зүйл байх ёстой.
харсан Ажил амжилттай болсон - амжилт, бүх зүйл сайхан байна. Одоо та хийсэн зүйлээ шалгаж болно.
Ажлын жишээ
Ажлын жишээний хувьд энгийн төсөл (д мастер) хэд хэдэн файл агуулна. Үүний дараа өөр салбар дээр бид зөвхөн нэг файлыг өөрчилж, нэгтгэх хүсэлт гаргахыг оролдох болно.
Өөрчлөгдсөн файлд алдаа байгаа болон алдаагүй үед гэсэн хоёр тохиолдлыг авч үзье. Нэгдүгээрт, алдаатай жишээ.
Мастер салбарт файл байна гэж бодъё Program.cs, энэ нь алдаа агуулаагүй боловч өөр салбар дээр хөгжүүлэгч алдаатай код нэмсэн бөгөөд нэгтгэх хүсэлт гаргахыг хүсч байна. Тэр ямар алдаа гаргасан нь тийм ч чухал биш, гол нь байгаа нь л чухал. Жишээлбэл, оператор мартсан хаях (Тийм ээ,
void MyAwesomeMethod(String name)
{
if (name == null)
new ArgumentNullException(....);
// do something
....
}
Алдаатай жишээнд дүн шинжилгээ хийсний үр дүнг харцгаая. Мөн зөвхөн нэг файл задлан шинжлэгдсэн эсэхийг шалгахын тулд би туг нэмсэн -r pvs-studio-dotnet эхлүүлэх шугам руу:
Анализатор алдаа олж, салбаруудыг нэгтгэхийг зөвшөөрөхгүй байгааг бид харж байна.
Алдаагүйгээр жишээг шалгацгаая. Кодыг засах:
void MyAwesomeMethod(String name)
{
if (name == null)
throw new ArgumentNullException(....);
// do something
....
}
Хүсэлтийн шинжилгээний үр дүнг нэгтгэх:
Бидний харж байгаагаар ямар ч алдаа олдоогүй бөгөөд даалгаврын гүйцэтгэл амжилттай болсон бөгөөд үүнийг шалгахыг хүссэн юм.
дүгнэлт
Салбаруудыг нэгтгэхийн өмнө муу кодыг арилгах нь маш тохиромжтой бөгөөд тааламжтай байдаг. Тиймээс хэрэв та CI/CD ашиглаж байгаа бол шалгахын тулд статик анализатор суулгаж үзээрэй. Түүнээс гадна үүнийг маш энгийнээр хийдэг.
Анхаарал тавьсан та бүхэнд баярлалаа.
Хэрэв та энэ нийтлэлийг англи хэлээр ярьдаг үзэгчидтэй хуваалцахыг хүсвэл орчуулгын холбоосыг ашиглана уу: Николай Миронов.
Эх сурвалж: www.habr.com