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-Studio C, C++, C# жана Java тилдеринде жазылган программалардын баштапкы кодундагы каталарды жана потенциалдуу кемчиликтерди аныктоочу курал. Windows, Linux жана macOS 64-бит системаларында иштейт.

Linux жана macOS үчүн PVS-Studio 7.04 версиясында баштапкы файлдардын тизмесин текшерүү режими пайда болду. Бул куруу системасы файлды түзүүгө мүмкүндүк берген долбоорлор үчүн иштейт compile_commands.json. Ал анализаторго көрсөтүлгөн файлдарды түзүү жөнүндө маалыматты алуу үчүн керек. Эгерде сиздин куруу тутумуңуз compile_commands.json файлын түзүүнү колдоого албаса, сиз утилитаны колдонуп ушундай файлды түзүүгө аракет кылсаңыз болот. аюу.

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

Бирок, бул опциянын олуттуу кемчилиги бар - сиз аны ишке ашырган сайын бүткүл долбоордун толук изин жүргүзүүгө туура келет, бул өзү милдеттенмени тез текшерүү идеясына карама-каршы келет. Же болбосо, трассанын натыйжасынын өзүн кэштесеңиз, баштапкы файлдардын көз карандылык структурасы изден кийин өзгөрсө, анализатордун кийинки иштөөлөрү толук болбой калышы мүмкүн (мисалы, баштапкы файлдардын бирине жаңы #include кошулат).

Ошондуктан, биз тапшырмаларды текшерүү же сурамдарды тартуу үчүн файлдар тизмесин текшерүү режимин издөө журналы менен колдонууну сунуш кылбайбыз. Милдеттенмени текшерүүдө кошумча курууну жасай алсаңыз, режимди колдонууну карап көрүңүз кошумча талдоо.

Талдоо үчүн баштапкы файлдардын тизмеси тексттик файлда сакталат жана параметрди колдонуу менен анализаторго берилет -S:

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

Бул файл файлдардын салыштырмалуу же абсолюттук жолдорун аныктайт жана ар бир жаңы файл жаңы сапта болушу керек. Талдоо үчүн файлдардын аталыштарын гана эмес, ошондой эле ар кандай тексттерди көрсөтүүгө болот. Анализатор бул файл эмес экенин көрүп, сызыкты этибарга албайт. Бул файлдар кол менен көрсөтүлгөн болсо, комментарий берүү үчүн пайдалуу болушу мүмкүн. Бирок, көп учурда CIде талдоо учурунда файлдардын тизмеси түзүлөт, мисалы, бул Commit же тартуу сурамындагы файлдар болушу мүмкүн.

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

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

Бул желек менен конвертер анализатордун отчетунда эскертүүлөр бар болсо, нөл эмес кодду кайтарат. Кайтаруу кодун колдонуу менен сиз алдын ала жасалган илгичти, милдеттендирүүнү же тартуу өтүнүчүн бөгөттөсөңүз болот жана түзүлгөн анализатор отчетун көрсөтүүгө, бөлүшүүгө же электрондук почта аркылуу жөнөтүүгө болот.

Эскертүү. Файлдардын тизмесин биринчи жолу талдап баштаганда, бүт долбоор талданат, анткени анализатор долбоордун баштапкы файлдарынын баш файлдарына көз карандылыктарынын файлын түзүшү керек. Бул C жана C++ файлдарын талдоо өзгөчөлүгү. Келечекте көз карандылык файлын кэштесе болот жана ал анализатор тарабынан автоматтык түрдө жаңыртылып турат. Файлдар тизмесин текшерүү режимин колдонууда кошумча талдоо режимин колдонууда милдеттенмелерди текшерүүнүн артыкчылыгы объект файлдарын эмес, ошол файлды гана кэштөө керек.

Тартуу өтүнүчүн анализдөөнүн жалпы принциптери

Бүтүндөй долбоорду талдоо көп убакытты талап кылат, ошондуктан анын белгилүү бир бөлүгүн гана текшерүү мааниси бар. Көйгөй сиз жаңы файлдарды долбоордун калган файлдарынан бөлүп алышыңыз керек.

Келгиле, эки бутактары бар миссия дарагынын мисалын карап көрөлү:

PVS-Studio аркылуу Travis CI, Buddy жана AppVeyor кызматтарында тапшырмаларды жана суроо-талаптарды талдоо

Келгиле, ошол милдеттенмени элестетип көрөлү A1 буга чейин сыналган коддун бир кыйла көп көлөмүн камтыйт. Бир аз мурда биз милдеттенмеден бутак жасадык A1 жана кээ бир файлдарды өзгөрттү.

Сиз, албетте, кийин байкаган A1 дагы эки милдеттендирилди, бирок булар дагы башка бутактардын биригүүлөрү болду, анткени биз милдеттендирбейбиз кожоюн. Мына эми убакыт келди жыртык бүтөө даяр. Ошондуктан биригүү өтүнүчү пайда болду B3 и A3.

Албетте, алардын бириктирилишинин бүт натыйжасын текшерүүгө болот, бирок бул өтө көп убакытты талап кылат жана негизсиз болмок, анткени бир нече гана файлдар өзгөртүлгөн. Андыктан өзгөргөндөрдү гана талдоо натыйжалуураак.

Бул үчүн, биз мастерге бириктиргибиз келген бутактын БАШЫНДА болуу менен, бутактардын ортосундагы айырманы алабыз:

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 кызматына тартуу сурам файлдарында мүмкүн болуучу каталардын бар экендиги жөнүндө маалымдайт.

Travis C.I.

Конфигурация файл катары жасалган .travis.yml. Ыңгайлуу болуу үчүн, мен сизге баарын файлдан чакырыла турган функциялар менен өзүнчө bash скриптине коюуну сунуштайм. .travis.yml (bash script_name.sh function_name).

Биз скриптке керектүү кодду кошобуз Баш, ушундай жол менен биз көбүрөөк функцияларды алабыз. Бөлүмдө орнотуу төмөнкүнү жазалы:

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 кызматтарында тапшырмаларды жана суроо-талаптарды талдоо
Чындыгында, азыр биз бириктирүүнүн натыйжасын эмес, тартуу өтүнүчү жасалган филиалдын ЖЕТЕКЧИНИН талдайбыз:

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 — колдонуучу аты менен репозиторийдин айкалышы (мисалы, макс/тест).

Эми төмөндөгү баскычты колдонуу менен өзгөртүүлөрдү сактап, тартуу сурамынын анализин иштетели:

PVS-Studio аркылуу Travis CI, Buddy жана AppVeyor кызматтарында тапшырмаларды жана суроо-талаптарды талдоо
Travis CIден айырмаланып, биз тактап кереги жок .pvs-studio кэштөө үчүн, анткени Buddy кийинки ишке киргизүү үчүн бардык файлдарды автоматтык түрдө кэштейт. Ошондуктан, акыркы нерсе - Buddy-де PVS-Studio үчүн логин менен сырсөздү сактап калуу. Өзгөртүүлөр сакталгандан кийин, биз Pipeline'га кайра алып кетебиз. Биз өзгөрмөлөрдү орнотууга жана PVS-Studio үчүн логинди жана ачкычты кошууга өтүшүбүз керек:

PVS-Studio аркылуу Travis CI, Buddy жана AppVeyor кызматтарында тапшырмаларды жана суроо-талаптарды талдоо
Андан кийин, жаңы тартуу сурамынын же милдеттенменин пайда болушу карап чыгууну баштайт. Эгерде тапшырма каталарды камтыса, Buddy муну тартуу өтүнүчү бетинде көрсөтөт.

AppVeyor

AppVeyor орнотуу Баддиге окшош, анткени бардыгы веб-интерфейсте болот жана долбоордун репозиторийине *.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 кызматтарында тапшырмаларды жана суроо-талаптарды талдоо.

Source: www.habr.com

Комментарий кошуу