Analisis komitmen sareng tarik pamundut di Travis CI, Buddy sareng AppVeyor nganggo PVS-Studio

Analisis komitmen sareng tarik pamundut di Travis CI, Buddy sareng AppVeyor nganggo PVS-Studio
Mimitian ti vérsi 7.04, analisa PVS-Studio pikeun basa C sareng C ++ dina Linux sareng macOS gaduh pilihan tés pikeun mariksa daptar file anu ditangtukeun. Ngagunakeun modeu anyar, anjeun tiasa ngonpigurasikeun analyzer pikeun pariksa commits sarta narik requests. Tulisan ieu bakal nunjukkeun anjeun kumaha nyetél daptar daptar file proyék GitHub dina sistem CI (Continuous Integration) populér sapertos Travis CI, Buddy sareng AppVeyor.

Modeu pariksa daptar file

PVS Studio mangrupakeun alat pikeun ngadeteksi kasalahan sarta potensi kerentanan dina kode sumber program ditulis dina C, C ++, C # jeung Java. Gawéna dina sistem 64-bit dina Windows, Linux jeung macOS.

Versi PVS-Studio 7.04 pikeun Linux sareng macOS gaduh mode pikeun mariksa daptar file sumber. Ieu lumaku pikeun proyék-proyék anu ngawangun sistem ngamungkinkeun anjeun ngahasilkeun file compile_commands.json. Diperlukeun pikeun analisa ékstrak inpormasi ngeunaan kompilasi file anu ditangtukeun. Upami sistem ngawangun anjeun henteu ngadukung ngahasilkeun file compile_commands.json, anjeun tiasa nyobian ngahasilkeun file sapertos nganggo utilitas. Bear.

Ogé, modus mariksa daptar file bisa dipaké babarengan jeung strace renik ngajalankeun compiler (pvs-studio-analyzer trace). Jang ngalampahkeun ieu, anjeun mimitina kedah ngalaksanakeun konstruksi pinuh ku proyék sareng ngalacak éta supados analisa ngumpulkeun inpormasi lengkep ngeunaan parameter kompilasi sadaya file anu dipariksa.

Nanging, pilihan ieu ngagaduhan kalemahan anu signifikan - anjeun kedah kedah ngalaksanakeun ngalacak konstruksi pinuh ku sadayana proyék dina unggal peluncuran, anu nyalira bertentangan sareng ideu cek komitmen gancang. Atanapi, upami anjeun nyéépkeun hasil nyukcruk sorangan, peluncuran analisa anu salajengna tiasa janten teu lengkep upami struktur katergantungan file sumber robih saatos dilacak (contona, #include énggal ditambah kana salah sahiji file sumber).

Ku alatan éta, kami henteu nyarankeun ngagunakeun modeu pariksa daptar file sareng log jejak pikeun pariksa commits atanapi pull requests. Bisi anjeun tiasa ngalakukeun pangwangunan tambahan nalika mariksa komitmen, pertimbangkeun ngagunakeun modeu analisis incremental.

Daptar file sumber pikeun analisa disimpen kana file téks sareng dikirimkeun ka analisa nganggo parameter -S:

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

Berkas ieu netepkeun jalur relatif atanapi mutlak kana file, sareng unggal file énggal kedah aya dina jalur énggal. Diijinkeun pikeun netepkeun henteu ngan ukur nami file pikeun dianalisis, tapi ogé sababaraha téks. Parser bakal ningali yén ieu sanés file sareng bakal malire jalur. Ieu bisa jadi mangpaat pikeun commenting lamun file dieusian sacara manual. Sanajan kitu, mindeng daptar file bakal dihasilkeun salila CI parsing, contona file ti commit atawa pamundut tarikan.

Ayeuna, nganggo modeu ieu, anjeun tiasa gancang nguji kode anyar sateuacan asup kana cabang pangembangan utama. Supados sistem verifikasi ngaréaksikeun kana peringatan analis, utilitas plog-converter bandéra ditambahkeun --nunjukkeun-warning:

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

Kalayan bandéra ieu, konvérsi bakal ngabalikeun kode anu henteu nol upami aya peringatan dina laporan analisa. Ngagunakeun kodeu balik, anjeun tiasa meungpeuk hiji hook precommit, bunuh atawa narik pamundut, sarta nembongkeun laporan analyzer dihasilkeun dina layar, babagi atawa ngirim ku mail.

Catetan. Pertama kali anjeun ngamimitian analisa daptar file, sakabéh proyék bakal dianalisis, sabab analisa kedah ngahasilkeun file gumantungna file sumber proyék dina file header. Ieu mangrupikeun fitur parsing file C sareng C ++. Dina mangsa nu bakal datang, file kagumantungan bisa sindangan sarta eta bakal diropéa otomatis ku analyzer nu. Kauntungannana mariksa commits nalika ngagunakeun modeu pariksa filelist leuwih ngagunakeun mode parsing Incremental nyaeta ngan éta file perlu sindangan, teu file objék.

Prinsip umum analisis pamundut tarikan

Analisis sakabéh proyék nyokot loba waktu, jadi masuk akal pikeun pariksa ngan sababaraha bagian tina eta. Masalahna nyaéta anjeun kedah misahkeun file énggal tina sesa file proyék.

Pertimbangkeun conto tangkal komit sareng dua cabang:

Analisis komitmen sareng tarik pamundut di Travis CI, Buddy sareng AppVeyor nganggo PVS-Studio

Hayu urang pura-pura yén komitmen A1 ngandung jumlah cukup badag kode nu geus dipariksa. A saeutik saméméhna urang nyieun cabang ti commit A1 sareng ngarobih sababaraha file.

Tangtu, anjeun noticed nu sanggeus A1 aya dua deui komitmen, tapi ieu ogé ngahijikeun cabang anu sanés, sabab kami henteu komitmen ngawasaan. Sareng ayeuna waktosna parantos sumping hotfix siap. Ku alatan éta, pamundut tarikan mucunghul pikeun ngahiji B3 и A3.

Tangtosna, anjeun tiasa pariksa sadayana hasil ngahijikeunana, tapi ieu bakal panjang teuing sareng teu leres, sabab ngan ukur sababaraha file anu dirobih. Ku sabab éta, langkung éfisién pikeun nganalisis ngan ukur anu dirobih.

Jang ngalampahkeun ieu, urang kéngingkeun bédana antara cabang-cabang, anu aya dina KEPALA cabang anu urang badé ngahijikeun kana master:

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

$MERGE_BASE urang bakal mertimbangkeun di jéntré engké. Kanyataanna nyaéta henteu unggal jasa CI nyayogikeun inpormasi anu dipikabutuh ngeunaan dasar pikeun ngahiji, janten unggal waktos anjeun kedah gaduh cara énggal pikeun nyandak data ieu. Ieu bakal diwincik di handap dina unggal jasa wéb anu dijelaskeun.

Janten, urang ngagaduhan bédana antara cabang, atanapi langkungna, daptar nami file anu parantos dirobih. Ayeuna urang kedah masihan file .pvs-pr.list (urang dialihkeun kaluaran di luhur ka dinya) ka analyzer:

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

Saatos analisa, urang kedah ngarobih file log (PVS-Studio.log) kana format anu tiasa dibaca:

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

Paréntah ieu bakal daptar kasalahan dina stderr (standar kasalahan kaluaran stream).

Ngan di dieu urang kedah henteu ngan ukur ningalikeun kasalahan, tapi ogé nginpokeun jasa kami pikeun ngarakit sareng nguji ngeunaan ayana masalah. Jang ngalampahkeun ieu, hiji bandéra ditambahkeun kana converter nu -W (--nunjukkeun-warning). Lamun aya sahanteuna hiji warning analyzer, kodeu balik ti utiliti plog-converter bakal robah jadi 2, anu dina gilirannana bakal ngabéjaan jasa CI nu aya kasalahan poténsial dina file pamundut tarikan.

Travis C.I.

Konfigurasi dilakukeun dina bentuk file .travis.yml. Pikeun genah, kuring mamatahan anjeun nempatkeun sadayana dina skrip bash anu misah sareng fungsi anu bakal disebat tina file .travis.yml (bash scriptname.sh function_name).

Urang bakal nambahan kodeu diperlukeun pikeun naskah on bash, sangkan meunang leuwih fungsionalitas. Dina bagian masang hayu urang nulis kieu:

install:
  - bash .travis.sh travis_install

Upami anjeun ngagaduhan petunjuk, anjeun tiasa ngalihkeunana kana naskah ku cara ngahapus tanda hubung.

Hayu urang muka file .travis.sh sareng tambahkeun setelan analis kana fungsina 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 
}

Ayeuna hayu urang tambahkeun kana bagian naskah ngajalankeun analisis:

script:
  - bash .travis.sh travis_script

Sareng dina skrip 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
}

Kode ieu kedah dijalankeun saatos proyék diwangun, contona, upami anjeun ngagaduhan ngawangun CMake:

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

Éta bakal katingali sapertos kieu:

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
}

Anjeun meureun geus noticed variabel lingkungan dieusian. $TRAVIS_PULL_REQUEST и $TRAVIS_BRANCH. Travis CI nyatakeun aranjeunna nyalira:

  • $TRAVIS_PULL_REQUEST nyimpen angka pamundut tarikan, atawa palsulamun éta cabang normal;
  • $TRAVIS_REPO_SLUG nyimpen nami Repository proyék.

Algoritma fungsi ieu:

Analisis komitmen sareng tarik pamundut di Travis CI, Buddy sareng AppVeyor nganggo PVS-Studio
Travis CI ngaréspon kana kodeu balik, ku kituna ayana peringatan bakal nyarioskeun jasa pikeun bendera komitmen salaku buggy.

Hayu urang ningal langkung caket kana garis kode ieu:

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

Nyatana nyaéta Travis CI sacara otomatis ngahijikeun cabang nalika analisa paménta tarik:

Analisis komitmen sareng tarik pamundut di Travis CI, Buddy sareng AppVeyor nganggo PVS-Studio
Ku kituna, urang analisa A4teu B3->A3. Kusabab fitur ieu, urang kudu ngitung bédana tina А3, nu ngan luhureun cabang ti asal.

Hiji detil penting tetep - cache dependensi file lulugu dina unit tarjamah disusun (*.c, *.cc, *.cpp, jsb). Analyzer ngitung katergantungan ieu dina mimitina dina modeu mariksa daptar file teras simpen dina diréktori .PVS-Studio. Travis CI ngidinan Anjeun pikeun cache polder, ku kituna urang bakal nyimpen data diréktori .PVS-Studio/:

cache:
  directories:
    - .PVS-Studio/

Kode ieu perlu ditambahkeun kana file .travis.yml. Diréktori ieu nyimpen rupa-rupa data nu dikumpulkeun sanggeus analisis, nu nyata bakal nyepetkeun ngajalankeun saterusna analisis daptar file atawa analisis incremental. Upami ieu henteu dilakukeun, maka analisa leres-leres bakal nganalisis sadaya file unggal waktos.

Buddy

Kawas Travis C.I., Buddy nyadiakeun kamampuhan pikeun ngawangun otomatis tur nguji proyék nu disimpen dina GitHub. Beda sareng Travis CI, éta dikonpigurasi dina antarmuka wéb (rojongan bash sayogi), janten henteu kedah nyimpen file konfigurasi dina proyék éta.

Anu mimiti, urang kedah nambihan tindakan énggal kana garis ngawangun:

Analisis komitmen sareng tarik pamundut di Travis CI, Buddy sareng AppVeyor nganggo PVS-Studio
Sebutkeun kompiler anu dianggo pikeun ngawangun proyék. Perhatikeun wadah docker anu dipasang dina kagiatan ieu. Contona, aya wadah husus pikeun GCC:

Analisis komitmen sareng tarik pamundut di Travis CI, Buddy sareng AppVeyor nganggo PVS-Studio
Ayeuna hayu urang pasang PVS-Studio sareng utilitas anu diperyogikeun:

Analisis komitmen sareng tarik pamundut di Travis CI, Buddy sareng AppVeyor nganggo PVS-Studio
Tambihkeun garis di handap ieu kana éditor:

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

Ayeuna hayu urang ka tab Run (ikon kahiji) sareng tambahkeun kodeu di handap ieu kana widang éditor anu saluyu:

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

Upami anjeun parantos maca bagian dina Travs-CI, maka kode ieu parantos wawuh ka anjeun, tapi ayeuna aya léngkah énggal:

Analisis komitmen sareng tarik pamundut di Travis CI, Buddy sareng AppVeyor nganggo PVS-Studio
Kanyataanna nyaéta ayeuna urang nganalisa sanés hasil tina ngahiji, tapi KEPALA cabang dimana pamenta tarik dilakukeun:

Analisis komitmen sareng tarik pamundut di Travis CI, Buddy sareng AppVeyor nganggo PVS-Studio
Janten urang dina komitmen kondisional B3 sarta kami kudu meunang bédana ti 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

Pikeun nangtoskeun A3 Hayu urang nganggo GitHub API:

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

Kami nganggo variabel di handap ieu anu disayogikeun ku Buddy:

  • $BUDDY_EXECUTION_PULL_REQEUST_NO - nomer pamundut tarik;
  • $BUDDY_REPO_SLUG - kombinasi nami pangguna sareng gudang (contona max / test).

Ayeuna hayu urang simpen parobihan nganggo tombol di handap, sareng aktipkeun analisa pamundut tarik:

Analisis komitmen sareng tarik pamundut di Travis CI, Buddy sareng AppVeyor nganggo PVS-Studio
Teu kawas Travis CI, urang teu kudu nangtukeun .pvs-studio pikeun cache, saprak Buddy otomatis caches sadaya file pikeun peluncuran saterusna. Ku alatan éta, hal panungtungan ditinggalkeun pikeun nyimpen login sarta sandi pikeun PVS-Studio di Buddy. Saatos nyimpen parobihan, urang bakal uih deui ka Pipeline. Urang kedah angkat ka netepkeun variabel sareng tambahkeun login sareng konci pikeun PVS-Studio:

Analisis komitmen sareng tarik pamundut di Travis CI, Buddy sareng AppVeyor nganggo PVS-Studio
Saatos éta, penampilan pamundut tarik atanapi komitmen énggal bakal memicu cek. Upami komitmen ngandung kasalahan, maka Buddy bakal nunjukkeun éta dina halaman pamundut tarik.

AppVeyor

Nyetél AppVeyor téh sarupa jeung Buddy, saprak sagalana kajadian dina panganteur web tur teu perlu pikeun nambahkeun hiji * .yml file ka Repository proyék.

Hayu urang ka tab Setélan dina tinjauan proyék:

Analisis komitmen sareng tarik pamundut di Travis CI, Buddy sareng AppVeyor nganggo PVS-Studio
Hayu urang gulung ka handap halaman ieu sareng aktipkeun nyimpen cache pikeun ngawangun pamundut tarik:

Analisis komitmen sareng tarik pamundut di Travis CI, Buddy sareng AppVeyor nganggo PVS-Studio
Ayeuna hayu urang angkat ka tab Lingkungan, dimana urang netepkeun gambar pikeun ngawangun sareng variabel lingkungan anu diperyogikeun:

Analisis komitmen sareng tarik pamundut di Travis CI, Buddy sareng AppVeyor nganggo PVS-Studio
Upami anjeun parantos maca bagian sateuacana, anjeun terang pisan kana dua variabel ieu - PVS_KEY и PVS_USERNAME. Upami henteu, hayu atuh ngingetkeun yén aranjeunna kedah pariksa lisénsi analis PVS-Studio. Dina mangsa nu bakal datang, urang bakal papanggih aranjeunna deui dina Aksara Bash.

Dina kaca nu sami di handap, tangtukeun folder pikeun cache:

Analisis komitmen sareng tarik pamundut di Travis CI, Buddy sareng AppVeyor nganggo PVS-Studio
Upami urang henteu ngalakukeun ieu, maka urang bakal nganalisis sadayana proyék tinimbang sababaraha file, tapi urang bakal nampi kaluaran dumasar kana file anu ditangtukeun. Ku alatan éta, hal anu penting pikeun nuliskeun ngaran diréktori bener.

Ayeuna waktuna pikeun nguji naskah. Buka tab Tests tur pilih Script:

Analisis komitmen sareng tarik pamundut di Travis CI, Buddy sareng AppVeyor nganggo PVS-Studio
Tempelkeun kodeu ieu kana formulir ieu:

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

Hayu urang nempo bagian handap kode:

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

Tugas rada spésifik tina nilai paréntah pwd kana variabel anu kedah nyimpen nilai standar ieu sigana aneh dina glance kahiji, kumaha oge, kuring bakal ngajelaskeun sagalana dina momen.

Nalika nyetél analisa di AppVeyor, kuring mendakan paripolah anu anéh pisan tina analisa. Di hiji sisi, sagalana jalan leres, tapi analisis teu dimimitian. Kuring spent loba waktu perhatikeun yén kami di / home / appveyor / projects / testcalc / diréktori, sarta analyzer yakin yén kami aya dina / milih / appveyor / ngawangun-agén /. Teras kuring sadar yén variabel $ PWD mangrupikeun bohong. Ku sabab kitu, kuring sacara manual ngamutahirkeun nilaina sateuacan ngamimitian analisa.

Teras sadayana, sapertos sateuacana:

Analisis komitmen sareng tarik pamundut di Travis CI, Buddy sareng AppVeyor nganggo PVS-Studio
Ayeuna pertimbangkeun snippet di handap ieu:

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

Di jerona, urang kéngingkeun bédana antara cabang anu dinyatakeun paménta tarik. Pikeun ieu urang peryogi variabel lingkungan di handap ieu:

  • $APPVEYOR_PULL_REQUEST_NUMBER - nomer pamundut tarik;
  • $APPVEYOR_REPO_NAME - ngaran pamaké sarta gudang proyék.

kacindekan

Tangtosna, kami henteu nganggap sadaya jasa integrasi kontinyu anu mungkin, tapi aranjeunna sadayana gaduh spésifikasi padamelan anu sami. Iwal cache, unggal jasa nyieun sorangan "sapédah", jadi sagalana salawasna béda.

Di mana waé, sapertos di Travis-CI, sababaraha garis kode sareng cache tiasa dianggo sacara sampurna; wae, sakumaha dina AppVeyor, Anjeun ngan perlu nangtukeun folder dina setélan; tapi wae anjeun kudu nyieun konci unik tur coba ngayakinkeun sistem pikeun masihan anjeun kasempetan pikeun nimpa sempalan sindangan. Kukituna, upami anjeun hoyong nyetél analisa pamundut tarik dina jasa integrasi kontinyu anu henteu dibahas di luhur, teras pastikeun heula anjeun moal ngagaduhan masalah sareng cache.

Nuhun kana perhatosanana. Lamun hal teu hasil, teras ngarasa Luncat ka nulis ka kami di ngadukung. Kami bakal mamatahan sareng ngabantosan.

Analisis komitmen sareng tarik pamundut di Travis CI, Buddy sareng AppVeyor nganggo PVS-Studio

Upami anjeun hoyong ngabagikeun tulisan ieu ka pamiarsa anu nyarios basa Inggris, mangga nganggo tautan tarjamahan: Maxim Zvyagintsev. Analisis komitmen sareng tarik pamundut di Travis CI, Buddy sareng AppVeyor nganggo PVS-Studio.

sumber: www.habr.com

Tambahkeun komentar