PVS-ஸ்டுடியோவைப் பயன்படுத்தி டிராவிஸ் CI, Buddy மற்றும் AppVeyor இல் கமிட்கள் மற்றும் இழுக்க கோரிக்கைகளின் பகுப்பாய்வு

PVS-ஸ்டுடியோவைப் பயன்படுத்தி டிராவிஸ் CI, Buddy மற்றும் AppVeyor இல் கமிட்கள் மற்றும் இழுக்க கோரிக்கைகளின் பகுப்பாய்வு
லினக்ஸ் மற்றும் மேகோஸில் உள்ள சி மற்றும் சி++ மொழிகளுக்கான பிவிஎஸ்-ஸ்டுடியோ பகுப்பாய்வியில், பதிப்பு 7.04 இலிருந்து தொடங்கி, குறிப்பிட்ட கோப்புகளின் பட்டியலைச் சரிபார்க்க ஒரு சோதனை விருப்பம் தோன்றியது. புதிய பயன்முறையைப் பயன்படுத்தி, கமிட்களைச் சரிபார்க்கவும் கோரிக்கைகளை இழுக்கவும் பகுப்பாய்வியை உள்ளமைக்கலாம். டிராவிஸ் CI, Buddy மற்றும் AppVeyor போன்ற பிரபலமான CI (தொடர்ச்சியான ஒருங்கிணைப்பு) அமைப்புகளில் GitHub திட்டத்தின் மாற்றப்பட்ட கோப்புகளின் பட்டியலை எவ்வாறு சரிபார்ப்பது என்பதை இந்தக் கட்டுரை உங்களுக்குச் சொல்லும்.

கோப்பு பட்டியல் சரிபார்ப்பு முறை

பி.வி.எஸ்-ஸ்டுடியோ C, C++, C# மற்றும் Java இல் எழுதப்பட்ட நிரல்களின் மூலக் குறியீட்டில் உள்ள பிழைகள் மற்றும் சாத்தியமான பாதிப்புகளைக் கண்டறிவதற்கான ஒரு கருவியாகும். Windows, Linux மற்றும் macOS இல் 64-பிட் கணினிகளில் வேலை செய்கிறது.

Linux மற்றும் macOSக்கான PVS-Studio 7.04 பதிப்பில், மூலக் கோப்புகளின் பட்டியலைச் சரிபார்க்கும் முறை தோன்றியது. பில்ட் சிஸ்டம் ஒரு கோப்பை உருவாக்க உங்களை அனுமதிக்கும் திட்டங்களுக்கு இது வேலை செய்கிறது compile_commands.json. குறிப்பிட்ட கோப்புகளின் தொகுப்பைப் பற்றிய தகவலைப் பிரித்தெடுக்க பகுப்பாய்விக்கு இது தேவைப்படுகிறது. உங்கள் பில்ட் சிஸ்டம் compile_commands.json கோப்பை உருவாக்குவதை ஆதரிக்கவில்லை எனில், பயன்பாட்டைப் பயன்படுத்தி அத்தகைய கோப்பை உருவாக்க முயற்சி செய்யலாம். தாங்க.

மேலும், கம்பைலர் லான்ச்களின் (pvs-studio-analyzer ட்ரேஸ்) ஸ்ட்ரேஸ் ட்ரேஸ் லாக் உடன் கோப்புப் பட்டியல் சரிபார்ப்பு பயன்முறையைப் பயன்படுத்தலாம். இதைச் செய்ய, நீங்கள் முதலில் திட்டத்தின் முழு கட்டமைப்பைச் செய்து அதைக் கண்காணிக்க வேண்டும், இதன் மூலம் சரிபார்க்கப்படும் அனைத்து கோப்புகளின் தொகுப்பு அளவுருக்கள் பற்றிய முழுமையான தகவலை பகுப்பாய்வி சேகரிக்கும்.

இருப்பினும், இந்த விருப்பம் ஒரு குறிப்பிடத்தக்க குறைபாட்டைக் கொண்டுள்ளது - ஒவ்வொரு முறையும் நீங்கள் முழு திட்டத்தையும் முழுமையாக உருவாக்க வேண்டும், இது ஒரு உறுதிமொழியை விரைவாகச் சரிபார்க்கும் யோசனைக்கு முரணானது. அல்லது, நீங்கள் ட்ரேஸ் முடிவையே தேக்ககப்படுத்தினால், மூலக் கோப்புகளின் சார்பு அமைப்பு ட்ரேஸுக்குப் பிறகு மாறினால், பகுப்பாய்வியின் அடுத்தடுத்த ரன்கள் முழுமையடையாமல் இருக்கலாம் (உதாரணமாக, மூலக் கோப்புகளில் ஒன்றில் புதிய #include சேர்க்கப்பட்டது).

எனவே, கமிட்களைச் சரிபார்க்க அல்லது கோரிக்கைகளை இழுக்க ட்ரேஸ் லாக் உடன் கோப்பு பட்டியல் சரிபார்ப்பு பயன்முறையைப் பயன்படுத்த நாங்கள் பரிந்துரைக்கவில்லை. ஒரு உறுதிப்பாட்டை சரிபார்க்கும் போது நீங்கள் ஒரு கூடுதல் உருவாக்கத்தை செய்ய முடியும் என்றால், பயன்முறையைப் பயன்படுத்தவும் அதிகரிக்கும் பகுப்பாய்வு.

பகுப்பாய்வுக்கான மூலக் கோப்புகளின் பட்டியல் உரைக் கோப்பில் சேமிக்கப்பட்டு, அளவுருவைப் பயன்படுத்தி பகுப்பாய்விக்கு அனுப்பப்படும் -S:

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

இந்தக் கோப்பு கோப்புகளுக்கான தொடர்புடைய அல்லது முழுமையான பாதைகளைக் குறிப்பிடுகிறது, மேலும் ஒவ்வொரு புதிய கோப்பும் ஒரு புதிய வரியில் இருக்க வேண்டும். பகுப்பாய்விற்கான கோப்பு பெயர்களை மட்டுமல்ல, பல்வேறு உரைகளையும் குறிப்பிடுவது ஏற்றுக்கொள்ளத்தக்கது. இது ஒரு கோப்பு அல்ல என்பதை பகுப்பாய்வி பார்க்கும் மற்றும் வரியை புறக்கணிக்கும். கோப்புகள் கைமுறையாகக் குறிப்பிடப்பட்டால் கருத்துத் தெரிவிக்க இது பயனுள்ளதாக இருக்கும். இருப்பினும், பெரும்பாலும் CI இல் பகுப்பாய்வின் போது கோப்புகளின் பட்டியல் உருவாக்கப்படும், எடுத்துக்காட்டாக, இவை உறுதியான அல்லது இழுக்கும் கோரிக்கையின் கோப்புகளாக இருக்கலாம்.

இப்போது, ​​​​இந்த பயன்முறையைப் பயன்படுத்தி, புதிய குறியீட்டை முக்கிய மேம்பாட்டுக் கிளைக்குள் வருவதற்கு முன்பு நீங்கள் விரைவாகச் சரிபார்க்கலாம். பகுப்பாய்வி எச்சரிக்கைகளுக்கு ஸ்கேனிங் அமைப்பு பதிலளிக்கிறது என்பதை உறுதிப்படுத்த, பயன்பாடு plog-converter கொடி சேர்க்கப்பட்டது --குறிப்பு-எச்சரிக்கைகள்:

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

இந்தக் கொடியுடன், பகுப்பாய்வி அறிக்கையில் எச்சரிக்கைகள் இருந்தால், மாற்றி பூஜ்ஜியமற்ற குறியீட்டை வழங்கும். ரிட்டர்ன் குறியீட்டைப் பயன்படுத்தி, நீங்கள் முன்கூட்டிய ஹூக்கைத் தடுக்கலாம், உறுதியளிக்கலாம் அல்லது கோரிக்கையை இழுக்கலாம், மேலும் உருவாக்கப்பட்ட பகுப்பாய்வி அறிக்கையை மின்னஞ்சல் மூலம் காட்டலாம், பகிரலாம் அல்லது அனுப்பலாம்.

குறிப்பு. நீங்கள் முதலில் கோப்புகளின் பட்டியலை பகுப்பாய்வு செய்யத் தொடங்கும் போது, ​​முழு திட்டமும் பகுப்பாய்வு செய்யப்படும், ஏனெனில் பகுப்பாய்வி தலைப்பு கோப்புகளில் திட்ட மூல கோப்புகளின் சார்புகளின் கோப்பை உருவாக்க வேண்டும். இது C மற்றும் C++ கோப்புகளை பகுப்பாய்வு செய்யும் அம்சமாகும். எதிர்காலத்தில், சார்பு கோப்பு தற்காலிக சேமிப்பில் வைக்கப்படலாம் மற்றும் அது பகுப்பாய்வி மூலம் தானாகவே புதுப்பிக்கப்படும். அதிகரிக்கும் பகுப்பாய்வு பயன்முறையைப் பயன்படுத்துவதை விட கோப்பு பட்டியல் சரிபார்ப்பு பயன்முறையைப் பயன்படுத்தும் போது உறுதிகளைச் சரிபார்ப்பதன் நன்மை என்னவென்றால், நீங்கள் அந்தக் கோப்பை மட்டுமே கேச் செய்ய வேண்டும், பொருள் கோப்புகளை அல்ல.

இழுக்கும் கோரிக்கை பகுப்பாய்வின் பொதுவான கொள்கைகள்

முழு திட்டத்தையும் பகுப்பாய்வு செய்வதற்கு நிறைய நேரம் எடுக்கும், எனவே அதன் ஒரு குறிப்பிட்ட பகுதியை மட்டும் சரிபார்க்க அர்த்தமுள்ளதாக இருக்கிறது. பிரச்சனை என்னவென்றால், நீங்கள் புதிய கோப்புகளை மற்ற திட்ட கோப்புகளிலிருந்து பிரிக்க வேண்டும்.

இரண்டு கிளைகளைக் கொண்ட ஒரு உறுதி மரத்தின் உதாரணத்தைப் பார்ப்போம்:

PVS-ஸ்டுடியோவைப் பயன்படுத்தி டிராவிஸ் CI, Buddy மற்றும் AppVeyor இல் கமிட்கள் மற்றும் இழுக்க கோரிக்கைகளின் பகுப்பாய்வு

அந்த உறுதிமொழியை கற்பனை செய்வோம் A1 ஏற்கனவே சோதனை செய்யப்பட்ட ஒரு பெரிய அளவிலான குறியீடு உள்ளது. சிறிது முன்னதாக நாங்கள் கமிட்டியிலிருந்து ஒரு கிளையை உருவாக்கினோம் A1 மற்றும் சில கோப்புகளை மாற்றியது.

நிச்சயமாக, நீங்கள் அதை பிறகு கவனித்தீர்கள் A1 இன்னும் இரண்டு கமிட்கள் நடந்தன, ஆனால் இவை மற்ற கிளைகளின் இணைப்புகளாகும், ஏனென்றால் நாங்கள் உறுதியளிக்கவில்லை மாஸ்டர். இப்போது நேரம் வந்துவிட்டது லேசர் தயார். அதனால்தான் இணைப்புக்கான இழுபறி கோரிக்கை தோன்றியது B3 и A3.

நிச்சயமாக, அவற்றின் இணைப்பின் முழு முடிவையும் சரிபார்க்க முடியும், ஆனால் இது மிகவும் நேரத்தை எடுத்துக்கொள்ளும் மற்றும் நியாயமற்றதாக இருக்கும், ஏனெனில் சில கோப்புகள் மட்டுமே மாற்றப்பட்டுள்ளன. எனவே, மாற்றப்பட்டவற்றை மட்டுமே பகுப்பாய்வு செய்வது மிகவும் திறமையானது.

இதைச் செய்ய, கிளைகளுக்கு இடையிலான வேறுபாட்டைப் பெறுகிறோம், நாங்கள் மாஸ்டராக ஒன்றிணைக்க விரும்பும் கிளையின் தலையில் இருப்பது:

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

$MERGE_BASE அதைப் பற்றி பின்னர் விரிவாகப் பார்ப்போம். உண்மை என்னவென்றால், ஒவ்வொரு சிஐ சேவையும் ஒன்றிணைப்பதற்கான தரவுத்தளத்தைப் பற்றிய தேவையான தகவல்களை வழங்குவதில்லை, எனவே ஒவ்வொரு முறையும் இந்தத் தரவைப் பெற புதிய வழிகளைக் கொண்டு வர வேண்டும். இது விவரிக்கப்பட்டுள்ள ஒவ்வொரு இணைய சேவைகளிலும் கீழே விரிவாக விவரிக்கப்படும்.

எனவே, கிளைகளுக்கு இடையிலான வித்தியாசம் அல்லது மாற்றப்பட்ட கோப்பு பெயர்களின் பட்டியல் எங்களுக்கு கிடைத்தது. இப்போது நாம் கோப்பை கொடுக்க வேண்டும் .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 (--குறிப்பு-எச்சரிக்கைகள்) குறைந்தபட்சம் ஒரு பகுப்பாய்வி எச்சரிக்கை இருந்தால், பயன்பாட்டுத் திரும்பக் குறியீடு plog-converter 2 ஆக மாறும், இது இழுக்கும் கோரிக்கை கோப்புகளில் சாத்தியமான பிழைகள் இருப்பதைப் பற்றி CI சேவைக்கு தெரிவிக்கும்.

டிராவிஸ் சி.ஐ.

கட்டமைப்பு ஒரு கோப்பாக செய்யப்படுகிறது .travis.yml. வசதிக்காக, கோப்பிலிருந்து அழைக்கப்படும் செயல்பாடுகளுடன் அனைத்தையும் தனித்தனி பாஷ் ஸ்கிரிப்ட்டில் வைக்குமாறு நான் உங்களுக்கு அறிவுறுத்துகிறேன். .travis.yml (பாஷ் 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

மற்றும் பாஷ் ஸ்கிரிப்ட்டில்:

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_PULL_REQUEST இழுக்கும் கோரிக்கை எண்ணை சேமிக்கிறது அல்லது தவறான, இது வழக்கமான கிளையாக இருந்தால்;
  • $TRAVIS_REPO_SLUG திட்ட களஞ்சியத்தின் பெயரை சேமிக்கிறது.

இந்த செயல்பாட்டிற்கான அல்காரிதம்:

PVS-ஸ்டுடியோவைப் பயன்படுத்தி டிராவிஸ் CI, Buddy மற்றும் AppVeyor இல் கமிட்கள் மற்றும் இழுக்க கோரிக்கைகளின் பகுப்பாய்வு
டிராவிஸ் CI திரும்பக் குறியீடுகளுக்குப் பதிலளிக்கிறது, எனவே எச்சரிக்கைகள் இருப்பதால், அந்த உறுதிமொழியை பிழைகள் உள்ளதாகக் குறிக்க சேவையைச் சொல்லும்.

இப்போது இந்த குறியீட்டு வரியை இன்னும் விரிவாகப் பார்ப்போம்:

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

உண்மை என்னவென்றால், இழுக்கும் கோரிக்கையை பகுப்பாய்வு செய்யும் போது டிராவிஸ் CI தானாகவே கிளைகளை ஒன்றிணைக்கிறது:

PVS-ஸ்டுடியோவைப் பயன்படுத்தி டிராவிஸ் CI, Buddy மற்றும் AppVeyor இல் கமிட்கள் மற்றும் இழுக்க கோரிக்கைகளின் பகுப்பாய்வு
எனவே நாங்கள் பகுப்பாய்வு செய்கிறோம் A4மற்றும் இல்லை B3->A3. இந்த அம்சத்தின் காரணமாக, வித்தியாசத்தை நாம் கணக்கிட வேண்டும் А3, இது துல்லியமாக கிளையின் மேற்பகுதியில் இருந்து தோற்றம்.

ஒரு முக்கியமான விவரம் மீதமுள்ளது - தொகுக்கப்பட்ட மொழிபெயர்ப்பு அலகுகளில் (*.c, *.cc, *.cpp, முதலியன) தலைப்புக் கோப்புகளின் சார்புகளை தேக்ககப்படுத்துகிறது. பகுப்பாய்வி இந்த சார்புகளை முதலில் கோப்புகளின் பட்டியலைச் சரிபார்க்கும் முறையில் தொடங்கும் போது கணக்கிடுகிறது, பின்னர் அவற்றை .PVS-Studio கோப்பகத்தில் சேமிக்கிறது. டிராவிஸ் சிஐ கோப்புறைகளை கேச் செய்ய உங்களை அனுமதிக்கிறது, எனவே கோப்பகத் தரவைச் சேமிப்போம் .பிவிஎஸ்-ஸ்டுடியோ/:

cache:
  directories:
    - .PVS-Studio/

இந்தக் குறியீடு கோப்பில் சேர்க்கப்பட வேண்டும் .travis.yml. இந்த அடைவு பகுப்பாய்வுக்குப் பிறகு சேகரிக்கப்பட்ட பல்வேறு தரவைச் சேமிக்கிறது, இது கோப்பு பட்டியல் பகுப்பாய்வு அல்லது அதிகரிக்கும் பகுப்பாய்வின் அடுத்தடுத்த ரன்களை கணிசமாக துரிதப்படுத்தும். இது செய்யப்படாவிட்டால், பகுப்பாய்வி ஒவ்வொரு முறையும் எல்லா கோப்புகளையும் பகுப்பாய்வு செய்யும்.

படி

டிராவிஸ் சிஐ போல, படி GitHub இல் சேமிக்கப்பட்ட திட்டங்களை தானாக உருவாக்க மற்றும் சோதிக்கும் திறனை வழங்குகிறது. டிராவிஸ் CI போலல்லாமல், இது வலை இடைமுகத்தில் கட்டமைக்கப்பட்டுள்ளது (பாஷ் ஆதரவு உள்ளது), எனவே திட்டத்தில் உள்ளமைவு கோப்புகளை சேமிக்க வேண்டிய அவசியமில்லை.

முதலில், சட்டசபை வரிசையில் ஒரு புதிய செயலைச் சேர்க்க வேண்டும்:

PVS-ஸ்டுடியோவைப் பயன்படுத்தி டிராவிஸ் CI, Buddy மற்றும் AppVeyor இல் கமிட்கள் மற்றும் இழுக்க கோரிக்கைகளின் பகுப்பாய்வு
திட்டத்தை உருவாக்கப் பயன்படுத்தப்பட்ட கம்பைலரைக் குறிப்பிடுவோம். இந்த செயலில் நிறுவப்பட்ட டாக்கர் கொள்கலனைக் கவனியுங்கள். எடுத்துக்காட்டாக, GCC க்காக ஒரு சிறப்பு கொள்கலன் உள்ளது:

PVS-ஸ்டுடியோவைப் பயன்படுத்தி டிராவிஸ் CI, Buddy மற்றும் AppVeyor இல் கமிட்கள் மற்றும் இழுக்க கோரிக்கைகளின் பகுப்பாய்வு
இப்போது PVS-Studio மற்றும் தேவையான பயன்பாடுகளை நிறுவுவோம்:

PVS-ஸ்டுடியோவைப் பயன்படுத்தி டிராவிஸ் 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

இப்போது ரன் தாவலுக்கு (முதல் ஐகான்) சென்று பின்வரும் குறியீட்டை தொடர்புடைய எடிட்டர் புலத்தில் சேர்ப்போம்:

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-ஸ்டுடியோவைப் பயன்படுத்தி டிராவிஸ் CI, Buddy மற்றும் AppVeyor இல் கமிட்கள் மற்றும் இழுக்க கோரிக்கைகளின் பகுப்பாய்வு
உண்மை என்னவென்றால், இப்போது நாம் இணைப்பின் முடிவை அல்ல, ஆனால் இழுக்க கோரிக்கை செய்யப்பட்ட கிளையின் தலைமையை பகுப்பாய்வு செய்கிறோம்:

PVS-ஸ்டுடியோவைப் பயன்படுத்தி டிராவிஸ் 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-ஸ்டுடியோவைப் பயன்படுத்தி டிராவிஸ் CI, Buddy மற்றும் AppVeyor இல் கமிட்கள் மற்றும் இழுக்க கோரிக்கைகளின் பகுப்பாய்வு
டிராவிஸ் சிஐ போலல்லாமல், நாங்கள் குறிப்பிட தேவையில்லை .pvs-studio கேச்சிங்கிற்காக, பட்டி தானாகவே அனைத்து கோப்புகளையும் அடுத்தடுத்த துவக்கங்களுக்கு தேக்ககப்படுத்துகிறது. எனவே, பிவிஎஸ்-ஸ்டுடியோவிற்கான உள்நுழைவு மற்றும் கடவுச்சொல்லை பட்டியில் சேமிப்பதே கடைசியாக உள்ளது. மாற்றங்களைச் சேமித்த பிறகு, நாங்கள் மீண்டும் பைப்லைனுக்கு அழைத்துச் செல்லப்படுவோம். மாறிகளை அமைப்பதற்கும், PVS-ஸ்டுடியோவுக்கான உள்நுழைவு மற்றும் விசையைச் சேர்ப்பதற்கும் நாம் செல்ல வேண்டும்:

PVS-ஸ்டுடியோவைப் பயன்படுத்தி டிராவிஸ் CI, Buddy மற்றும் AppVeyor இல் கமிட்கள் மற்றும் இழுக்க கோரிக்கைகளின் பகுப்பாய்வு
இதற்குப் பிறகு, புதிய இழுத்தல் கோரிக்கை அல்லது உறுதியின் தோற்றம் மதிப்பாய்வைத் தூண்டும். ஒரு உறுதிமொழியில் பிழைகள் இருந்தால், இழுத்தல் கோரிக்கைப் பக்கத்தில் பட்டி இதைக் குறிப்பிடுவார்.

AppVeyor

AppVeyor ஐ அமைப்பது Buddy போன்றது, ஏனெனில் அனைத்தும் இணைய இடைமுகத்தில் நடக்கும் மற்றும் திட்ட களஞ்சியத்தில் *.yml கோப்பை சேர்க்க வேண்டிய அவசியமில்லை.

திட்ட மேலோட்டத்தில் உள்ள அமைப்புகள் தாவலுக்குச் செல்வோம்:

PVS-ஸ்டுடியோவைப் பயன்படுத்தி டிராவிஸ் CI, Buddy மற்றும் AppVeyor இல் கமிட்கள் மற்றும் இழுக்க கோரிக்கைகளின் பகுப்பாய்வு
இந்தப் பக்கத்தை கீழே ஸ்க்ரோல் செய்து, இழுக்கும் கோரிக்கைகளைச் சேகரிப்பதற்காக கேச் சேமிப்பை இயக்குவோம்:

PVS-ஸ்டுடியோவைப் பயன்படுத்தி டிராவிஸ் CI, Buddy மற்றும் AppVeyor இல் கமிட்கள் மற்றும் இழுக்க கோரிக்கைகளின் பகுப்பாய்வு
இப்போது சுற்றுச்சூழல் தாவலுக்குச் செல்வோம், அங்கு சட்டசபைக்கான படத்தையும் தேவையான சூழல் மாறிகளையும் குறிப்பிடுகிறோம்:

PVS-ஸ்டுடியோவைப் பயன்படுத்தி டிராவிஸ் CI, Buddy மற்றும் AppVeyor இல் கமிட்கள் மற்றும் இழுக்க கோரிக்கைகளின் பகுப்பாய்வு
நீங்கள் முந்தைய பகுதிகளைப் படித்திருந்தால், இந்த இரண்டு மாறிகள் உங்களுக்கு நன்கு தெரிந்திருக்கும் - PVS_KEY и PVS_USERNAME. இல்லையெனில், PVS-Studio பகுப்பாய்வியின் உரிமத்தைச் சரிபார்க்க வேண்டியது அவசியம் என்பதை நினைவூட்டுகிறேன். எதிர்காலத்தில் பாஷ் ஸ்கிரிப்ட்களில் அவற்றை மீண்டும் பார்ப்போம்.

கீழே உள்ள அதே பக்கத்தில், தேக்ககத்திற்கான கோப்புறையைக் குறிப்பிடுகிறோம்:

PVS-ஸ்டுடியோவைப் பயன்படுத்தி டிராவிஸ் CI, Buddy மற்றும் AppVeyor இல் கமிட்கள் மற்றும் இழுக்க கோரிக்கைகளின் பகுப்பாய்வு
நாங்கள் இதைச் செய்யாவிட்டால், இரண்டு கோப்புகளுக்குப் பதிலாக முழு திட்டத்தையும் பகுப்பாய்வு செய்வோம், ஆனால் குறிப்பிட்ட கோப்புகளிலிருந்து வெளியீட்டைப் பெறுவோம். எனவே, சரியான அடைவு பெயரை உள்ளிடுவது முக்கியம்.

இப்போது ஸ்கிரிப்டை சோதிக்க வேண்டிய நேரம் வந்துவிட்டது. சோதனைகள் தாவலைத் திறந்து ஸ்கிரிப்டைத் தேர்ந்தெடுக்கவும்:

PVS-ஸ்டுடியோவைப் பயன்படுத்தி டிராவிஸ் 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-ஸ்டுடியோவைப் பயன்படுத்தி டிராவிஸ் 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 - பயனர் பெயர் மற்றும் திட்ட களஞ்சியம்.

முடிவுக்கு

நிச்சயமாக, சாத்தியமான தொடர்ச்சியான ஒருங்கிணைப்பு சேவைகள் அனைத்தையும் நாங்கள் கருத்தில் கொள்ளவில்லை, இருப்பினும், அவை அனைத்தும் ஒன்றுக்கொன்று மிகவும் ஒத்த செயல்பாட்டு விவரக்குறிப்புகளைக் கொண்டுள்ளன. கேச்சிங் தவிர, ஒவ்வொரு சேவையும் அதன் சொந்த "சைக்கிள்" செய்கிறது, எனவே எல்லாம் எப்போதும் வித்தியாசமாக இருக்கும்.

எங்காவது, டிராவிஸ்-சிஐ போன்ற, குறியீடு மற்றும் கேச்சிங் ஒரு ஜோடி கோடுகள் குறைபாடற்ற வேலை; எங்காவது, AppVeyor இல் உள்ளதைப் போல, நீங்கள் அமைப்புகளில் கோப்புறையைக் குறிப்பிட வேண்டும்; ஆனால் எங்காவது நீங்கள் தனிப்பட்ட விசைகளை உருவாக்க வேண்டும் மற்றும் தற்காலிக சேமிப்பில் உள்ள பகுதியை மேலெழுத உங்களுக்கு வாய்ப்பளிக்க கணினியை நம்ப வைக்க முயற்சிக்க வேண்டும். எனவே, மேலே விவாதிக்கப்படாத தொடர்ச்சியான ஒருங்கிணைப்பு சேவையில் இழுக்கும் கோரிக்கைகளின் பகுப்பாய்வை நீங்கள் அமைக்க விரும்பினால், கேச்சிங்கில் உங்களுக்கு சிக்கல்கள் இருக்காது என்பதை முதலில் உறுதிப்படுத்தவும்.

உங்கள் கவனத்திற்கு நன்றி. ஏதாவது வேலை செய்யவில்லை என்றால், எங்களுக்கு எழுத தயங்க வேண்டாம் ஆதரவு. நாங்கள் ஆலோசனை மற்றும் உதவுவோம்.

PVS-ஸ்டுடியோவைப் பயன்படுத்தி டிராவிஸ் CI, Buddy மற்றும் AppVeyor இல் கமிட்கள் மற்றும் இழுக்க கோரிக்கைகளின் பகுப்பாய்வு

இந்தக் கட்டுரையை ஆங்கிலம் பேசும் பார்வையாளர்களுடன் பகிர்ந்து கொள்ள விரும்பினால், மொழிபெயர்ப்பு இணைப்பைப் பயன்படுத்தவும்: Maxim Zvyagintsev. PVS-ஸ்டுடியோவைப் பயன்படுத்தி டிராவிஸ் CI, Buddy மற்றும் AppVeyor இல் கமிட்கள் மற்றும் இழுக்க கோரிக்கைகளின் பகுப்பாய்வு.

ஆதாரம்: www.habr.com

கருத்தைச் சேர்