Uchambuzi wa ahadi na maombi ya kuvuta katika Travis CI, Buddy na AppVeyor kwa kutumia PVS-Studio

Uchambuzi wa ahadi na maombi ya kuvuta katika Travis CI, Buddy na AppVeyor kwa kutumia PVS-Studio
Katika kichanganuzi cha PVS-Studio cha lugha za C na C++ kwenye Linux na macOS, kuanzia toleo la 7.04, chaguo la jaribio limeonekana kuangalia orodha ya faili maalum. Kwa kutumia hali mpya, unaweza kusanidi kichanganuzi ili kuangalia ahadi na maombi ya kuvuta. Nakala hii itakuambia jinsi ya kusanidi kuangalia orodha ya faili zilizobadilishwa za mradi wa GitHub katika mifumo maarufu ya CI (Ushirikiano Unaoendelea) kama Travis CI, Buddy na AppVeyor.

Hali ya kukagua orodha ya faili

PVS-Studio ni zana ya kutambua makosa na udhaifu unaowezekana katika msimbo wa chanzo wa programu zilizoandikwa katika C, C++, C# na Java. Inafanya kazi kwenye mifumo ya 64-bit kwenye Windows, Linux na macOS.

Katika toleo la PVS-Studio 7.04 la Linux na macOS, hali ya kuangalia orodha ya faili za chanzo imeonekana. Hii inafanya kazi kwa miradi ambayo mfumo wake wa ujenzi hukuruhusu kutoa faili kukusanya_commands.json. Inahitajika kwa kichanganuzi kutoa habari kuhusu mkusanyiko wa faili zilizoainishwa. Ikiwa mfumo wako wa ujenzi hauauni kutengeneza faili ya compile_commands.json, unaweza kujaribu kutengeneza faili kama hiyo kwa kutumia matumizi. Kubeba.

Pia, hali ya kukagua orodha ya faili inaweza kutumika pamoja na kumbukumbu ya ufuatiliaji ya uzinduaji wa mkusanyaji (pvs-studio-analyzer trace). Ili kufanya hivyo, utahitaji kwanza kufanya ujenzi kamili wa mradi na ufuatilie ili analyzer kukusanya taarifa kamili kuhusu vigezo vya mkusanyiko wa faili zote zinazokaguliwa.

Walakini, chaguo hili lina shida kubwa - utahitaji kutekeleza ufuatiliaji kamili wa mradi mzima kila wakati unapoiendesha, ambayo yenyewe inapingana na wazo la kuangalia ahadi haraka. Au, ukiweka akiba ya matokeo ya ufuatiliaji yenyewe, utendakazi unaofuata wa kichanganuzi unaweza kuwa haujakamilika ikiwa muundo wa utegemezi wa faili za chanzo utabadilika baada ya ufuatiliaji (kwa mfano, #include mpya imeongezwa kwenye mojawapo ya faili za chanzo).

Kwa hivyo, hatupendekezi kutumia hali ya kuangalia orodha ya faili na logi ya kufuatilia ili kuangalia ahadi au maombi ya kuvuta. Iwapo unaweza kufanya ujenzi wa nyongeza wakati wa kuangalia ahadi, fikiria kutumia modi uchambuzi wa nyongeza.

Orodha ya faili za chanzo kwa uchambuzi huhifadhiwa kwenye faili ya maandishi na kupitishwa kwa analyzer kwa kutumia parameter -S:

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

Faili hii inabainisha njia za jamaa au kabisa za faili, na kila faili mpya lazima iwe kwenye mstari mpya. Inakubalika kutaja sio tu majina ya faili kwa ajili ya uchambuzi, lakini pia maandishi mbalimbali. Mchambuzi ataona kuwa hii sio faili na itapuuza mstari. Hii inaweza kuwa muhimu kwa kutoa maoni ikiwa faili zimebainishwa mwenyewe. Walakini, mara nyingi orodha ya faili itatolewa wakati wa uchambuzi katika CI, kwa mfano, hizi zinaweza kuwa faili kutoka kwa ahadi au ombi la kuvuta.

Sasa, kwa kutumia hali hii, unaweza kuangalia kwa haraka msimbo mpya kabla ya kuingia kwenye tawi kuu la uendelezaji. Ili kuhakikisha kuwa mfumo wa skanning unajibu maonyo ya kichanganuzi, matumizi kibadilishaji cha plagi bendera imeongezwa --onyesha-maonyo:

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

Kwa alama hii, kigeuzi kitarejesha msimbo usio sifuri ikiwa kuna maonyo katika ripoti ya kichanganuzi. Kwa kutumia msimbo wa kurejesha, unaweza kuzuia ndoano ya awali, ahadi, au kuvuta ombi, na ripoti ya kichanganuzi iliyotolewa inaweza kuonyeshwa, kushirikiwa, au kutumwa kwa barua pepe.

Kumbuka. Unapoanza kwanza kuchambua orodha ya faili, mradi mzima utachambuliwa, kwa sababu mchambuzi anahitaji kutoa faili ya utegemezi wa faili za chanzo cha mradi kwenye faili za kichwa. Hiki ni kipengele cha kuchambua faili za C na C++. Katika siku zijazo, faili ya utegemezi inaweza kuhifadhiwa na itasasishwa moja kwa moja na analyzer. Faida ya kuangalia ahadi wakati wa kutumia hali ya kuangalia orodha ya faili kwa kutumia modi ya uchanganuzi unaoongezeka ni kwamba unahitaji tu kuweka akiba faili hiyo na sio faili za kitu.

Kanuni za jumla za uchambuzi wa ombi la kuvuta

Kuchambua mradi mzima huchukua muda mwingi, kwa hivyo ni mantiki kuangalia sehemu fulani tu yake. Shida ni kwamba unahitaji kutenganisha faili mpya kutoka kwa faili zingine za mradi.

Wacha tuangalie mfano wa mti wa ahadi na matawi mawili:

Uchambuzi wa ahadi na maombi ya kuvuta katika Travis CI, Buddy na AppVeyor kwa kutumia PVS-Studio

Hebu fikiria ahadi hiyo A1 ina idadi kubwa ya msimbo ambayo tayari imejaribiwa. Mapema kidogo tulifanya tawi kutoka kwa ahadi A1 na kubadilisha baadhi ya faili.

Wewe, bila shaka, niliona kwamba baada ya A1 ahadi mbili zaidi zilifanyika, lakini hizi pia zilikuwa muunganisho wa matawi mengine, kwa sababu hatujitolea bwana. Na sasa wakati umefika ambapo hotfix tayari. Ndiyo sababu ombi la kuvuta kwa kuunganisha lilionekana B3 ΠΈ A3.

Bila shaka, itawezekana kuangalia matokeo yote ya kuunganishwa kwao, lakini hii itakuwa ya muda mrefu sana na isiyofaa, kwa kuwa faili chache tu zilibadilishwa. Kwa hiyo, ni ufanisi zaidi kuchambua tu waliobadilishwa.

Ili kufanya hivyo, tunapata tofauti kati ya matawi, kuwa kwenye KICHWA cha tawi ambalo tunataka kuunganishwa kuwa bwana:

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

$MERGE_BASE tutaiangalia kwa undani baadaye. Ukweli ni kwamba si kila huduma ya CI hutoa taarifa muhimu kuhusu database ya kuunganisha, hivyo kila wakati unapaswa kuja na njia mpya za kupata data hii. Hii itaelezewa kwa undani hapa chini katika kila moja ya huduma zilizoelezewa za wavuti.

Kwa hiyo, tulipata tofauti kati ya matawi, au tuseme, orodha ya majina ya faili ambayo yalibadilishwa. Sasa tunahitaji kutoa faili .pvs-pr.list (tulielekeza pato hapo juu kwake) kwa kichanganuzi:

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

Baada ya uchanganuzi, tunahitaji kubadilisha faili ya kumbukumbu (PVS-Studio.log) kuwa umbizo rahisi kusoma:

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

Amri hii itaorodhesha makosa ndani stderr (matokeo ya ujumbe wa makosa ya kawaida).

Sasa tu hatuhitaji tu kuonyesha makosa, lakini pia kuwajulisha huduma yetu kwa mkusanyiko na kupima kuhusu kuwepo kwa matatizo. Kwa kusudi hili, bendera iliongezwa kwa kibadilishaji -W (--onyesha-maonyo) Ikiwa kuna angalau onyo moja la kichanganuzi, msimbo wa kurejesha matumizi kibadilishaji cha plagi itabadilika hadi 2, ambayo kwa upande wake itajulisha huduma ya CI kuhusu kuwepo kwa makosa yanayoweza kutokea katika faili za ombi la kuvuta.

Travis C.I.

Usanidi unafanywa kama faili .travis.yml. Kwa urahisi, nakushauri uweke kila kitu kwenye hati tofauti ya bash na kazi ambazo zitaitwa kutoka kwa faili .travis.yml (bash script_name.sh function_name).

Tutaongeza msimbo unaohitajika kwenye hati bash, kwa njia hii tutapata utendakazi zaidi. Katika sehemu kufunga tuandike yafuatayo:

install:
  - bash .travis.sh travis_install

Ikiwa ulikuwa na maagizo yoyote, unaweza kuyahamisha kwenye hati, ukiondoa hyphens.

Hebu tufungue faili .travis.sh na ongeza mpangilio wa kichanganuzi kwenye kitendakazi 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 
}

Sasa hebu tuongeze kwenye sehemu Muswada endesha uchambuzi:

script:
  - bash .travis.sh travis_script

Na kwenye hati ya 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
}

Nambari hii inahitaji kuendeshwa baada ya kujenga mradi, kwa mfano, ikiwa ulikuwa na ujenzi kwenye CMake:

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

Itageuka kama hii:

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
}

Labda tayari umegundua anuwai za mazingira $TRAVIS_PULL_REQUEST ΠΈ $TRAVIS_BRANCH. Travis CI inawatangaza kwa kujitegemea:

  • $TRAVIS_PULL_REQUEST huhifadhi nambari ya ombi la kuvuta au uongo, ikiwa hii ni tawi la kawaida;
  • $TRAVIS_REPO_SLUG huhifadhi jina la hazina ya mradi.

Algorithm ya kazi hii:

Uchambuzi wa ahadi na maombi ya kuvuta katika Travis CI, Buddy na AppVeyor kwa kutumia PVS-Studio
Travis CI hujibu misimbo ya kurejesha, kwa hivyo kuwepo kwa maonyo kutaambia huduma kuashiria ahadi kuwa ina makosa.

Sasa hebu tuangalie kwa karibu safu hii ya nambari:

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

Ukweli ni kwamba Travis CI huunganisha matawi kiatomati wakati wa kuchambua ombi la kuvuta:

Uchambuzi wa ahadi na maombi ya kuvuta katika Travis CI, Buddy na AppVeyor kwa kutumia PVS-Studio
Kwa hivyo tunachambua A4na sio B3->A3. Kwa sababu ya kipengele hiki, tunahitaji kuhesabu tofauti na A3, ambayo ni sehemu ya juu ya tawi kutoka asili.

Kuna maelezo moja muhimu yaliyosalia - kuakibisha vitegemezi vya faili za vichwa kwenye vitengo vya tafsiri vilivyokusanywa (*.c, *.cc, *.cpp, nk.). Kichanganuzi hukokotoa vitegemezi hivi kinapozinduliwa kwa mara ya kwanza katika hali ya kuangalia orodha ya faili na kisha kuzihifadhi kwenye saraka ya .PVS-Studio. Travis CI hukuruhusu kuhifadhi folda, kwa hivyo tutahifadhi data ya saraka .PVS-Studio/:

cache:
  directories:
    - .PVS-Studio/

Nambari hii inahitaji kuongezwa kwenye faili .travis.yml. Saraka hii huhifadhi data mbalimbali zilizokusanywa baada ya uchanganuzi, ambayo itaharakisha kwa kiasi kikubwa uendeshaji unaofuata wa uchanganuzi wa orodha ya faili au uchanganuzi wa nyongeza. Ikiwa hii haijafanywa, basi analyzer itachambua faili zote kila wakati.

Buddy

Kama Travis CI, Buddy hutoa uwezo wa kuunda na kujaribu miradi kiotomatiki iliyohifadhiwa kwenye GitHub. Tofauti na Travis CI, imesanidiwa katika kiolesura cha wavuti (msaada wa bash unapatikana), kwa hivyo hakuna haja ya kuhifadhi faili za usanidi katika mradi.

Kwanza kabisa, tunahitaji kuongeza hatua mpya kwenye mstari wa kusanyiko:

Uchambuzi wa ahadi na maombi ya kuvuta katika Travis CI, Buddy na AppVeyor kwa kutumia PVS-Studio
Wacha tuonyeshe mkusanyaji ambaye alitumiwa kujenga mradi huo. Angalia kontena ya docker ambayo imesakinishwa katika hatua hii. Kwa mfano, kuna chombo maalum cha GCC:

Uchambuzi wa ahadi na maombi ya kuvuta katika Travis CI, Buddy na AppVeyor kwa kutumia PVS-Studio
Sasa wacha tusakinishe PVS-Studio na huduma muhimu:

Uchambuzi wa ahadi na maombi ya kuvuta katika Travis CI, Buddy na AppVeyor kwa kutumia PVS-Studio
Wacha tuongeze mistari ifuatayo kwa mhariri:

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

Sasa wacha tuende kwenye kichupo cha Run (ikoni ya kwanza) na ongeza nambari ifuatayo kwenye uwanja wa mhariri unaolingana:

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

Ikiwa unasoma sehemu kwenye Travs-CI, basi nambari hii tayari inajulikana kwako, hata hivyo, sasa kuna hatua mpya:

Uchambuzi wa ahadi na maombi ya kuvuta katika Travis CI, Buddy na AppVeyor kwa kutumia PVS-Studio
Ukweli ni kwamba sasa hatuchambui matokeo ya kuunganishwa, lakini MKUU wa tawi ambalo ombi la kuvuta hufanywa:

Uchambuzi wa ahadi na maombi ya kuvuta katika Travis CI, Buddy na AppVeyor kwa kutumia PVS-Studio
Kwa hivyo tuko katika ahadi ya masharti B3 na tunahitaji kupata tofauti kutoka 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

Kwa kuamua A3 Wacha tutumie API ya GitHub:

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

Tulitumia anuwai zifuatazo ambazo Buddy hutoa:

  • $BUDDY_EXECUTION_PULL_REQEUST_NO - nambari ya ombi la kuvuta;
  • $BUDDY_REPO_SLUG β€” mchanganyiko wa jina la mtumiaji na hazina (kwa mfano max/test).

Sasa wacha tuhifadhi mabadiliko kwa kutumia kitufe hapa chini na kuwezesha uchanganuzi wa ombi la kuvuta:

Uchambuzi wa ahadi na maombi ya kuvuta katika Travis CI, Buddy na AppVeyor kwa kutumia PVS-Studio
Tofauti na Travis CI, hatuhitaji kubainisha .pvs-studio kwa akiba, kwani Buddy huhifadhi kiotomatiki faili zote kwa uzinduzi unaofuata. Kwa hiyo, jambo la mwisho lililobaki ni kuhifadhi kuingia na nenosiri kwa PVS-Studio katika Buddy. Baada ya kuhifadhi mabadiliko, tutarejeshwa kwenye Pipeline. Tunahitaji kuendelea na kusanidi anuwai na kuongeza kuingia na ufunguo wa PVS-Studio:

Uchambuzi wa ahadi na maombi ya kuvuta katika Travis CI, Buddy na AppVeyor kwa kutumia PVS-Studio
Baada ya hayo, kuonekana kwa ombi jipya la kuvuta au kujitolea kutasababisha ukaguzi. Ikiwa ahadi ina makosa, Buddy ataonyesha hii kwenye ukurasa wa ombi la kuvuta.

AppVeyor

Kuweka AppVeyor ni sawa na Buddy, kwa kuwa kila kitu hutokea katika kiolesura cha wavuti na hakuna haja ya kuongeza faili ya *.yml kwenye hazina ya mradi.

Wacha tuende kwenye kichupo cha Mipangilio katika muhtasari wa mradi:

Uchambuzi wa ahadi na maombi ya kuvuta katika Travis CI, Buddy na AppVeyor kwa kutumia PVS-Studio
Hebu tutembeze chini ukurasa huu na kuwezesha kuhifadhi akiba kwa ajili ya kukusanya maombi ya kuvuta:

Uchambuzi wa ahadi na maombi ya kuvuta katika Travis CI, Buddy na AppVeyor kwa kutumia PVS-Studio
Sasa hebu tuende kwenye kichupo cha Mazingira, ambapo tunataja picha ya kusanyiko na vigezo muhimu vya mazingira:

Uchambuzi wa ahadi na maombi ya kuvuta katika Travis CI, Buddy na AppVeyor kwa kutumia PVS-Studio
Ikiwa umesoma sehemu zilizotangulia, unazifahamu vyema viambajengo hivi viwili - PVS_KEY ΠΈ PVS_USERNAME. Ikiwa sivyo, wacha nikukumbushe kwamba ni muhimu kuthibitisha leseni ya analyzer ya PVS-Studio. Tutaziona tena katika hati za Bash katika siku zijazo.

Katika ukurasa huo huo hapa chini tunaonyesha folda ya caching:

Uchambuzi wa ahadi na maombi ya kuvuta katika Travis CI, Buddy na AppVeyor kwa kutumia PVS-Studio
Ikiwa hatutafanya hivi, tutachambua mradi mzima badala ya faili kadhaa, lakini tutapata matokeo kutoka kwa faili zilizoainishwa. Kwa hiyo, ni muhimu kuingiza jina la saraka sahihi.

Sasa ni wakati wa hati kujaribu. Fungua kichupo cha Majaribio na uchague Hati:

Uchambuzi wa ahadi na maombi ya kuvuta katika Travis CI, Buddy na AppVeyor kwa kutumia PVS-Studio
Unahitaji kubandika nambari ifuatayo kwenye fomu hii:

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

Wacha tuzingatie sehemu ifuatayo ya nambari:

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

Mgawo maalum wa thamani ya amri ya pwd kwa kutofautisha ambayo inapaswa kuhifadhi dhamana hii chaguo-msingi inaonekana ya kushangaza kwa mtazamo wa kwanza, hata hivyo, nitaelezea kila kitu sasa.

Wakati wa kusanidi kichanganuzi katika AppVeyor, nilikutana na tabia ya kushangaza sana ya kichanganuzi. Kwa upande mmoja, kila kitu kilifanya kazi kwa usahihi, lakini uchambuzi haukuanza. Nilitumia muda mwingi kugundua kuwa tuko kwenye saraka ya /home/appveyor/projects/testcalc/, na mchambuzi ana uhakika kuwa tuko katika /opt/appveyor/build-agent/. Kisha nikagundua kuwa tofauti ya $PWD ilikuwa imelala kidogo. Kwa sababu hii, nilisasisha thamani yake mwenyewe kabla ya kuanza uchambuzi.

Na kisha kila kitu ni kama hapo awali:

Uchambuzi wa ahadi na maombi ya kuvuta katika Travis CI, Buddy na AppVeyor kwa kutumia PVS-Studio
Sasa fikiria kipande kifuatacho:

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

Ndani yake tunapata tofauti kati ya matawi ambayo ombi la kuvuta linatangazwa. Ili kufanya hivyo, tunahitaji vigezo vifuatavyo vya mazingira:

  • $APPVEYOR_PULL_REQUEST_NUMBER - nambari ya ombi la kuvuta;
  • $APPVEYOR_REPO_NAME - jina la mtumiaji na hazina ya mradi.

Hitimisho

Bila shaka, hatujazingatia huduma zote zinazowezekana za ujumuishaji, hata hivyo, zote zina sifa za uendeshaji zinazofanana sana kwa kila mmoja. Isipokuwa caching, kila huduma hufanya "baiskeli" yake mwenyewe, hivyo kila kitu ni tofauti kila wakati.

Mahali fulani, kama vile Travis-CI, mistari kadhaa ya msimbo na kache hufanya kazi bila dosari; mahali fulani, kama katika AppVeyor, unahitaji tu kutaja folda katika mipangilio; lakini mahali fulani unahitaji kuunda funguo za kipekee na jaribu kushawishi mfumo kukupa fursa ya kufuta kipande cha cached. Kwa hiyo, ikiwa unataka kuanzisha uchambuzi wa maombi ya kuvuta kwenye huduma ya ushirikiano inayoendelea ambayo haikujadiliwa hapo juu, basi kwanza uhakikishe kuwa hutakuwa na matatizo na caching.

Asante kwa umakini wako. Ikiwa kitu hakifanyiki, jisikie huru kutuandikia msaada. Tutashauri na kusaidia.

Uchambuzi wa ahadi na maombi ya kuvuta katika Travis CI, Buddy na AppVeyor kwa kutumia PVS-Studio

Ikiwa ungependa kushiriki makala hii na hadhira inayozungumza Kiingereza, tafadhali tumia kiungo cha kutafsiri: Maxim Zvyagintsev. Uchambuzi wa ahadi na maombi ya kuvuta katika Travis CI, Buddy na AppVeyor kwa kutumia PVS-Studio.

Chanzo: mapenzi.com

Kuongeza maoni