PVS-Studio-dan istifadə edərək Travis CI, Buddy və AppVeyor-da öhdəliyin təhlili və sorğuların çəkilməsi

PVS-Studio-dan istifadə edərək Travis CI, Buddy və AppVeyor-da öhdəliyin təhlili və sorğuların çəkilməsi
Linux və macOS-da C və C++ dilləri üçün PVS-Studio analizatorunda, 7.04 versiyasından başlayaraq, göstərilən faylların siyahısını yoxlamaq üçün bir test seçimi meydana çıxdı. Yeni rejimdən istifadə edərək, analizatoru tapşırıqları yoxlamaq və sorğuları çəkmək üçün konfiqurasiya edə bilərsiniz. Bu məqalə sizə Travis CI, Buddy və AppVeyor kimi məşhur CI (Davamlı İnteqrasiya) sistemlərində GitHub layihəsinin dəyişdirilmiş fayllarının siyahısını yoxlamaq üçün necə qurulacağını izah edəcək.

Fayl siyahısını yoxlama rejimi

PVS Studio C, C++, C# və Java dillərində yazılmış proqramların mənbə kodundakı səhvləri və potensial zəiflikləri müəyyən etmək üçün alətdir. Windows, Linux və macOS-da 64-bit sistemlərdə işləyir.

Linux və macOS üçün PVS-Studio 7.04 versiyasında mənbə fayllarının siyahısını yoxlamaq rejimi peyda oldu. Bu, qurma sistemi fayl yaratmağa imkan verən layihələr üçün işləyir compile_commands.json. Analizatora göstərilən faylların tərtibi haqqında məlumat çıxarmaq lazımdır. Quraşdırma sisteminiz compile_commands.json faylının yaradılmasını dəstəkləmirsə, yardım proqramından istifadə edərək belə bir fayl yaratmağa cəhd edə bilərsiniz. Yönelin.

Həmçinin, fayl siyahısının yoxlanılması rejimi tərtibçinin işə salınmasının strace trace log (pvs-studio-analyzer trace) ilə birlikdə istifadə edilə bilər. Bunu etmək üçün əvvəlcə layihənin tam qurulmasını yerinə yetirməli və analizatorun yoxlanılan bütün faylların kompilyasiya parametrləri haqqında tam məlumat toplaması üçün onu izləməlisiniz.

Bununla belə, bu seçimin əhəmiyyətli bir çatışmazlığı var - ya hər dəfə onu işə saldığınız zaman bütün layihənin tam qurulma izini yerinə yetirməli olacaqsınız, bu da özlüyündə öhdəliyi tez yoxlamaq fikrinə ziddir. Və ya iz nəticəsinin özünü önbelleğe alırsanız, mənbə fayllarının asılılıq strukturu izdən sonra dəyişərsə (məsələn, mənbə fayllarından birinə yeni #include əlavə edilir) analizatorun sonrakı işləmələri natamam ola bilər.

Buna görə də, biz öhdəliyi yoxlamaq və ya sorğuları çəkmək üçün izləmə jurnalı ilə fayl siyahısını yoxlama rejimindən istifadə etməyi tövsiyə etmirik. Bir öhdəliyi yoxlayarkən artımlı bir quruluş edə bilsəniz, rejimi istifadə etməyi düşünün artımlı analiz.

Təhlil üçün mənbə faylların siyahısı mətn faylında saxlanılır və parametrdən istifadə edərək analizatora ötürülür -S:

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

Bu fayl faylların nisbi və ya mütləq yollarını müəyyən edir və hər bir yeni fayl yeni sətirdə olmalıdır. Təhlil üçün yalnız fayl adlarını deyil, həm də müxtəlif mətnləri təyin etmək məqbuldur. Analizator bunun fayl olmadığını görəcək və xəttə məhəl qoymayacaq. Bu, fayllar əl ilə göstərildiyi təqdirdə şərh vermək üçün faydalı ola bilər. Bununla belə, çox vaxt CI-də təhlil zamanı faylların siyahısı yaradılacaq, məsələn, bunlar icra və ya çəkmə sorğusundan olan fayllar ola bilər.

İndi bu rejimdən istifadə edərək, əsas inkişaf şöbəsinə daxil olmamışdan əvvəl yeni kodu tez yoxlaya bilərsiniz. Tarama sisteminin analizator xəbərdarlığına cavab verməsini təmin etmək üçün köməkçi proqram plog çevirici bayraq əlavə edildi --göstərmək-xəbərdarlıqlar:

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

Bu bayraqla, analizator hesabatında xəbərdarlıqlar olarsa, çevirici sıfırdan fərqli kodu qaytaracaq. Qaytarma kodundan istifadə edərək, siz əvvəlcədən təyin edilmiş çəngəl, icra və ya çəkmə sorğusunu bloklaya bilərsiniz və yaradılan analizator hesabatı göstərilə, paylaşıla və ya e-poçt vasitəsilə göndərilə bilər.

Qeyd. Faylların siyahısını ilk dəfə təhlil etməyə başladığınızda, bütün layihə təhlil ediləcək, çünki analizator layihənin mənbə fayllarının başlıq fayllarında asılılıq faylını yaratmalıdır. Bu, C və C++ fayllarını təhlil etmək xüsusiyyətidir. Gələcəkdə asılılıq faylı yaddaşda saxlanıla bilər və o, analizator tərəfindən avtomatik olaraq yenilənəcəkdir. Fayl siyahısını yoxlama rejimindən istifadə edərkən öhdəliyin yoxlanılmasının artımlı analiz rejimindən istifadə etməsindən üstünlüyü ondan ibarətdir ki, siz obyekt fayllarını deyil, yalnız həmin faylı keşləməlisiniz.

Çəkmə sorğusunun təhlilinin ümumi prinsipləri

Bütün layihənin təhlili çox vaxt aparır, ona görə də onun yalnız müəyyən bir hissəsini yoxlamaq məntiqlidir. Problem ondadır ki, yeni faylları layihə fayllarının qalan hissəsindən ayırmaq lazımdır.

Gəlin iki budaqlı öhdəçilik ağacı nümunəsinə baxaq:

PVS-Studio-dan istifadə edərək Travis CI, Buddy və AppVeyor-da öhdəliyin təhlili və sorğuların çəkilməsi

Təsəvvür edək ki, öhdəliyimiz var A1 artıq sınaqdan keçirilmiş kifayət qədər böyük miqdarda kod ehtiva edir. Bir az əvvəl taahhütdən bir filial düzəltdik A1 və bəzi faylları dəyişdirdi.

Siz, əlbəttə ki, bundan sonra fərq etdiniz A1 daha iki öhdəlik baş verdi, lakin bunlar da digər filialların birləşməsi idi, çünki biz öhdəlik götürmürük ustad. Və indi vaxt gəldi düzeltme hazır. Buna görə birləşmə üçün çəkilmə tələbi ortaya çıxdı B3 и A3.

Əlbəttə ki, onların birləşməsinin bütün nəticəsini yoxlamaq mümkün olardı, lakin bu, çox vaxt aparan və əsassız olardı, çünki yalnız bir neçə fayl dəyişdirildi. Buna görə də yalnız dəyişdirilənləri təhlil etmək daha səmərəlidir.

Bunu etmək üçün, ustaya birləşmək istədiyimiz filialın HEAD-də olmaqla, filiallar arasındakı fərqi əldə edirik:

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

$MERGE_BASE sonra ətraflı baxacağıq. Fakt budur ki, hər bir CI xidməti birləşmə üçün verilənlər bazası haqqında lazımi məlumatları vermir, buna görə də hər dəfə bu məlumatları əldə etməyin yeni yollarını tapmalı olursunuz. Bu, təsvir olunan veb-xidmətlərin hər birində aşağıda ətraflı təsvir ediləcəkdir.

Beləliklə, filiallar arasındakı fərqi, daha doğrusu, dəyişdirilmiş fayl adlarının siyahısını əldə etdik. İndi faylı verməliyik .pvs-pr.list (yuxarıdakı çıxışı ona yönləndirdik) analizatora:

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

Təhlildən sonra log faylını (PVS-Studio.log) asan oxunan formata çevirməliyik:

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

Bu əmr səhvləri sadalayacaq stderr (standart səhv mesajı çıxışı).

Yalnız indi biz nəinki səhvləri göstərməliyik, həm də problemlərin olması barədə montaj və sınaq xidmətimizə məlumat verməliyik. Bu məqsədlə konvertora bir bayraq əlavə edildi -W (--göstərmək-xəbərdarlıqlar). Ən azı bir analizator xəbərdarlığı varsa, kommunal qaytarma kodu plog çevirici 2-yə dəyişəcək, bu da öz növbəsində CI xidmətini çəkmə sorğu fayllarında potensial səhvlərin olması barədə məlumatlandıracaq.

Travis C.I.

Konfiqurasiya fayl kimi edilir .travis.yml. Rahatlıq üçün sizə hər şeyi fayldan çağırılacaq funksiyaları olan ayrı bir bash skriptinə qoymağı məsləhət görürəm. .travis.yml (bash script_name.sh function_name).

Skriptə lazımi kodu əlavə edəcəyik bash, bu yolla biz daha çox funksionallıq əldə edəcəyik. Bölmədə qurmaq aşağıdakıları yazaq:

install:
  - bash .travis.sh travis_install

Hər hansı bir təlimatınız varsa, defisləri çıxararaq onları skriptə köçürə bilərsiniz.

Faylı açaq .travis.sh və analizator parametrini funksiyaya əlavə edin 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 
}

İndi bölməyə əlavə edək yazı təhlil aparın:

script:
  - bash .travis.sh travis_script

Və bash skriptində:

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
}

Bu kod layihəni qurduqdan sonra işlədilməlidir, məsələn, əgər CMake-də bir quruluşunuz varsa:

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

Bu belə çıxacaq:

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
}

Yəqin ki, siz artıq bu mühit dəyişənlərini görmüsünüz $TRAVIS_PULL_REQUEST и $TRAVIS_BRANCH. Travis CI onları müstəqil olaraq elan edir:

  • $TRAVIS_PULL_REQUEST çəkmə sorğu nömrəsini və ya saxlayır saxta, əgər bu müntəzəm filialdırsa;
  • $TRAVIS_REPO_SLUG layihə deposunun adını saxlayır.

Bu funksiyanın alqoritmi belədir:

PVS-Studio-dan istifadə edərək Travis CI, Buddy və AppVeyor-da öhdəliyin təhlili və sorğuların çəkilməsi
Travis CI qayıdış kodlarına cavab verir, ona görə də xəbərdarlıqların olması xidmətə öhdəliyi səhvlər kimi qeyd etməyi xəbər verəcəkdir.

İndi bu kod xəttinə daha yaxından nəzər salaq:

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

Fakt budur ki, Travis CI çəkmə sorğusunu təhlil edərkən filialları avtomatik birləşdirir:

PVS-Studio-dan istifadə edərək Travis CI, Buddy və AppVeyor-da öhdəliyin təhlili və sorğuların çəkilməsi
Ona görə də təhlil edirik A4B3->A3. Bu xüsusiyyətə görə fərqi hesablamalıyıq A3, hansı filialın yuxarı hissəsidir mənşə.

Bir vacib detal qalıb - başlıq fayllarının tərtib edilmiş tərcümə vahidlərindən (*.c, *.cc, *.cpp və s.) asılılıqlarının keşləşdirilməsi. Analizator bu asılılıqları ilk dəfə faylların siyahısını yoxlamaq rejimində işə saldıqda hesablayır və sonra onları .PVS-Studio kataloqunda saxlayır. Travis CI sizə qovluqları önbelleğe almağa imkan verir, ona görə də biz kataloq məlumatlarını saxlayacağıq .PVS-Studio/:

cache:
  directories:
    - .PVS-Studio/

Bu kodu fayla əlavə etmək lazımdır .travis.yml. Bu kataloq təhlildən sonra toplanmış müxtəlif məlumatları saxlayır ki, bu da fayl siyahısı təhlilinin və ya artımlı təhlilin sonrakı dövrlərini əhəmiyyətli dərəcədə sürətləndirəcək. Bu edilmədikdə, analizator həqiqətən hər dəfə bütün faylları təhlil edəcəkdir.

Dost

Travis CI kimi, Dost GitHub-da saxlanılan layihələri avtomatik qurmaq və sınaqdan keçirmək imkanı verir. Travis CI-dən fərqli olaraq, o, veb interfeysində konfiqurasiya edilmişdir (bash dəstəyi mövcuddur), ona görə də layihədə konfiqurasiya fayllarını saxlamağa ehtiyac yoxdur.

Əvvəlcə montaj xəttinə yeni bir hərəkət əlavə etməliyik:

PVS-Studio-dan istifadə edərək Travis CI, Buddy və AppVeyor-da öhdəliyin təhlili və sorğuların çəkilməsi
Layihəni qurmaq üçün istifadə olunan kompilyatoru göstərək. Bu hərəkətdə quraşdırılmış docker konteynerinə diqqət yetirin. Məsələn, GCC üçün xüsusi bir konteyner var:

PVS-Studio-dan istifadə edərək Travis CI, Buddy və AppVeyor-da öhdəliyin təhlili və sorğuların çəkilməsi
İndi PVS-Studio və lazımi yardım proqramlarını quraşdıraq:

PVS-Studio-dan istifadə edərək Travis CI, Buddy və AppVeyor-da öhdəliyin təhlili və sorğuların çəkilməsi
Redaktora aşağıdakı sətirləri əlavə edək:

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

İndi Run sekmesine (birinci işarə) keçək və müvafiq redaktor sahəsinə aşağıdakı kodu əlavə edək:

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 bölməsini oxusanız, bu kod sizə artıq tanışdır, lakin indi yeni bir mərhələ var:

PVS-Studio-dan istifadə edərək Travis CI, Buddy və AppVeyor-da öhdəliyin təhlili və sorğuların çəkilməsi
Fakt budur ki, indi birləşmənin nəticəsini deyil, çəkmə sorğusunun edildiyi filialın HEAD-ini təhlil edirik:

PVS-Studio-dan istifadə edərək Travis CI, Buddy və AppVeyor-da öhdəliyin təhlili və sorğuların çəkilməsi
Beləliklə, biz şərti öhdəlikdəyik B3 və fərqi əldə etməliyik 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

Müəyyən etmək A3 GitHub API-dən istifadə edək:

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

Buddy-nin təmin etdiyi aşağıdakı dəyişənlərdən istifadə etdik:

  • $BUDDY_EXECUTION_PULL_REQEUST_NO — sorğu nömrəsini çəkin;
  • $BUDDY_REPO_SLUG — istifadəçi adı və deponun birləşməsi (məsələn, max/test).

İndi aşağıdakı düyməni istifadə edərək dəyişiklikləri yadda saxlayaq və çəkmə sorğusunun təhlilini aktivləşdirək:

PVS-Studio-dan istifadə edərək Travis CI, Buddy və AppVeyor-da öhdəliyin təhlili və sorğuların çəkilməsi
Travis CI-dən fərqli olaraq, dəqiqləşdirməyə ehtiyacımız yoxdur .pvs-studio keşləmə üçün, çünki Buddy bütün faylları sonrakı işə salmaq üçün avtomatik olaraq keşləyir. Buna görə də, qalan son şey Buddy-də PVS-Studio üçün giriş və şifrəni saxlamaqdır. Dəyişiklikləri yadda saxladıqdan sonra biz yenidən Boru Kəmərinə aparılacağıq. Dəyişənləri qurmağa və PVS-Studio üçün giriş və açar əlavə etməyə davam etməliyik:

PVS-Studio-dan istifadə edərək Travis CI, Buddy və AppVeyor-da öhdəliyin təhlili və sorğuların çəkilməsi
Bundan sonra, yeni çəkmə sorğusunun və ya öhdəliyin görünməsi nəzərdən keçirməyə səbəb olacaq. Əgər tapşırıqda səhvlər varsa, Buddy bunu çəkmə sorğusu səhifəsində göstərəcək.

AppVeyor

AppVeyor-un qurulması Buddy-yə bənzəyir, çünki hər şey veb-interfeysdə baş verir və layihə deposuna *.yml faylı əlavə etməyə ehtiyac yoxdur.

Layihənin icmalındakı Parametrlər sekmesine keçək:

PVS-Studio-dan istifadə edərək Travis CI, Buddy və AppVeyor-da öhdəliyin təhlili və sorğuların çəkilməsi
Gəlin bu səhifəni aşağı diyirləyin və çəkmə sorğularını toplamaq üçün önbelleğe qənaəti aktiv edək:

PVS-Studio-dan istifadə edərək Travis CI, Buddy və AppVeyor-da öhdəliyin təhlili və sorğuların çəkilməsi
İndi ətraf mühit sekmesine keçək, burada montaj üçün təsviri və lazımi mühit dəyişənlərini təyin edirik:

PVS-Studio-dan istifadə edərək Travis CI, Buddy və AppVeyor-da öhdəliyin təhlili və sorğuların çəkilməsi
Əgər əvvəlki bölmələri oxumusunuzsa, siz bu iki dəyişənlə çox tanışsınız - PVS_KEY и PVS_USERNAME. Əgər yoxsa, sizə xatırlatmaq istəyirəm ki, onlar PVS-Studio analizatorunun lisenziyasını yoxlamaq üçün lazımdır. Gələcəkdə onları yenidən Bash skriptlərində görəcəyik.

Aşağıdakı eyni səhifədə keşləmə üçün qovluğu göstəririk:

PVS-Studio-dan istifadə edərək Travis CI, Buddy və AppVeyor-da öhdəliyin təhlili və sorğuların çəkilməsi
Bunu etməsək, bir neçə fayl əvəzinə bütün layihəni təhlil edəcəyik, lakin göstərilən fayllardan nəticə əldə edəcəyik. Buna görə də, düzgün kataloq adını daxil etmək vacibdir.

İndi skriptin sınaqdan keçirilməsi vaxtıdır. Testlər sekmesini açın və Skript seçin:

PVS-Studio-dan istifadə edərək Travis CI, Buddy və AppVeyor-da öhdəliyin təhlili və sorğuların çəkilməsi
Bu formaya aşağıdakı kodu daxil etməlisiniz:

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

Kodun aşağıdakı hissəsinə diqqət yetirək:

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

Bu standart dəyəri saxlamalı olan dəyişənə pwd əmrinin dəyərinin kifayət qədər spesifik təyin edilməsi ilk baxışda qəribə görünür, lakin indi hər şeyi izah edəcəyəm.

AppVeyor-da analizatoru quraşdırarkən analizatorun son dərəcə qəribə davranışı ilə qarşılaşdım. Bir tərəfdən hər şey düzgün işləyirdi, amma təhlil başlamadı. Mən /home/appveyor/projects/testcalc/ qovluğunda olduğumuzu görməyə çox vaxt sərf etdim və analizator bizim /opt/appveyor/build-agent/-də olduğumuza əmindir. Sonra başa düşdüm ki, $PWD dəyişəni bir az yalan danışır. Bu səbəbdən təhlilə başlamazdan əvvəl onun dəyərini əl ilə yenilədim.

Və sonra hər şey əvvəlki kimidir:

PVS-Studio-dan istifadə edərək Travis CI, Buddy və AppVeyor-da öhdəliyin təhlili və sorğuların çəkilməsi
İndi aşağıdakı fraqmenti nəzərdən keçirin:

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"`

Bunun içərisində çəkmə sorğusunun elan olunduğu filiallar arasındakı fərqi alırıq. Bunu etmək üçün bizə aşağıdakı mühit dəyişənləri lazımdır:

  • $APPVEYOR_PULL_REQUEST_NUMBER — sorğu nömrəsini çək;
  • $APPVEYOR_REPO_NAME - istifadəçi adı və layihə deposu.

Nəticə

Əlbəttə ki, biz mümkün davamlı inteqrasiya xidmətlərinin hamısını nəzərdən keçirməmişik, lakin onların hamısı bir-birinə olduqca oxşar əməliyyat xüsusiyyətlərinə malikdir. Keşləmə istisna olmaqla, hər bir xidmət öz "velosipedini" düzəldir, buna görə də hər şey həmişə fərqlidir.

Haradasa, Travis-CI-də olduğu kimi, bir neçə sətir kod və keşləmə qüsursuz işləyir; bir yerdə, AppVeyor-da olduğu kimi, sadəcə parametrlərdə qovluğu göstərməlisiniz; lakin haradasa unikal açarlar yaratmalı və sistemi sizə keşlənmiş fraqmentin üzərinə yazmaq imkanı verməyə inandırmağa çalışmalısınız. Buna görə də, yuxarıda müzakirə olunmayan davamlı inteqrasiya xidmətində çəkmə sorğularının təhlilini qurmaq istəyirsinizsə, əvvəlcə keşləmə ilə bağlı probleminiz olmadığından əmin olun.

Diqqətinizə görə təşəkkürlər. Əgər bir şey alınmırsa, bizə yazın dəstək. Biz məsləhət və kömək edəcəyik.

PVS-Studio-dan istifadə edərək Travis CI, Buddy və AppVeyor-da öhdəliyin təhlili və sorğuların çəkilməsi

Bu məqaləni ingilisdilli auditoriya ilə bölüşmək istəyirsinizsə, tərcümə linkindən istifadə edin: Maksim Zvyagintsev. PVS-Studio-dan istifadə edərək Travis CI, Buddy və AppVeyor-da öhdəliyin təhlili və sorğuların çəkilməsi.

Mənbə: www.habr.com

Добавить комментарий