Dadansoddiad o geisiadau ymrwymo a thynnu yn Travis CI, Buddy ac AppVeyor gan ddefnyddio PVS-Studio

Dadansoddiad o geisiadau ymrwymo a thynnu yn Travis CI, Buddy ac AppVeyor gan ddefnyddio PVS-Studio
Yn y dadansoddwr PVS-Studio ar gyfer ieithoedd C a C ++ ar Linux a macOS, gan ddechrau o fersiwn 7.04, mae opsiwn prawf wedi ymddangos i wirio'r rhestr o ffeiliau penodedig. Gan ddefnyddio'r modd newydd, gallwch chi ffurfweddu'r dadansoddwr i wirio ymrwymiadau a thynnu ceisiadau. Bydd yr erthygl hon yn dweud wrthych sut i sefydlu gwirio'r rhestr o ffeiliau newidiedig prosiect GitHub mewn systemau CI (Integreiddio Parhaus) mor boblogaidd â Travis CI, Buddy ac AppVeyor.

Modd gwirio rhestr ffeiliau

PVS-Stiwdio yn arf ar gyfer nodi gwallau a gwendidau posibl yn y cod ffynhonnell o raglenni a ysgrifennwyd yn C, C++, C# a Java. Yn gweithio ar systemau 64-bit ar Windows, Linux a macOS.

Yn fersiwn PVS-Studio 7.04 ar gyfer Linux a macOS, mae modd gwirio'r rhestr o ffeiliau ffynhonnell wedi ymddangos. Mae hyn yn gweithio ar gyfer prosiectau y mae eu system adeiladu yn caniatáu ichi gynhyrchu ffeil llunio_commands.json. Mae angen i'r dadansoddwr dynnu gwybodaeth am gasglu'r ffeiliau penodedig. Os nad yw eich system adeiladu yn cefnogi cynhyrchu'r ffeil compile_commands.json, gallwch geisio cynhyrchu ffeil o'r fath gan ddefnyddio'r cyfleustodau Ewch i'r.

Hefyd, gellir defnyddio'r modd gwirio rhestr ffeiliau ynghyd â'r log olrhain trace o lansiadau casglwr (olrhain pvs-studio-analyzer). I wneud hyn, yn gyntaf bydd angen i chi berfformio adeiladwaith llawn o'r prosiect a'i olrhain fel bod y dadansoddwr yn casglu gwybodaeth gyflawn am baramedrau casglu'r holl ffeiliau sy'n cael eu gwirio.

Fodd bynnag, mae gan yr opsiwn hwn anfantais sylweddol - bydd angen i chi naill ai berfformio olion adeiladu llawn o'r prosiect cyfan bob tro y byddwch chi'n ei redeg, sydd ynddo'i hun yn gwrth-ddweud y syniad o wirio ymrwymiad yn gyflym. Neu, os ydych chi'n storio'r canlyniad olrhain ei hun, efallai y bydd rhediadau dilynol y dadansoddwr yn anghyflawn os bydd strwythur dibyniaeth y ffeiliau ffynhonnell yn newid ar ôl yr olrhain (er enghraifft, mae #include newydd yn cael ei ychwanegu at un o'r ffeiliau ffynhonnell).

Felly, nid ydym yn argymell defnyddio'r modd gwirio rhestr ffeiliau gyda'r log olrhain i wirio ceisiadau ymrwymo neu dynnu. Rhag ofn y gallwch chi adeiladu cynyddrannol wrth wirio ymrwymiad, ystyriwch ddefnyddio'r modd dadansoddiad cynyddrannol.

Mae'r rhestr o ffeiliau ffynhonnell i'w dadansoddi yn cael ei chadw mewn ffeil testun a'i throsglwyddo i'r dadansoddwr gan ddefnyddio'r paramedr -S:

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

Mae'r ffeil hon yn nodi llwybrau cymharol neu absoliwt i ffeiliau, a rhaid i bob ffeil newydd fod ar linell newydd. Mae'n dderbyniol nodi nid yn unig enwau ffeiliau i'w dadansoddi, ond testun amrywiol hefyd. Bydd y dadansoddwr yn gweld nad ffeil yw hon a bydd yn anwybyddu'r llinell. Gall hyn fod yn ddefnyddiol ar gyfer gwneud sylwadau os caiff ffeiliau eu pennu â llaw. Fodd bynnag, yn aml bydd rhestr o ffeiliau'n cael eu cynhyrchu yn ystod dadansoddiad CI, er enghraifft, gallai'r rhain fod yn ffeiliau o gais ymrwymo neu dynnu.

Nawr, gan ddefnyddio'r modd hwn, gallwch chi wirio cod newydd yn gyflym cyn iddo fynd i mewn i'r brif gangen ddatblygu. Er mwyn sicrhau bod y system sganio yn ymateb i rybuddion dadansoddwr, y cyfleustodau trawsnewidydd plog baner wedi'i hychwanegu --dangos-rhybuddion:

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

Gyda'r faner hon, bydd y trawsnewidydd yn dychwelyd cod di-sero os oes rhybuddion yn adroddiad y dadansoddwr. Gan ddefnyddio'r cod dychwelyd, gallwch rwystro bachyn rhag-ymrwymo, ymrwymo, neu dynnu cais, a gellir arddangos, rhannu neu anfon yr adroddiad dadansoddwr a gynhyrchir trwy e-bost.

Nodyn. Pan fyddwch chi'n dechrau dadansoddi rhestr o ffeiliau am y tro cyntaf, bydd y prosiect cyfan yn cael ei ddadansoddi, oherwydd mae angen i'r dadansoddwr gynhyrchu ffeil o ddibyniaethau'r ffeiliau ffynhonnell prosiect ar y ffeiliau pennawd. Mae hyn yn nodwedd o ddadansoddi ffeiliau C a C++. Yn y dyfodol, gellir storio'r ffeil dibyniaeth a bydd yn cael ei diweddaru'n awtomatig gan y dadansoddwr. Mantais gwirio yn ymrwymo wrth ddefnyddio modd gwirio rhestr ffeil dros ddefnyddio modd dadansoddi cynyddrannol yw mai dim ond angen i chi storio'r ffeil honno ac nid y ffeiliau gwrthrych.

Egwyddorion cyffredinol dadansoddi ceisiadau tynnu

Mae dadansoddi'r prosiect cyfan yn cymryd llawer o amser, felly mae'n gwneud synnwyr i wirio dim ond rhan benodol ohono. Y broblem yw bod angen i chi wahanu'r ffeiliau newydd oddi wrth weddill y ffeiliau prosiect.

Edrychwn ar enghraifft o goeden ymrwymo gyda dwy gangen:

Dadansoddiad o geisiadau ymrwymo a thynnu yn Travis CI, Buddy ac AppVeyor gan ddefnyddio PVS-Studio

Gadewch i ni ddychmygu'r ymrwymiad hwnnw A1 yn cynnwys swm eithaf mawr o god sydd eisoes wedi'i brofi. Ychydig yn gynharach fe wnaethom gangen o'r ymrwymiad A1 a newidiodd rhai ffeiliau.

Fe wnaethoch chi, wrth gwrs, sylwi ar hynny ar ôl A1 digwyddodd dau ymrwymiad arall, ond roedd y rhain hefyd yn gyfuniadau o ganghennau eraill, oherwydd nid ydym yn ymrwymo i hynny meistr. Ac yn awr mae'r amser wedi dod pryd gosodiad cyflym barod. Dyna pam yr ymddangosodd cais tynnu ar gyfer yr uno B3 и A3.

Wrth gwrs, byddai'n bosibl gwirio canlyniad cyfan eu huno, ond byddai hyn yn cymryd gormod o amser ac yn anghyfiawn, gan mai dim ond ychydig o ffeiliau a newidiwyd. Felly, mae'n fwy effeithlon dadansoddi'r rhai sydd wedi'u newid yn unig.

I wneud hyn, rydym yn cael y gwahaniaeth rhwng y canghennau, gan fod ym Mhennaeth y gangen yr ydym am uno i feistr ohoni:

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

$MERGE_BASE byddwn yn edrych arno'n fanwl yn nes ymlaen. Y ffaith yw nad yw pob gwasanaeth CI yn darparu'r wybodaeth angenrheidiol am y gronfa ddata ar gyfer uno, felly bob tro mae'n rhaid i chi ddod o hyd i ffyrdd newydd o gael y data hwn. Disgrifir hyn yn fanwl isod ym mhob un o'r gwasanaethau gwe a ddisgrifir.

Felly, cawsom y gwahaniaeth rhwng y canghennau, neu yn hytrach, rhestr o enwau ffeiliau a newidiwyd. Nawr mae angen inni roi'r ffeil .pvs-pr.list (fe wnaethom ailgyfeirio'r allbwn uchod iddo) i'r dadansoddwr:

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

Ar ôl dadansoddi, mae angen i ni drosi'r ffeil log (PVS-Studio.log) i fformat hawdd ei ddarllen:

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

Bydd y gorchymyn hwn yn rhestru'r gwallau yn stderr (allbwn neges gwall safonol).

Dim ond nawr mae angen i ni nid yn unig arddangos gwallau, ond hefyd hysbysu ein gwasanaeth ar gyfer cydosod a phrofi am bresenoldeb problemau. At y diben hwn, ychwanegwyd baner at y trawsnewidydd -W (--dangos-rhybuddion). Os oes o leiaf un rhybudd dadansoddwr, y cod dychwelyd cyfleustodau trawsnewidydd plog yn newid i 2, a fydd yn ei dro yn hysbysu'r gwasanaeth CI am bresenoldeb gwallau posibl yn y ffeiliau cais tynnu.

Travis CI

Gwneir y ffurfweddiad fel ffeil .travis.yml. Er hwylustod, rwy'n eich cynghori i roi popeth mewn sgript bash ar wahân gyda swyddogaethau a fydd yn cael eu galw o'r ffeil .travis.yml (bash script_name.sh function_name).

Byddwn yn ychwanegu'r cod angenrheidiol i'r sgript yn bash, y ffordd hon byddwn yn cael mwy o ymarferoldeb. Yn adran gosod gadewch i ni ysgrifennu'r canlynol:

install:
  - bash .travis.sh travis_install

Os oedd gennych unrhyw gyfarwyddiadau, gallwch eu trosglwyddo i'r sgript, gan ddileu'r cysylltnodau.

Gadewch i ni agor y ffeil .travis.sh ac ychwanegu gosodiad y dadansoddwr i'r swyddogaeth 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 
}

Nawr gadewch i ni ychwanegu at yr adran sgript rhedeg dadansoddiad:

script:
  - bash .travis.sh travis_script

Ac yn y sgript 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
}

Mae angen rhedeg y cod hwn ar ôl adeiladu'r prosiect, er enghraifft, os oedd gennych chi adeiladu ar CMake:

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

Bydd yn troi allan fel hyn:

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
}

Mae'n debyg eich bod eisoes wedi sylwi ar y newidynnau amgylchedd hyn $TRAVIS_PULL_REQUEST и $TRAVIS_BRANCH. Mae Travis CI yn eu datgan yn annibynnol:

  • $TRAVIS_PULL_REQUEST yn storio'r rhif cais tynnu neu ffug, os cangen reolaidd yw hon ;
  • $TRAVIS_REPO_SLUG yn storio enw ystorfa'r prosiect.

Yr algorithm ar gyfer y swyddogaeth hon:

Dadansoddiad o geisiadau ymrwymo a thynnu yn Travis CI, Buddy ac AppVeyor gan ddefnyddio PVS-Studio
Mae Travis CI yn ymateb i godau dychwelyd, felly bydd presenoldeb rhybuddion yn dweud wrth y gwasanaeth i nodi'r ymrwymiad fel un sy'n cynnwys gwallau.

Nawr, gadewch i ni edrych yn agosach ar y llinell hon o god:

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

Y ffaith yw bod Travis CI yn uno canghennau yn awtomatig wrth ddadansoddi cais tynnu:

Dadansoddiad o geisiadau ymrwymo a thynnu yn Travis CI, Buddy ac AppVeyor gan ddefnyddio PVS-Studio
Felly rydym yn dadansoddi A4Ac nid B3->A3. Oherwydd y nodwedd hon, mae angen inni gyfrifo'r gwahaniaeth gyda A3, sydd yn union ben y gangen o tarddiad.

Mae un manylyn pwysig ar ôl - cadw dibyniaeth ffeiliau pennawd ar unedau cyfieithu a luniwyd (*.c, *.cc, *.cpp, ac ati). Mae'r dadansoddwr yn cyfrifo'r dibyniaethau hyn pan gaiff ei lansio gyntaf yn y modd o wirio rhestr o ffeiliau ac yna'n eu cadw yn y cyfeiriadur .PVS-Studio. Mae Travis CI yn caniatáu ichi storio ffolderi, felly byddwn yn arbed data'r cyfeiriadur .PVS-Stiwdio/:

cache:
  directories:
    - .PVS-Studio/

Mae angen ychwanegu'r cod hwn at y ffeil .travis.yml. Mae'r cyfeiriadur hwn yn storio data amrywiol a gasglwyd ar ôl dadansoddi, a fydd yn cyflymu'r rhediadau dilynol o ddadansoddi rhestr ffeiliau neu ddadansoddiad cynyddrannol yn sylweddol. Os na wneir hyn, yna bydd y dadansoddwr yn dadansoddi'r holl ffeiliau bob tro.

Buddy

Fel Travis CI, Buddy yn darparu'r gallu i adeiladu a phrofi prosiectau sydd wedi'u storio ar GitHub yn awtomatig. Yn wahanol i Travis CI, mae wedi'i ffurfweddu yn y rhyngwyneb gwe (mae cefnogaeth bash ar gael), felly nid oes angen storio ffeiliau cyfluniad yn y prosiect.

Yn gyntaf oll, mae angen inni ychwanegu cam gweithredu newydd at y llinell ymgynnull:

Dadansoddiad o geisiadau ymrwymo a thynnu yn Travis CI, Buddy ac AppVeyor gan ddefnyddio PVS-Studio
Gadewch i ni nodi'r casglwr a ddefnyddiwyd i adeiladu'r prosiect. Sylwch ar y cynhwysydd docwr sydd wedi'i osod yn y weithred hon. Er enghraifft, mae cynhwysydd arbennig ar gyfer GCC:

Dadansoddiad o geisiadau ymrwymo a thynnu yn Travis CI, Buddy ac AppVeyor gan ddefnyddio PVS-Studio
Nawr, gadewch i ni osod PVS-Studio a'r cyfleustodau angenrheidiol:

Dadansoddiad o geisiadau ymrwymo a thynnu yn Travis CI, Buddy ac AppVeyor gan ddefnyddio PVS-Studio
Gadewch i ni ychwanegu'r llinellau canlynol at y golygydd:

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

Nawr, gadewch i ni fynd i'r tab Run (eicon cyntaf) ac ychwanegu'r cod canlynol i'r maes golygydd cyfatebol:

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

Os ydych chi'n darllen yr adran ar Travs-CI, yna mae'r cod hwn eisoes yn gyfarwydd i chi, fodd bynnag, nawr mae cam newydd:

Dadansoddiad o geisiadau ymrwymo a thynnu yn Travis CI, Buddy ac AppVeyor gan ddefnyddio PVS-Studio
Y ffaith yw ein bod nawr yn dadansoddi nid canlyniad yr uno, ond PENNAETH y gangen y gwneir y cais tynnu ohoni:

Dadansoddiad o geisiadau ymrwymo a thynnu yn Travis CI, Buddy ac AppVeyor gan ddefnyddio PVS-Studio
Felly rydym mewn ymrwymiad amodol B3 ac mae angen i ni gael y gwahaniaeth oddi wrth 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

I benderfynu A3 Gadewch i ni ddefnyddio'r API GitHub:

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

Defnyddiwyd y newidynnau canlynol y mae Buddy yn eu darparu:

  • $BUDDY_EXECUTION_PULL_REQEUST_NO — rhif cais tynnu;
  • $BUDDY_REPO_SLUG — cyfuniad o enw defnyddiwr ac ystorfa (er enghraifft max/test).

Nawr gadewch i ni arbed y newidiadau gan ddefnyddio'r botwm isod a galluogi dadansoddiad o'r cais tynnu:

Dadansoddiad o geisiadau ymrwymo a thynnu yn Travis CI, Buddy ac AppVeyor gan ddefnyddio PVS-Studio
Yn wahanol i Travis CI, nid oes angen i ni nodi .pvs-stiwdio ar gyfer caching, gan fod Buddy yn storio pob ffeil yn awtomatig ar gyfer lansiadau dilynol. Felly, y peth olaf ar ôl yw arbed y mewngofnodi a'r cyfrinair ar gyfer PVS-Studio in Buddy. Ar ôl arbed y newidiadau, byddwn yn mynd yn ôl i Pipeline. Mae angen i ni symud ymlaen i sefydlu newidynnau ac ychwanegu mewngofnodi ac allwedd ar gyfer PVS-Studio:

Dadansoddiad o geisiadau ymrwymo a thynnu yn Travis CI, Buddy ac AppVeyor gan ddefnyddio PVS-Studio
Ar ôl hyn, bydd ymddangosiad cais tynnu newydd neu ymrwymiad yn sbarduno'r adolygiad. Os yw ymrwymiad yn cynnwys gwallau, bydd Buddy yn nodi hyn ar y dudalen cais tynnu.

AppVeyor

Mae sefydlu AppVeyor yn debyg i Buddy, gan fod popeth yn digwydd yn y rhyngwyneb gwe ac nid oes angen ychwanegu ffeil *.yml i ystorfa'r prosiect.

Gadewch i ni fynd i'r tab Gosodiadau yn y trosolwg o'r prosiect:

Dadansoddiad o geisiadau ymrwymo a thynnu yn Travis CI, Buddy ac AppVeyor gan ddefnyddio PVS-Studio
Gadewch i ni sgrolio i lawr y dudalen hon a galluogi cadw storfa ar gyfer casglu ceisiadau tynnu:

Dadansoddiad o geisiadau ymrwymo a thynnu yn Travis CI, Buddy ac AppVeyor gan ddefnyddio PVS-Studio
Nawr, gadewch i ni fynd i'r tab Amgylchedd, lle rydyn ni'n nodi'r ddelwedd ar gyfer cydosod a'r newidynnau amgylchedd angenrheidiol:

Dadansoddiad o geisiadau ymrwymo a thynnu yn Travis CI, Buddy ac AppVeyor gan ddefnyddio PVS-Studio
Os ydych chi wedi darllen yr adrannau blaenorol, rydych chi'n gyfarwydd iawn â'r ddau newidyn hyn − PVS_KEY и PVS_USERNAME. Os na, gadewch imi eich atgoffa eu bod yn angenrheidiol i wirio trwydded y dadansoddwr PVS-Studio. Cawn eu gweld eto yn sgriptiau Bash yn y dyfodol.

Ar yr un dudalen isod rydym yn nodi'r ffolder ar gyfer caching:

Dadansoddiad o geisiadau ymrwymo a thynnu yn Travis CI, Buddy ac AppVeyor gan ddefnyddio PVS-Studio
Os na fyddwn yn gwneud hyn, byddwn yn dadansoddi'r prosiect cyfan yn lle cwpl o ffeiliau, ond byddwn yn cael yr allbwn o'r ffeiliau penodedig. Felly, mae'n bwysig nodi'r enw cyfeiriadur cywir.

Nawr mae'n bryd i'r sgript brofi. Agorwch y tab Profion a dewiswch Sgript:

Dadansoddiad o geisiadau ymrwymo a thynnu yn Travis CI, Buddy ac AppVeyor gan ddefnyddio PVS-Studio
Mae angen i chi gludo'r cod canlynol i'r ffurflen hon:

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

Gadewch i ni dalu sylw i'r rhan ganlynol o'r cod:

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

Mae aseiniad eithaf penodol gwerth y gorchymyn pwd i newidyn a ddylai storio'r gwerth rhagosodedig hwn yn ymddangos yn rhyfedd ar yr olwg gyntaf, fodd bynnag, byddaf yn esbonio popeth nawr.

Wrth sefydlu'r dadansoddwr yn AppVeyor, deuthum ar draws ymddygiad rhyfedd iawn y dadansoddwr. Ar y naill law, roedd popeth yn gweithio'n iawn, ond ni ddechreuodd y dadansoddiad. Treuliais lawer o amser yn sylwi ein bod ni yn y cyfeiriadur /home/appveyor/prosiectau/testcalc/, ac mae'r dadansoddwr yn siŵr ein bod ni yn /opt/appveyor/build-agent/. Yna sylweddolais fod y newidyn $ PWD yn gorwedd ychydig. Am y rheswm hwn, diweddarais ei werth â llaw cyn dechrau'r dadansoddiad.

Ac yna mae popeth fel o'r blaen:

Dadansoddiad o geisiadau ymrwymo a thynnu yn Travis CI, Buddy ac AppVeyor gan ddefnyddio PVS-Studio
Nawr ystyriwch y darn canlynol:

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

Ynddo cawn y gwahaniaeth rhwng y canghenau dros ba rai y datganir y cais tyniad. I wneud hyn mae angen y newidynnau amgylchedd canlynol arnom:

  • $APPVEYOR_PULL_REQUEST_NUMBER — tynnu rhif cais;
  • $APPVEYOR_REPO_NAME - enw defnyddiwr a storfa'r prosiect.

Casgliad

Wrth gwrs, nid ydym wedi ystyried yr holl wasanaethau integreiddio parhaus posibl, fodd bynnag, mae gan bob un ohonynt fanylion gweithredu tebyg iawn i'w gilydd. Ac eithrio caching, mae pob gwasanaeth yn gwneud ei “feic” ei hun, felly mae popeth bob amser yn wahanol.

Yn rhywle, fel yn Travis-CI, mae cwpl o linellau o god a caching yn gweithio'n ddi-ffael; rhywle, fel yn AppVeyor, does ond angen i chi nodi'r ffolder yn y gosodiadau; ond yn rhywle mae angen i chi greu allweddi unigryw a cheisio argyhoeddi'r system i roi cyfle i chi drosysgrifennu'r darn cached. Felly, os ydych chi am sefydlu dadansoddiad o geisiadau tynnu ar wasanaeth integreiddio parhaus na chafodd ei drafod uchod, yna gwnewch yn siŵr yn gyntaf na fyddwch chi'n cael problemau gyda caching.

Diolch am eich sylw. Os nad yw rhywbeth yn gweithio, mae croeso i chi ysgrifennu atom cefnogaeth. Byddwn yn cynghori ac yn helpu.

Dadansoddiad o geisiadau ymrwymo a thynnu yn Travis CI, Buddy ac AppVeyor gan ddefnyddio PVS-Studio

Os ydych chi am rannu'r erthygl hon â chynulleidfa Saesneg ei hiaith, defnyddiwch y ddolen gyfieithu: Maxim Zvyagintsev. Dadansoddiad o geisiadau ymrwymo a thynnu yn Travis CI, Buddy ac AppVeyor gan ddefnyddio PVS-Studio.

Ffynhonnell: hab.com

Ychwanegu sylw