PVS-Studio ашиглан Travis CI, Buddy болон AppVeyor-д хийх хүсэлт, хүсэлтийн дүн шинжилгээ.

PVS-Studio ашиглан Travis CI, Buddy болон AppVeyor-д хийх хүсэлт, хүсэлтийн дүн шинжилгээ.
Linux болон macOS дээрх C ба C++ хэлнүүдийн PVS-Studio анализатор дээр 7.04 хувилбараас эхлэн заасан файлуудын жагсаалтыг шалгах туршилтын сонголт гарч ирэв. Шинэ горимыг ашигласнаар та анализаторыг хүсэлтийг шалгах, татах хүсэлтийг тохируулах боломжтой. Энэ нийтлэл нь Travis CI, Buddy, AppVeyor зэрэг алдартай CI (Тасралтгүй Интеграци) системд GitHub төслийн өөрчлөгдсөн файлуудын жагсаалтыг хэрхэн шалгахыг танд хэлэх болно.

Файлын жагсаалтыг шалгах горим

PVS-студи нь C, C++, C# болон Java хэл дээр бичигдсэн программуудын эх кодын алдаа болон болзошгүй эмзэг байдлыг тодорхойлох хэрэгсэл юм. Windows, Linux болон macOS дээрх 64 битийн системүүд дээр ажиллана.

Linux болон macOS-д зориулсан PVS-Studio 7.04 хувилбарт эх файлуудын жагсаалтыг шалгах горим гарч ирэв. Энэ нь бүтээх систем нь танд файл үүсгэх боломжийг олгодог төслүүдэд ажилладаг compile_commands.json. Энэ нь анализаторт заасан файлуудын эмхэтгэлийн талаархи мэдээллийг задлахад шаардлагатай. Хэрэв таны бүтээх систем compile_commands.json файлыг үүсгэхийг дэмждэггүй бол та хэрэглүүрийг ашиглан ийм файл үүсгэхийг оролдож болно. Bear.

Мөн файлын жагсаалтыг шалгах горимыг хөрвүүлэгчийн эхлүүлсэн мөрийн бүртгэлтэй (pvs-studio-analyzer trace) хамт ашиглаж болно. Үүнийг хийхийн тулд та эхлээд төслийн бүрэн бүтцийг хийж, хянах хэрэгтэй бөгөөд ингэснээр анализатор шалгаж байгаа бүх файлын эмхэтгэлийн параметрүүдийн талаар бүрэн мэдээллийг цуглуулдаг.

Гэсэн хэдий ч, энэ сонголт нь мэдэгдэхүйц сул талтай байдаг - та үүнийг ажиллуулах бүртээ бүхэл бүтэн төслийн ул мөрийг хийх шаардлагатай болно, энэ нь үүрэг даалгаврыг хурдан шалгах санаатай зөрчилддөг. Эсвэл, хэрэв та ул мөрийн үр дүнг өөрөө кэш хийвэл, ул мөрийн дараа эх файлуудын хамаарлын бүтэц өөрчлөгдвөл анализаторын дараагийн ажиллагаа бүрэн бус байж болно (жишээ нь эх файлуудын аль нэгэнд шинэ #include нэмэгдсэн).

Иймээс бид файлын жагсаалтыг шалгах горимыг мөрийн бүртгэлтэй хамт хүсэлтийг шалгах эсвэл татах хүсэлтийг ашиглахыг зөвлөдөггүй. Хэрэв та үүрэг даалгаврыг шалгахдаа өсөн нэмэгдэж буй бүтээх боломжтой бол горимыг ашиглах талаар бодож үзээрэй нэмэлт шинжилгээ.

Шинжилгээнд зориулсан эх файлуудын жагсаалтыг текст файлд хадгалж, параметрийг ашиглан анализатор руу дамжуулдаг -S:

pvs-studio-analyzer analyze ... -f build/compile_commands.json -S check-list.txt

Энэ файл нь файлуудын харьцангуй эсвэл үнэмлэхүй замыг зааж өгдөг бөгөөд шинэ файл бүр шинэ мөрөнд байх ёстой. Шинжилгээнд зориулж зөвхөн файлын нэрийг төдийгүй төрөл бүрийн текстийг зааж өгөхийг зөвшөөрнө. Анализатор энэ нь файл биш гэдгийг харж, мөрийг үл тоомсорлох болно. Хэрэв файлуудыг гараар зааж өгсөн бол энэ нь тайлбар өгөхөд хэрэг болно. Гэсэн хэдий ч, ихэвчлэн CI-д дүн шинжилгээ хийх явцад файлуудын жагсаалтыг үүсгэдэг, жишээлбэл, эдгээр нь гүйцэтгэх эсвэл татах хүсэлтийн файлууд байж болно.

Одоо энэ горимыг ашигласнаар та шинэ кодыг хөгжүүлэлтийн үндсэн салбар руу орохоос өмнө хурдан шалгаж болно. Сканнерын систем нь анализаторын анхааруулгад хариу үйлдэл үзүүлэхийн тулд хэрэгсэл плог хөрвүүлэгч туг нэмсэн --заагч-сануулгууд:

plog-converter ... --indicate-warnings ... -o /path/to/report.tasks ...

Хэрэв анализаторын тайланд анхааруулга байгаа бол хувиргагч нь энэ тугийн тусламжтайгаар тэгээс өөр кодыг буцаана. Буцах кодыг ашигласнаар та урьдчилан захиалах, гүйцэтгэх эсвэл татах хүсэлтийг хаах боломжтой бөгөөд үүсгэсэн анализаторын тайланг харуулах, хуваалцах эсвэл имэйлээр илгээх боломжтой.

Анхаарна уу. Та эхлээд файлуудын жагсаалтад дүн шинжилгээ хийж эхлэхэд төслийг бүхэлд нь шинжлэх болно, учир нь анализатор нь толгой файлууд дээрх төслийн эх файлуудын хамаарлын файлыг үүсгэх шаардлагатай. Энэ нь C болон C++ файлуудыг шинжлэх онцлог юм. Ирээдүйд хамаарлын файлыг кэш хийх боломжтой бөгөөд үүнийг анализатор автоматаар шинэчлэх болно. Файлын жагсаалтыг шалгах горимыг ашиглахдаа нэмэлт дүн шинжилгээ хийх горимыг ашиглахаас илүү давуу тал нь объектын файлуудыг биш зөвхөн тухайн файлыг кэшлэх шаардлагатай байдаг.

Татах хүсэлтийн шинжилгээний ерөнхий зарчим

Төслийг бүхэлд нь шинжлэх нь маш их цаг хугацаа шаарддаг тул зөвхөн тодорхой хэсгийг нь шалгах нь зүйтэй юм. Асуудал нь та шинэ файлуудыг төслийн бусад файлуудаас салгах хэрэгтэй болдог.

Хоёр салаатай модны жишээг харцгаая:

PVS-Studio ашиглан Travis CI, Buddy болон AppVeyor-д хийх хүсэлт, хүсэлтийн дүн шинжилгээ.

Энэ амлалт гэж төсөөлөөд үз дээ A1 аль хэдийн шалгагдсан нэлээн их хэмжээний код агуулсан. Хэсэг хугацааны өмнө бид амлалтаас салбар хийсэн A1 мөн зарим файлыг өөрчилсөн.

Мэдээжийн хэрэг та үүнийг дараа нь анзаарсан A1 дахин хоёр амлалт гарсан, гэхдээ эдгээр нь бусад салбаруудын нэгдэл байсан, учир нь бид үүрэг хүлээгээгүй. мастер. Тэгээд одоо цаг нь иржээ hotfix бэлэн. Тийм ч учраас нэгдэхийг татах хүсэлт гарч ирсэн B3 и A3.

Мэдээжийн хэрэг, тэдгээрийн нэгдлийн үр дүнг бүхэлд нь шалгах боломжтой боловч хэдхэн файлыг өөрчилсөн тул энэ нь хэтэрхий их цаг хугацаа шаардсан бөгөөд үндэслэлгүй байх болно. Тиймээс зөвхөн өөрчлөгдсөнийг шинжлэх нь илүү үр дүнтэй байдаг.

Үүнийг хийхийн тулд бид мастер болгон нэгтгэхийг хүсч буй салбарынхаа HEAD-д байгаа салбаруудын ялгааг олж авна.

git diff --name-only HEAD origin/$MERGE_BASE > .pvs-pr.list

$MERGE_BASE Бид үүнийг дараа нь нарийвчлан авч үзэх болно. Үнэн хэрэгтээ CI үйлчилгээ бүр нэгтгэх мэдээллийн сангийн талаар шаардлагатай мэдээллээр хангадаггүй тул та энэ өгөгдлийг олж авах шинэ арга замыг гаргаж ирдэг. Үүнийг тайлбарласан вэб үйлчилгээ бүрд доор дэлгэрэнгүй тайлбарлах болно.

Тиймээс бид салбаруудын ялгааг олж авлаа, эс тэгвээс өөрчлөгдсөн файлын нэрсийн жагсаалтыг гаргав. Одоо бид файлаа өгөх хэрэгтэй .pvs-pr.list (бид дээрх гаралтыг түүн рүү шилжүүлсэн) анализатор руу:

pvs-studio-analyzer analyze -j8 
                            -o PVS-Studio.log 
                            -S .pvs-pr.list

Шинжилгээ хийсний дараа бид бүртгэлийн файлыг (PVS-Studio.log) уншихад хялбар формат руу хөрвүүлэх хэрэгтэй.

plog-converter -t errorfile PVS-Studio.log --cerr -w

Энэ тушаал нь алдаануудыг жагсаах болно stderr (стандарт алдааны мэдээний гаралт).

Зөвхөн одоо бид алдааг харуулахаас гадна угсрах, шалгах үйлчилгээнд асуудал байгаа эсэхийг мэдэгдэх шаардлагатай байна. Энэ зорилгоор хөрвүүлэгч дээр туг нэмсэн -W (--заагч-сануулгууд). Хэрэв дор хаяж нэг анализаторын анхааруулга байгаа бол хэрэгслийн буцах код плог хөрвүүлэгч нь 2 болж өөрчлөгдөх бөгөөд энэ нь эргээд татах хүсэлтийн файлуудад гарч болзошгүй алдааны талаар CI үйлчилгээнд мэдэгдэх болно.

Травис CI

Тохиргоог файл хэлбэрээр хийсэн .travis.yml. Тохиромжтой болгохын тулд би бүх зүйлийг файлаас дуудагдах функц бүхий тусдаа bash скрипт болгон оруулахыг зөвлөж байна. .travis.yml (bash script_name.sh function_name).

Бид шаардлагатай кодыг скриптэд нэмнэ bash, ингэснээр бид илүү их функцийг авах болно. хэсэгт Суулгах дараах зүйлийг бичье.

install:
  - bash .travis.sh travis_install

Хэрэв танд ямар нэгэн заавар байгаа бол зураасыг арилгаж скрипт рүү шилжүүлж болно.

Файлаа нээцгээе .travis.sh болон анализаторын тохиргоог функцэд нэмнэ travis_install():

travis_install() {
  wget -q -O - https://files.viva64.com/etc/pubkey.txt 
    | sudo apt-key add -
  sudo wget -O /etc/apt/sources.list.d/viva64.list 
    https://files.viva64.com/etc/viva64.list
  
  sudo apt-get update -qq
  sudo apt-get install -qq pvs-studio 
}

Одоо энэ хэсэгт нэмж оруулъя скрипт дүн шинжилгээ хийх:

script:
  - bash .travis.sh travis_script

Мөн bash скрипт дээр:

travis_script() {
  pvs-studio-analyzer credentials $PVS_USERNAME $PVS_KEY
  
  if [ "$TRAVIS_PULL_REQUEST" != "false" ]; then
    git diff --name-only origin/HEAD > .pvs-pr.list
    pvs-studio-analyzer analyze -j8 
                                -o PVS-Studio.log 
                                -S .pvs-pr.list 
                                --disableLicenseExpirationCheck
  else
    pvs-studio-analyzer analyze -j8 
                                -o PVS-Studio.log 
                                --disableLicenseExpirationCheck
  fi
  
  plog-converter -t errorfile PVS-Studio.log --cerr -w
}

Төслийг бүтээсний дараа энэ кодыг ажиллуулах шаардлагатай. Жишээлбэл, хэрэв та CMake дээр бүтээгдсэн бол:

travis_script() {
  CMAKE_ARGS="-DCMAKE_EXPORT_COMPILE_COMMANDS=On ${CMAKE_ARGS}"
  cmake $CMAKE_ARGS CMakeLists.txt
  make -j8
}

Энэ нь дараах байдлаар гарах болно.

travis_script() {
  CMAKE_ARGS="-DCMAKE_EXPORT_COMPILE_COMMANDS=On ${CMAKE_ARGS}"
  cmake $CMAKE_ARGS CMakeLists.txt
  make -j8
  
  pvs-studio-analyzer credentials $PVS_USERNAME $PVS_KEY
  
  if [ "$TRAVIS_PULL_REQUEST" != "false" ]; then
    git diff --name-only origin/HEAD > .pvs-pr.list
    pvs-studio-analyzer analyze -j8 
                                -o PVS-Studio.log 
                                -S .pvs-pr.list 
                                --disableLicenseExpirationCheck
  else
    pvs-studio-analyzer analyze -j8 
                                -o PVS-Studio.log 
                                --disableLicenseExpirationCheck
  fi
  
  plog-converter -t errorfile PVS-Studio.log --cerr -w
}

Та эдгээр орчны хувьсагчдыг аль хэдийн анзаарсан байх $TRAVIS_PULL_REQUEST и $TRAVIS_BRANCH. Travis CI тэдгээрийг бие даан тунхаглаж байна:

  • $TRAVIS_PULL_REQUEST татах хүсэлтийн дугаар эсвэл хадгалдаг хуурамч, хэрэв энэ нь ердийн салбар бол;
  • $TRAVIS_REPO_SLUG төслийн агуулахын нэрийг хадгалдаг.

Энэ функцийн алгоритм:

PVS-Studio ашиглан Travis CI, Buddy болон AppVeyor-д хийх хүсэлт, хүсэлтийн дүн шинжилгээ.
Travis CI нь буцаах кодуудад хариу үйлдэл үзүүлдэг тул анхааруулга байгаа нь үйлчилгээг алдаа агуулсан гэж тэмдэглэхийг хэлнэ.

Одоо энэ кодын мөрийг нарийвчлан авч үзье:

git diff --name-only origin/HEAD > .pvs-pr.list

Баримт нь Travis CI нь татах хүсэлтийг шинжлэх явцад салбаруудыг автоматаар нэгтгэдэг.

PVS-Studio ашиглан Travis CI, Buddy болон AppVeyor-д хийх хүсэлт, хүсэлтийн дүн шинжилгээ.
Тиймээс бид дүн шинжилгээ хийдэг A4, үгүй ​​ээ B3->A3. Энэ онцлогоос шалтгаалан бид зөрүүг тооцоолох хэрэгтэй А3, энэ нь яг салбараас дээд хэсэг юм Гарал үүсэл.

Нэг чухал зүйл үлдлээ - хөрвүүлсэн орчуулгын нэгжүүд (*.c, *.cc, *.cpp гэх мэт) дээр толгой файлуудын хамаарлыг кэшлэх. Анализатор нь файлуудын жагсаалтыг шалгах горимд анх эхлүүлэхэд эдгээр хамаарлыг тооцоолж, дараа нь .PVS-Studio санд хадгалдаг. Travis CI нь танд фолдеруудыг кэшлэх боломжийг олгодог тул бид лавлах өгөгдлийг хадгалах болно .PVS-Studio/:

cache:
  directories:
    - .PVS-Studio/

Энэ кодыг файлд нэмэх шаардлагатай .travis.yml. Энэ лавлах нь дүн шинжилгээ хийсний дараа цуглуулсан янз бүрийн өгөгдлийг хадгалдаг бөгөөд энэ нь файлын жагсаалтын дүн шинжилгээ эсвэл нэмэлт дүн шинжилгээ хийх дараагийн ажлыг ихээхэн хурдасгах болно. Хэрэв энэ нь хийгдээгүй бол анализатор нь бүх файлд дүн шинжилгээ хийх болно.

Buddy

Travis CI шиг, Buddy GitHub дээр хадгалагдсан төслүүдийг автоматаар бүтээх, турших боломжийг олгодог. Travis CI-ээс ялгаатай нь энэ нь вэб интерфэйс дээр тохируулагдсан (bash дэмжлэг байдаг) тул тохиргооны файлуудыг төсөлд хадгалах шаардлагагүй.

Юуны өмнө бид угсрах шугамд шинэ арга хэмжээ нэмэх хэрэгтэй.

PVS-Studio ашиглан Travis CI, Buddy болон AppVeyor-д хийх хүсэлт, хүсэлтийн дүн шинжилгээ.
Төслийг бүтээхэд ашигласан хөрвүүлэгчийг зааж өгье. Энэ үйлдэлд суулгасан докер савыг анхаарна уу. Жишээлбэл, GCC-д зориулсан тусгай сав байдаг:

PVS-Studio ашиглан Travis CI, Buddy болон AppVeyor-д хийх хүсэлт, хүсэлтийн дүн шинжилгээ.
Одоо PVS-Studio болон шаардлагатай хэрэгслүүдийг суулгацгаая.

PVS-Studio ашиглан Travis CI, Buddy болон AppVeyor-д хийх хүсэлт, хүсэлтийн дүн шинжилгээ.
Дараах мөрүүдийг засварлагч дээр нэмье.

apt-get update && apt-get -y install wget gnupg jq

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

Одоо "Run" таб (эхний дүрс) руу орж, дараах кодыг харгалзах редакторын талбарт нэмнэ үү.

pvs-studio-analyzer credentials $PVS_USERNAME $PVS_KEY

if [ "$BUDDY_EXECUTION_PULL_REQUEST_NO" != '' ]; then
  PULL_REQUEST_ID="pulls/$BUDDY_EXECUTION_PULL_REQUEST_NO"
  MERGE_BASE=`wget -qO - 
    https://api.github.com/repos/${BUDDY_REPO_SLUG}/${PULL_REQUEST_ID} 
    | jq -r ".base.ref"`

  git diff --name-only HEAD origin/$MERGE_BASE > .pvs-pr.list
  pvs-studio-analyzer analyze -j8 
                              -o PVS-Studio.log 
                              --disableLicenseExpirationCheck 
                              -S .pvs-pr.list
else
  pvs-studio-analyzer analyze -j8 
                              -o PVS-Studio.log 
                              --disableLicenseExpirationCheck
fi

plog-converter -t errorfile PVS-Studio.log --cerr -w

Хэрэв та Travs-CI-ийн хэсгийг уншсан бол энэ код танд аль хэдийн танил болсон, гэхдээ одоо шинэ үе шат байна:

PVS-Studio ашиглан Travis CI, Buddy болон AppVeyor-д хийх хүсэлт, хүсэлтийн дүн шинжилгээ.
Баримт нь одоо бид нэгтгэлийн үр дүнг биш, харин татах хүсэлт гаргасан салбарын HEAD-д дүн шинжилгээ хийж байна.

PVS-Studio ашиглан Travis CI, Buddy болон AppVeyor-д хийх хүсэлт, хүсэлтийн дүн шинжилгээ.
Тиймээс бид болзолт үүрэг хүлээсэн B3 мөн ялгааг нь олж авах хэрэгтэй A3:

PULL_REQUEST_ID="pulls/$BUDDY_EXECUTION_PULL_REQUEST_NO"
  MERGE_BASE=`wget -qO - 
    https://api.github.com/repos/${BUDDY_REPO_SLUG}/${PULL_REQUEST_ID} 
    | jq -r ".base.ref"`
git diff --name-only HEAD origin/$MERGE_BASE > .pvs-pr.list

Тодорхойлоход A3 GitHub API-г ашиглацгаая:

https://api.github.com/repos/${USERNAME}/${REPO}/pulls/${PULL_REQUEST_ID}

Бид Buddy-ийн өгсөн дараах хувьсагчдыг ашигласан:

  • $BUDDY_EXECUTION_PULL_REQEUST_NO - хүсэлтийн дугаарыг татах;
  • $BUDDY_REPO_SLUG — хэрэглэгчийн нэр болон репозиторын хослол (жишээ нь max/test).

Одоо доорх товчлуурыг ашиглан өөрчлөлтүүдийг хадгалж, татах хүсэлтийн шинжилгээг идэвхжүүлье:

PVS-Studio ашиглан Travis CI, Buddy болон AppVeyor-д хийх хүсэлт, хүсэлтийн дүн шинжилгээ.
Travis CI-ээс ялгаатай нь бид үүнийг зааж өгөх шаардлагагүй .pvs-studio кэш хийх зориулалттай, учир нь Buddy дараагийн эхлүүлэхэд зориулж бүх файлыг автоматаар кэш болгодог. Тиймээс хамгийн сүүлд үлдсэн зүйл бол Buddy-д PVS-Studio-ийн нэвтрэх болон нууц үгээ хадгалах явдал юм. Өөрчлөлтүүдийг хадгалсны дараа бид Pipeline руу буцах болно. Бид хувьсагчдыг тохируулах, PVS-Studio-д нэвтрэх, түлхүүр нэмэх зэрэгт шилжих хэрэгтэй.

PVS-Studio ашиглан Travis CI, Buddy болон AppVeyor-д хийх хүсэлт, хүсэлтийн дүн шинжилгээ.
Үүний дараа шинээр татах хүсэлт эсвэл амлалт гарч ирэх нь хянан шалгах ажиллагааг эхлүүлэх болно. Хэрэв даалгаварт алдаа байгаа бол Бадди үүнийг татах хүсэлтийн хуудсан дээр зааж өгнө.

AppVeyor

AppVeyor-г тохируулах нь Buddy-тэй төстэй, учир нь бүх зүйл вэб интерфэйс дээр явагддаг бөгөөд төслийн репозиторт *.yml файл нэмэх шаардлагагүй.

Төслийн тойм дахь Тохиргоо таб руу орцгооё:

PVS-Studio ашиглан Travis CI, Buddy болон AppVeyor-д хийх хүсэлт, хүсэлтийн дүн шинжилгээ.
Энэ хуудсыг доош гүйлгээд татах хүсэлтийг цуглуулахын тулд кэш хадгалахыг идэвхжүүлцгээе:

PVS-Studio ашиглан Travis CI, Buddy болон AppVeyor-д хийх хүсэлт, хүсэлтийн дүн шинжилгээ.
Одоо бид угсралтын зураг болон орчны шаардлагатай хувьсагчдыг зааж өгсөн Байгаль орчны таб руу орцгооё.

PVS-Studio ашиглан Travis CI, Buddy болон AppVeyor-д хийх хүсэлт, хүсэлтийн дүн шинжилгээ.
Хэрэв та өмнөх хэсгүүдийг уншсан бол эдгээр хоёр хувьсагчийг сайн мэддэг байх - PVS_KEY и PVS_USERNAME. Үгүй бол тэд PVS-Studio анализаторын лицензийг шалгах шаардлагатай гэдгийг сануулъя. Ирээдүйд бид тэдгээрийг Баш скрипт дээр дахин харах болно.

Доорх ижил хуудсан дээр бид кэш хийх фолдерыг зааж өгсөн болно:

PVS-Studio ашиглан Travis CI, Buddy болон AppVeyor-д хийх хүсэлт, хүсэлтийн дүн шинжилгээ.
Хэрэв бид үүнийг хийхгүй бол бид хэд хэдэн файлын оронд бүх төслийг шинжлэх болно, гэхдээ бид заасан файлуудаас гаралтыг авах болно. Тиймээс лавлахын нэрийг зөв оруулах нь чухал.

Одоо скриптийг шалгах цаг болжээ. Тестүүд табыг нээгээд Скриптийг сонгоно уу:

PVS-Studio ашиглан Travis CI, Buddy болон AppVeyor-д хийх хүсэлт, хүсэлтийн дүн шинжилгээ.
Та энэ маягтанд дараах кодыг оруулах шаардлагатай.

sudo apt-get update && sudo apt-get -y install jq

wget -q -O - https://files.viva64.com/etc/pubkey.txt 
  | sudo apt-key add -
sudo wget -O /etc/apt/sources.list.d/viva64.list 
  https://files.viva64.com/etc/viva64.list

sudo apt-get update && sudo apt-get -y install pvs-studio

pvs-studio-analyzer credentials $PVS_USERNAME $PVS_KEY

PWD=$(pwd -L)
if [ "$APPVEYOR_PULL_REQUEST_NUMBER" != '' ]; then
  PULL_REQUEST_ID="pulls/$APPVEYOR_PULL_REQUEST_NUMBER"
  MERGE_BASE=`wget -qO - 
    https://api.github.com/repos/${APPVEYOR_REPO_NAME}/${PULL_REQUEST_ID} 
    | jq -r ".base.ref"`

  git diff --name-only HEAD origin/$MERGE_BASE > .pvs-pr.list
  pvs-studio-analyzer analyze -j8 
                              -o PVS-Studio.log 
                              --disableLicenseExpirationCheck 
                              --dump-files --dump-log pvs-dump.log 
                              -S .pvs-pr.list
else
  pvs-studio-analyzer analyze -j8 
                              -o PVS-Studio.log 
                              --disableLicenseExpirationCheck
fi

plog-converter -t errorfile PVS-Studio.log --cerr -w

Кодын дараах хэсэгт анхаарлаа хандуулцгаая.

PWD=$(pwd -L)
if [ "$APPVEYOR_PULL_REQUEST_NUMBER" != '' ]; then
  PULL_REQUEST_ID="pulls/$APPVEYOR_PULL_REQUEST_NUMBER"
  MERGE_BASE=`wget -qO - 
   https://api.github.com/repos/${APPVEYOR_REPO_NAME}/${PULL_REQUEST_ID} 
   | jq -r ".base.ref"`

  git diff --name-only HEAD origin/$MERGE_BASE > .pvs-pr.list
  pvs-studio-analyzer analyze -j8 
                              -o PVS-Studio.log 
                              --disableLicenseExpirationCheck 
                              --dump-files --dump-log pvs-dump.log 
                              -S .pvs-pr.list
else
  pvs-studio-analyzer analyze -j8 
                              -o PVS-Studio.log 
                              --disableLicenseExpirationCheck
fi

Энэ анхдагч утгыг хадгалах ёстой хувьсагчид pwd командын утгыг тодорхой зааж өгсөн нь эхлээд харахад хачирхалтай мэт санагдаж байгаа ч би одоо бүгдийг тайлбарлах болно.

AppVeyor дээр анализаторыг тохируулах явцад би анализаторын маш хачирхалтай үйлдэлтэй тулгарсан. Нэг талаас, бүх зүйл зөв ажиллаж байсан ч шинжилгээ эхлээгүй. Бид /home/appveyor/projects/testcalc/ лавлах дотор байгааг анзаарахад би маш их цаг зарцуулсан бөгөөд анализатор биднийг /opt/appveyor/build-agent/ дотор байгаа гэдэгт итгэлтэй байна. Дараа нь би $PWD хувьсагч бага зэрэг худлаа байгааг ойлгосон. Энэ шалтгааны улмаас би дүн шинжилгээ хийхээс өмнө түүний утгыг гараар шинэчилсэн.

Тэгээд бүх зүйл өмнөх шигээ:

PVS-Studio ашиглан Travis CI, Buddy болон AppVeyor-д хийх хүсэлт, хүсэлтийн дүн шинжилгээ.
Одоо дараах фрагментийг авч үзье.

PULL_REQUEST_ID="pulls/$APPVEYOR_PULL_REQUEST_NUMBER"
MERGE_BASE=`wget -qO - 
  https://api.github.com/repos/${APPVEYOR_REPO_NAME}/${PULL_REQUEST_ID} 
  | jq -r ".base.ref"`

Үүн дээр бид татах хүсэлтийг зарласан салбаруудын хоорондох ялгааг олж авдаг. Үүнийг хийхийн тулд бидэнд дараах орчны хувьсагч хэрэгтэй.

  • $APPVEYOR_PULL_REQUEST_NUMBER — татах хүсэлтийн дугаар;
  • $APPVEYOR_REPO_NAME - хэрэглэгчийн нэр болон төслийн агуулах.

дүгнэлт

Мэдээжийн хэрэг, бид бүх боломжит тасралтгүй интеграцийн үйлчилгээг авч үзээгүй боловч бүгд өөр хоорондоо маш төстэй үйл ажиллагааны онцлогтой байдаг. Кэшийг эс тооцвол үйлчилгээ бүр өөрийн "унадаг дугуй" хийдэг тул бүх зүйл үргэлж өөр байдаг.

Хаа нэгтээ, Travis-CI шиг, хэд хэдэн мөр код, кэш нь өөгүй ажилладаг; AppVeyor шиг хаа нэгтээ та тохиргоонд хавтсыг зааж өгөх хэрэгтэй; гэхдээ хаа нэгтээ та өвөрмөц түлхүүрүүдийг үүсгэж, кэштэй фрагментийг дарж бичих боломжийг олгохын тулд системийг итгүүлэхийг хичээх хэрэгтэй. Тиймээс, хэрэв та дээр дурдаагүй тасралтгүй интеграцийн үйлчилгээнд татах хүсэлтийн дүн шинжилгээ хийхийг хүсвэл эхлээд кэш хийхэд асуудал гарахгүй эсэхийг шалгаарай.

Анхаарал тавьсанд баярлалаа. Хэрэв ямар нэг зүйл болохгүй бол бидэн рүү бичээрэй дэмжлэг. Бид зөвлөгөө өгч, туслах болно.

PVS-Studio ашиглан Travis CI, Buddy болон AppVeyor-д хийх хүсэлт, хүсэлтийн дүн шинжилгээ.

Хэрэв та энэ нийтлэлийг англи хэлээр ярьдаг үзэгчидтэй хуваалцахыг хүсвэл орчуулгын холбоосыг ашиглана уу: Максим Звягинцев. PVS-Studio ашиглан Travis CI, Buddy болон AppVeyor-д хийх хүсэлт, хүсэлтийн дүн шинжилгээ..

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх