Analiżi ta 'commits u pull requests fi Travis CI, Buddy u AppVeyor bl-użu ta' PVS-Studio

Analiżi ta 'commits u pull requests fi Travis CI, Buddy u AppVeyor bl-użu ta' PVS-Studio
Jibda mill-verżjoni 7.04, l-analizzatur PVS-Studio għal-lingwi C u C++ fuq Linux u macOS għandu għażla ta 'test biex jiċċekkja l-lista ta' fajls speċifikati. Bl-użu tal-mod il-ġdid, tista 'tikkonfigura l-analizzatur biex jiċċekkja l-kommessi u t-talbiet tal-ġbid. Dan l-artikolu jurik kif twaqqaf verifika tal-lista tal-fajls tal-proġett GitHub f'sistemi CI popolari (Integrazzjoni Kontinwa) bħal Travis CI, Buddy u AppVeyor.

Modalità ta' kontroll tal-lista tal-fajls

PVS-Istudjo hija għodda biex tiskopri żbalji u vulnerabbiltajiet potenzjali fil-kodiċi tas-sors tal-programmi miktuba f'C, C++, C# u Java. Jaħdem fuq sistemi 64-bit fuq Windows, Linux u macOS.

Il-verżjoni ta 'PVS-Studio 7.04 għal Linux u macOS għandha mod għall-iċċekkjar tal-lista ta' fajls sors. Dan jaħdem għal proġetti li s-sistema tal-bini tagħhom tippermettilek li tiġġenera fajl compile_commands.json. Huwa meħtieġ għall-analizzatur biex jiġbed informazzjoni dwar il-kumpilazzjoni tal-fajls speċifikati. Jekk is-sistema tal-bini tiegħek ma tappoġġjax il-ġenerazzjoni ta' fajl compile_commands.json, tista' tipprova tiġġenera tali fajl billi tuża l-utilità Bear.

Ukoll, il-mod ta 'verifika tal-lista ta' fajls jista 'jintuża flimkien mat-traċċa ta' ġirjiet tal-kompilatur (traċċa pvs-studio-analyzer). Biex tagħmel dan, l-ewwel ser ikollok bżonn twettaq bini sħiħ tal-proġett u ssegwiha sabiex l-analizzatur jiġbor informazzjoni sħiħa dwar il-parametri tal-kumpilazzjoni tal-fajls kollha li qed jiġu ċċekkjati.

Madankollu, din l-għażla għandha żvantaġġ sinifikanti - jew ikollok bżonn twettaq traċċa sħiħa tal-bini tal-proġett kollu f'kull tnedija, li fiha nnifisha tikkontradixxi l-idea ta 'verifika ta' impenn ta 'malajr. Jew, jekk tpoġġi fil-cache r-riżultat tat-traċċar innifsu, tnedijiet sussegwenti tal-analizzatur jistgħu jirriżultaw mhux kompluti jekk l-istruttura tad-dipendenza tal-fajl tas-sors tinbidel wara t-traċċar (pereżempju, #include ġdid huwa miżjud ma 'wieħed mill-fajls tas-sors).

Għalhekk, aħna ma nirrakkomandawx li tuża l-modalità ta 'kontroll tal-lista tal-fajls b'ġurnal ta' traċċa biex tiċċekkja l-kommessi jew it-talbiet tal-ġibda. Fil-każ li tista 'tagħmel bini inkrementali meta tiċċekkja impenn, ikkunsidra li tuża l-mod analiżi inkrementali.

Il-lista tal-fajls tas-sors għall-analiżi tiġi ssejvjata f'fajl test u mgħoddija lill-analizzatur bl-użu tal-parametru -S:

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

Dan il-fajl jispeċifika mogħdijiet relattivi jew assoluti għall-fajls, u kull fajl ġdid għandu jkun fuq linja ġdida. Huwa permissibbli li jiġu speċifikati mhux biss l-ismijiet tal-fajls għall-analiżi, iżda wkoll diversi test. Il-parser se jara li dan mhux fajl u jinjora l-linja. Dan jista 'jkun utli biex tikkummenta jekk il-fajls huma speċifikati manwalment. Madankollu, ħafna drabi l-lista ta 'fajls se tiġi ġġenerata waqt parsing CI, pereżempju fajls minn impenn jew talba ta' ġibda.

Issa, billi tuża din il-modalità, tista 'malajr tittestja kodiċi ġdid qabel ma tidħol fil-fergħa ewlenija tal-iżvilupp. Sabiex is-sistema ta 'verifika tirreaġixxi għat-twissijiet tal-analizzatur, l-utilità plog-konvertitur bandiera miżjuda --indika-twissijiet:

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

B'din il-bandiera, il-konvertitur se jirritorna kodiċi mhux żero jekk ikun hemm twissijiet fir-rapport tal-analizzatur. Bl-użu tal-kodiċi tar-ritorn, tista 'timblokka ganċ ta' precommit, tikkommetti jew iġbed talba, u turi r-rapport tal-analizzatur iġġenerat fuq l-iskrin, taqsamha jew tibgħatha bil-posta.

Nota. L-ewwel darba li tibda tanalizza l-lista ta 'fajls, il-proġett kollu se jiġi analizzat, għaliex l-analizzatur jeħtieġ li jiġġenera fajl ta 'dipendenzi tal-fajls sors tal-proġett fuq il-fajls header. Din hija karatteristika ta 'parsing C u C++ fajls. Fil-ġejjieni, il-fajl tad-dipendenza jista 'jiġi miżmum fil-cache u se jiġi aġġornat awtomatikament mill-analizzatur. Il-vantaġġ tal-iċċekkjar ta 'kommessi meta tuża l-modalità ta' verifika tal-lista tal-fajls fuq l-użu tal-modalità ta 'parsing inkrementali huwa li dak il-fajl biss jeħtieġ li jiġi miżmum fil-cache, mhux il-fajls tal-oġġett.

Prinċipji ġenerali tal-analiżi tal-pull request

L-analiżi tal-proġett kollu tieħu ħafna ħin, għalhekk jagħmel sens li tiċċekkja biss xi parti minnu. Il-problema hija li għandek bżonn tissepara l-fajls il-ġodda mill-bqija tal-fajls tal-proġett.

Ikkunsidra eżempju ta’ siġra ta’ impenn b’żewġ fergħat:

Analiżi ta 'commits u pull requests fi Travis CI, Buddy u AppVeyor bl-użu ta' PVS-Studio

Ejja nippretendu li l-kommit A1 fih ammont pjuttost kbir ta’ kodiċi li diġà ġie kkontrollat. Ftit qabel għamilna fergħa mill-commit A1 u bidlet xi fajls.

Naturalment, inti ndunat li wara A1 kien hemm żewġ commits oħra, iżda dawn kienu wkoll mergers ta’ fergħat oħra, għax aħna ma nimpenjawx fihom kaptan. U issa wasal iż-żmien meta hotfix lest. Għalhekk, dehret talba ta 'ġibda għall-għaqda B3 и A3.

Naturalment, ikun possibbli li jiġi vverifikat ir-riżultat kollu tal-għaqda tagħhom, iżda dan ikun twil wisq u mhux ġustifikat, peress li nbidlu biss ftit fajls. Għalhekk, huwa aktar effiċjenti li jiġu analizzati biss dawk mibdula.

Biex tagħmel dan, aħna nġibu d-differenza bejn il-fergħat, billi nkunu fil-Kap tal-fergħa li minnha rridu ningħaqdu f'kaptan:

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

$MERGE_BASE se nikkunsidraw fid-dettall aktar tard. Il-fatt hu li mhux kull servizz CI jipprovdi l-informazzjoni meħtieġa dwar il-bażi għall-għaqda, għalhekk kull darba li trid toħroġ b'modi ġodda biex tikseb din id-dejta. Dan se jkun dettaljat hawn taħt f'kull wieħed mis-servizzi tal-web deskritti.

Allura, sirna d-differenza bejn il-fergħat, jew aħjar, il-lista ta 'ismijiet ta' fajls li ġew mibdula. Issa rridu nagħtu l-fajl .pvs-pr.list (aħna dderieġajna l-output hawn fuq lejha) lejn l-analizzatur:

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

Wara l-analiżi, irridu naqilbu l-fajl log (PVS-Studio.log) f'format li jinqara:

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

Dan il-kmand se jelenka l-iżbalji fi stderr (fluss ta 'output ta' żball standard).

Hawnhekk biss għandna bżonn mhux biss nuru żbalji, iżda wkoll ninfurmaw lis-servizz tagħna għall-assemblaġġ u l-ittestjar dwar il-preżenza ta 'problemi. Għal dan, ġiet miżjuda bandiera mal-konvertitur -W (--indika-twissijiet). Jekk ikun hemm mill-inqas twissija waħda tal-analizzatur, il-kodiċi tar-ritorn tal-utilità plog-konvertitur se jinbidel għal 2, li mbagħad jinnotifika lis-servizz CI li hemm żbalji potenzjali fil-fajls tal-pull request.

Travis C.I.

Il-konfigurazzjoni ssir fil-forma ta 'fajl .travis.yml. Għall-konvenjenza, nagħtik parir biex tpoġġi kollox fi skript bash separat b'funzjonijiet li se jissejħu mill-fajl .travis.yml (bash scriptname.sh function_name).

Aħna se nżidu l-kodiċi meħtieġ għall-iskrittura fuq bash, sabiex inġibu aktar funzjonalità. Fit-taqsima jinstallaw ejja niktbu dan li ġej:

install:
  - bash .travis.sh travis_install

Jekk kellek xi struzzjonijiet, tista' tmexxihom għall-iskrittura billi tneħħi s-sings.

Ejja niftħu l-fajl .travis.sh u żid is-setup tal-analizzatur mal-funzjoni 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 
}

Issa ejja nżidu mat-taqsima iskrittura run analiżi:

script:
  - bash .travis.sh travis_script

U fl-iskrittura 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
}

Dan il-kodiċi għandu jitħaddem wara li jinbena l-proġett, pereżempju, jekk kellek bini CMake:

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

Jirriżulta hekk:

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
}

Probabilment diġà innotajt il-varjabbli ambjentali speċifikati. $TRAVIS_PULL_REQUEST и $TRAVIS_BRANCH. Travis CI jiddikjarahom waħdu:

  • $TRAVIS_PULL_REQUEST jaħżen in-numru tat-talba tal-ġibda, jew falzajekk hija fergħa normali;
  • $TRAVIS_REPO_SLUG jaħżen l-isem tar-repożitorju tal-proġett.

L-algoritmu ta' din il-funzjoni:

Analiżi ta 'commits u pull requests fi Travis CI, Buddy u AppVeyor bl-użu ta' PVS-Studio
Travis CI jirrispondi għall-kodiċijiet ta 'ritorn, għalhekk il-preżenza ta' twissijiet tgħid lis-servizz biex jimmarka l-impenn bħala buggy.

Ejja nagħtu ħarsa aktar mill-qrib lejn din il-linja ta 'kodiċi:

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

Il-fatt hu li Travis CI jingħaqad awtomatikament fergħat waqt l-analiżi ta 'talba għall-ġibda:

Analiżi ta 'commits u pull requests fi Travis CI, Buddy u AppVeyor bl-użu ta' PVS-Studio
Għalhekk, aħna nanalizzaw A4imma le B3->A3. Minħabba din il-karatteristika, għandna bżonn nikkalkulaw id-differenza minn A3, li hija biss il-quċċata tal-fergħa minn oriġini.

Jibqa' dettall importanti - il-caching tad-dipendenzi tal-fajls tal-header fuq unitajiet ta' traduzzjoni kkumpilati (*.c, *.cc, *.cpp, eċċ.). L-analizzatur jikkalkula dawn id-dipendenzi fl-ewwel bidu fil-mod ta 'verifika tal-lista ta' fajls u mbagħad jiffrankahom fid-direttorju .PVS-Studio. Travis CI jippermettilek li cache folders, għalhekk aħna se niffrankaw id-dejta tad-direttorju .PVS-Studio/:

cache:
  directories:
    - .PVS-Studio/

Dan il-kodiċi jeħtieġ li jiġi miżjud mal-fajl .travis.yml. Dan id-direttorju jaħżen data varji miġbura wara l-analiżi, li se tħaffef b'mod sinifikanti l-ġirjiet sussegwenti ta 'analiżi tal-lista tal-fajls jew analiżi inkrementali. Jekk dan ma jsirx, allura l-analizzatur fil-fatt janalizza l-fajls kollha kull darba.

Buddy

Bħal Travis C.I., Buddy jipprovdi l-abbiltà li awtomatikament jibni u jittestja proġetti li huma maħżuna fuq GitHub. B'differenza Travis CI, huwa kkonfigurat fl-interface tal-web (l-appoġġ bash huwa disponibbli), għalhekk m'hemmx bżonn li jinħażnu fajls ta 'konfigurazzjoni fil-proġett.

L-ewwelnett, irridu nżidu azzjoni ġdida mal-linja tal-bini:

Analiżi ta 'commits u pull requests fi Travis CI, Buddy u AppVeyor bl-użu ta' PVS-Studio
Speċifika l-kompilatur li ntuża biex jinbena l-proġett. Innota l-kontenitur docker li huwa installat f'din l-attività. Pereżempju, hemm kontenitur speċjali għall-GCC:

Analiżi ta 'commits u pull requests fi Travis CI, Buddy u AppVeyor bl-użu ta' PVS-Studio
Issa ejja ninstallaw PVS-Studio u l-utilitajiet meħtieġa:

Analiżi ta 'commits u pull requests fi Travis CI, Buddy u AppVeyor bl-użu ta' PVS-Studio
Żid il-linji li ġejjin mal-editur:

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

Issa ejja mmorru fit-tab Run (l-ewwel ikona) u żid il-kodiċi li ġej fil-qasam tal-editur korrispondenti:

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

Jekk qrajt is-sezzjoni dwar Travs-CI, allura dan il-kodiċi diġà huwa familjari għalik, madankollu, issa hemm pass ġdid:

Analiżi ta 'commits u pull requests fi Travis CI, Buddy u AppVeyor bl-użu ta' PVS-Studio
Il-fatt hu li issa qed nanalizzaw mhux ir-riżultat tal-għaqda, iżda l-Kap tal-fergħa li minnha ssir it-talba tal-ġibda:

Analiżi ta 'commits u pull requests fi Travis CI, Buddy u AppVeyor bl-użu ta' PVS-Studio
Allura aħna qegħdin f'impenn kondizzjonali B3 u rridu nieħdu d-differenza minn 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

Għad-determinazzjoni A3 Ejja nużaw l-API GitHub:

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

Aħna użajna l-varjabbli li ġejjin ipprovduti minn Buddy:

  • $BUDDY_EXECUTION_PULL_REQEUST_NO - numru tat-talba tal-ġibda;
  • $BUDDY_REPO_SLUG - taħlita ta' username u repożitorju (per eżempju max / test).

Issa ejja nsalvaw il-bidliet billi tuża l-buttuna hawn taħt, u nippermettu l-analiżi tat-talba tal-ġibda:

Analiżi ta 'commits u pull requests fi Travis CI, Buddy u AppVeyor bl-użu ta' PVS-Studio
B'differenza għal Travis CI, m'għandniex bżonn nispeċifikaw .pvs-studio għall-caching, peress li Buddy awtomatikament jaħżen il-fajls kollha għal tnedijiet sussegwenti. Għalhekk, l-aħħar ħaġa li fadal hija li tissejvja l-login u l-password għal PVS-Studio f'Buddy. Wara li ssejvja l-bidliet, aħna se terġa 'lura għall-Pipeline. Irridu mmorru għall-issettjar tal-varjabbli u nżidu l-login u ċ-ċavetta għal PVS-Studio:

Analiżi ta 'commits u pull requests fi Travis CI, Buddy u AppVeyor bl-użu ta' PVS-Studio
Wara dan, id-dehra ta 'talba jew impenn ġdid ta' ġibda se tagħti bidu għal kontroll. Jekk impenn ikun fih żbalji, allura Buddy jindikah fuq il-paġna tat-talba tal-ġibda.

AppVeyor

It-twaqqif ta' AppVeyor huwa simili għal Buddy, peress li kollox jiġri fl-interface tal-web u m'hemmx bżonn li żżid fajl *.yml mar-repożitorju tal-proġett.

Ejja mmorru fit-tab Settings fil-ħarsa ġenerali tal-proġett:

Analiżi ta 'commits u pull requests fi Travis CI, Buddy u AppVeyor bl-użu ta' PVS-Studio
Ejja nimxu 'l isfel f'din il-paġna u nippermettu l-iffrankar tal-cache għall-bini ta' talbiet għall-ġibda:

Analiżi ta 'commits u pull requests fi Travis CI, Buddy u AppVeyor bl-użu ta' PVS-Studio
Issa ejja mmorru fit-tab Ambjent, fejn nispeċifikaw l-immaġni li trid tinbena u l-varjabbli ambjentali meħtieġa:

Analiżi ta 'commits u pull requests fi Travis CI, Buddy u AppVeyor bl-użu ta' PVS-Studio
Jekk qrajt is-sezzjonijiet preċedenti, inti familjari ħafna ma 'dawn iż-żewġ varjabbli − PVS_KEY и PVS_USERNAME. Jekk le, allura ħalluni nfakkarkom li huma meħtieġa biex tiċċekkja l-liċenzja tal-analizzatur PVS-Studio. Fil-futur, nerġgħu niltaqgħu magħhom fi skripts Bash.

Fl-istess paġna hawn taħt, speċifika l-folder għall-caching:

Analiżi ta 'commits u pull requests fi Travis CI, Buddy u AppVeyor bl-użu ta' PVS-Studio
Jekk ma nagħmlux dan, allura aħna se nanalizzaw il-proġett kollu minflok ftit fajls, iżda aħna se tikseb l-output ibbażat fuq il-fajls speċifikati. Għalhekk, huwa importanti li tiddaħħal l-isem tad-direttorju korrett.

Issa wasal iż-żmien li l-iskrittura tittestja. Iftaħ it-tab Testijiet u agħżel Script:

Analiżi ta 'commits u pull requests fi Travis CI, Buddy u AppVeyor bl-użu ta' PVS-Studio
Past il-kodiċi li ġej f'din il-formola:

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

Ejja nagħtu ħarsa lejn il-parti li ġejja tal-kodiċi:

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

L-assenjazzjoni pjuttost speċifika tal-valur tal-kmand pwd għal varjabbli li għandha taħżen dan il-valur default tidher stramba mal-ewwel daqqa t'għajn, madankollu, ser nispjega kollox f'mument.

Waqt li twaqqaf l-analizzatur f'AppVeyor, iltqajt ma' imġieba stramba estremament ta' l-analizzatur. Min-naħa waħda, kollox ħadem b'mod korrett, iżda l-analiżi ma bdietx. Għamilt ħafna ħin ninnota li aħna qegħdin fid-direttorju /home/appveyor/projects/testcalc/, u l-analizzatur huwa ċert li qegħdin f' /opt/appveyor/build-agent/. Imbagħad indunajt li l-varjabbli $PWD hija daqsxejn gidba. Għal din ir-raġuni, aġġornajt manwalment il-valur tiegħu qabel ma nibda l-analiżi.

U mbagħad kollox, bħal qabel:

Analiżi ta 'commits u pull requests fi Travis CI, Buddy u AppVeyor bl-użu ta' PVS-Studio
Issa ikkunsidra s-snippet li ġej:

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

Fiha, inġibu d-differenza bejn il-fergħat li fuqhom hija ddikjarata t-talba tal-ġibda. Għal dan neħtieġu l-varjabbli ambjentali li ġejjin:

  • $APPVEYOR_PULL_REQUEST_NUMBER - numru tat-talba tal-ġibda;
  • $APPVEYOR_REPO_NAME - isem tal-utent u repożitorju tal-proġett.

Konklużjoni

Naturalment, aħna ma qisniex is-servizzi kollha possibbli ta 'integrazzjoni kontinwa, madankollu, kollha għandhom ispeċifiċitajiet tax-xogħol simili ħafna. Bl-eċċezzjoni tal-caching, kull servizz jagħmel "bike" tiegħu stess, għalhekk kollox huwa dejjem differenti.

X'imkien, bħal fi Travis-CI, ftit linji ta 'kodiċi u caching jaħdmu bla difetti; x'imkien, bħal fl-AppVeyor, għandek bżonn biss li tispeċifika l-folder fis-settings; iżda x'imkien għandek bżonn toħloq ċwievet uniċi u tipprova tikkonvinċi s-sistema biex tagħtik l-opportunità li tikteb fuqu l-framment fil-cache. Għalhekk, jekk trid twaqqaf analiżi ta 'pull request fuq servizz ta' integrazzjoni kontinwa li ma kienx diskuss hawn fuq, allura l-ewwel kun żgur li mhux se jkollok problemi bil-caching.

Grazzi tal-attenzjoni tiegħek. Jekk xi ħaġa ma taħdimx, imbagħad tħossok liberu li tikteb lilna fuq appoġġ. Aħna se nagħtu pariri u ngħinu.

Analiżi ta 'commits u pull requests fi Travis CI, Buddy u AppVeyor bl-użu ta' PVS-Studio

Jekk trid taqsam dan l-artikolu ma 'udjenza li titkellem bl-Ingliż, jekk jogħġbok uża l-link tat-traduzzjoni: Maxim Zvyagintsev. Analiżi ta 'commits u pull requests fi Travis CI, Buddy u AppVeyor bl-użu ta' PVS-Studio.

Sors: www.habr.com

Żid kumment