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 (Continuous Integration) පද්ධතිවල GitHub ව්‍යාපෘතියක වෙනස් කළ ගොනු ලැයිස්තුවක් පරීක්ෂා කරන්නේ කෙසේදැයි මෙම ලිපිය ඔබට කියනු ඇත.

ගොනු ලැයිස්තුව පරීක්ෂා කිරීමේ මාදිලිය

පීවීඑස්-ස්ටුඩියෝ C, C++, C# සහ Java හි ලියා ඇති වැඩසටහන් වල මූල කේතයේ දෝෂ සහ විභව දුර්වලතා හඳුනාගැනීමේ මෙවලමකි. Windows, Linux සහ macOS මත 64-bit පද්ධති මත ක්‍රියා කරයි.

Linux සහ macOS සඳහා PVS-Studio 7.04 අනුවාදයේ, මූලාශ්‍ර ගොනු ලැයිස්තුව පරීක්ෂා කිරීමේ මාදිලිය දර්ශනය වී ඇත. මෙය ඔබට ගොනුවක් උත්පාදනය කිරීමට ඉඩ දෙන ව්‍යාපෘති සඳහා ක්‍රියා කරයි compile_commands.json. විශ්ලේෂකය විසින් නිශ්චිත ගොනු සම්පාදනය කිරීම පිළිබඳ තොරතුරු උකහා ගැනීම සඳහා අවශ්ය වේ. ඔබේ ගොඩනැගීමේ පද්ධතිය compile_commands.json ගොනුව ජනනය කිරීමට සහාය නොදක්වන්නේ නම්, ඔබට උපයෝගීතාව භාවිතයෙන් එවැනි ගොනුවක් උත්පාදනය කිරීමට උත්සාහ කළ හැක. වලහා.

තවද, ගොනු ලැයිස්තු පිරික්සුම් මාදිලිය compiler launches (pvs-studio-analyzer trace) හි ස්ට්‍රේස් ට්‍රේස් ලොගය සමඟ එක්ව භාවිතා කළ හැක. මෙය සිදු කිරීම සඳහා, ඔබ මුලින්ම ව්‍යාපෘතියේ සම්පූර්ණ ගොඩනැගීමක් සිදු කර එය ලුහුබැඳීමට අවශ්‍ය වනු ඇත, එවිට විශ්ලේෂකය පරීක්ෂා කරනු ලබන සියලුම ගොනු වල සම්පාදන පරාමිතීන් පිළිබඳ සම්පූර්ණ තොරතුරු රැස් කරයි.

කෙසේ වෙතත්, මෙම විකල්පය සැලකිය යුතු පසුබෑමක් ඇත - ඔබ එය ක්‍රියාත්මක කරන සෑම අවස්ථාවකම සම්පූර්ණ ව්‍යාපෘතියේ සම්පූර්ණ ගොඩනැගීමේ හෝඩුවාවක් සිදු කිරීමට ඔබට අවශ්‍ය වනු ඇත, එය කැපවීමක් ඉක්මනින් පරීක්ෂා කිරීමේ අදහසට පටහැනි වේ. එසේත් නැතිනම්, ඔබ ලුහුබැඳීමේ ප්‍රතිඵලයම හැඹිලිගත කරන්නේ නම්, සොයා ගැනීමෙන් පසුව මූලාශ්‍ර ගොනු වල පරායත්ත ව්‍යුහය වෙනස් වුවහොත් විශ්ලේෂකයේ පසුකාලීන ධාවනය අසම්පූර්ණ විය හැකිය (උදාහරණයක් ලෙස, මූලාශ්‍ර ගොනු වලින් එකකට නව #include එකක් එකතු වේ).

එබැවින්, කැපවීම් පරීක්ෂා කිරීමට හෝ ඉල්ලීම් ඇද ගැනීමට හෝඩුවාවක් ලොගය සමඟ ගොනු ලැයිස්තු පිරික්සුම් මාදිලිය භාවිතා කිරීම අපි නිර්දේශ නොකරමු. කැපවීමක් පරීක්ෂා කිරීමේදී ඔබට වර්ධක ගොඩනැගීමක් කළ හැකි නම්, මාදිලිය භාවිතා කිරීම සලකා බලන්න වර්ධක විශ්ලේෂණය.

විශ්ලේෂණය සඳහා මූලාශ්‍ර ගොනු ලැයිස්තුව පෙළ ගොනුවක සුරකින අතර පරාමිතිය භාවිතයෙන් විශ්ලේෂකය වෙත යවනු ලැබේ -S:

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

මෙම ගොනුව ගොනු සඳහා සාපේක්ෂ හෝ නිරපේක්ෂ මාර්ග සඳහන් කරයි, සහ සෑම නව ගොනුවක්ම නව රේඛාවක තිබිය යුතුය. විශ්ලේෂණය සඳහා ගොනු නාම පමණක් නොව, විවිධ පෙළ ද නියම කිරීම පිළිගත හැකිය. විශ්ලේෂකය මෙය ගොනුවක් නොවන බව දකින අතර රේඛාව නොසලකා හරිනු ඇත. ගොනු අතින් නියම කර ඇත්නම් අදහස් දැක්වීමට මෙය ප්‍රයෝජනවත් විය හැක. කෙසේ වෙතත්, බොහෝ විට CI හි විශ්ලේෂණය අතරතුර ගොනු ලැයිස්තුවක් ජනනය වනු ඇත, උදාහරණයක් ලෙස, මේවා කැපවීමකින් හෝ අදින්න ඉල්ලීමකින් ගොනු විය හැක.

දැන්, මෙම මාදිලිය භාවිතා කරමින්, එය ප්‍රධාන සංවර්ධන ශාඛාවට ඇතුල් වීමට පෙර ඔබට ඉක්මනින් නව කේතය පරීක්ෂා කළ හැක. ස්කෑනිං පද්ධතිය විශ්ලේෂක අනතුරු ඇඟවීම් වලට ප්‍රතිචාර දක්වන බව සහතික කිරීම සඳහා, උපයෝගීතාව ප්ලොග්-පරිවර්තකය ධජය එකතු කරන ලදී --අනතුරු ඇඟවීම්:

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 සේවාවක්ම ඒකාබද්ධ කිරීම සඳහා දත්ත සමුදාය පිළිබඳ අවශ්‍ය තොරතුරු සපයන්නේ නැත, එබැවින් සෑම අවස්ථාවකම ඔබට මෙම දත්ත ලබා ගැනීමට නව ක්‍රම ඉදිරිපත් කළ යුතුය. විස්තර කර ඇති එක් එක් වෙබ් සේවාවන්හි මෙය විස්තරාත්මකව පහත විස්තර කෙරේ.

එබැවින්, අපට ශාඛා අතර වෙනස ලැබුණි, නැතහොත් වෙනස් කරන ලද ගොනු නාම ලැයිස්තුවක්. දැන් අපි file එක දෙන්න ඕනේ .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.yml. පහසුව සඳහා, ගොනුවෙන් කැඳවනු ලබන කාර්යයන් සහිත වෙනම බැෂ් ස්ක්‍රිප්ට් එකකට සියල්ල තැබීමට මම ඔබට උපදෙස් දෙමි. .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_PULL_REQUEST අදින්න ඉල්ලීම් අංකය ගබඩා කරයි හෝ බොරු, මෙය නිතිපතා ශාඛාවක් නම්;
  • $TRAVIS_REPO_SLUG ව්යාපෘති ගබඩාවේ නම ගබඩා කරයි.

මෙම කාර්යය සඳහා ඇල්ගොරිතම:

PVS-Studio භාවිතා කරමින් Travis CI, Buddy සහ AppVeyor හි කැපවීම් සහ ඇදීමේ ඉල්ලීම් විශ්ලේෂණය කිරීම
ට්‍රැවිස් සීඅයි ප්‍රතිලාභ කේත වලට ප්‍රතිචාර දක්වයි, එබැවින් අනතුරු ඇඟවීම් තිබීම මඟින් වගකීම් දෝෂ සහිත ලෙස සලකුණු කිරීමට සේවාවට කියනු ඇත.

දැන් අපි මෙම කේත රේඛාව දෙස සමීපව බලමු:

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

කාරණය නම් ඇදීමේ ඉල්ලීමක් විශ්ලේෂණය කිරීමේදී ට්‍රැවිස් සීඅයි ස්වයංක්‍රීයව ශාඛා ඒකාබද්ධ කරයි:

PVS-Studio භාවිතා කරමින් Travis CI, Buddy සහ AppVeyor හි කැපවීම් සහ ඇදීමේ ඉල්ලීම් විශ්ලේෂණය කිරීම
එබැවින් අපි විශ්ලේෂණය කරමු A4සහ නැත B3->A3. මෙම විශේෂාංගය නිසා, අපි සමඟ වෙනස ගණනය කළ යුතුය A3, එය හරියටම ශාඛාවේ මුදුනයි සම්භවය.

එක් වැදගත් විස්තරයක් ඉතිරිව ඇත - සම්පාදනය කරන ලද පරිවර්තන ඒකක (*.c, *.cc, *.cpp, ආදිය) ශීර්ෂ ගොනු වල පරායත්තතා හැඹිලිගත කිරීම. විශ්ලේෂකය මෙම පරායත්තතා ගණනය කරන්නේ එය ගොනු ලැයිස්තුවක් පරීක්ෂා කිරීමේ ක්‍රමයේදී ප්‍රථමයෙන් දියත් කර පසුව ඒවා .PVS-Studio බහලුම තුළ සුරකින විටය. ට්‍රැවිස් සීඅයි ඔබට ෆෝල්ඩර හැඹිලි කිරීමට ඉඩ සලසයි, එබැවින් අපි නාමාවලි දත්ත සුරකිමු .PVS-Studio/:

cache:
  directories:
    - .PVS-Studio/

මෙම කේතය ගොනුවට එක් කළ යුතුය .travis.yml. මෙම නාමාවලිය විශ්ලේෂණයෙන් පසුව එකතු කරන ලද විවිධ දත්ත ගබඩා කරයි, එමඟින් ගොනු ලැයිස්තු විශ්ලේෂණයේ හෝ වර්ධක විශ්ලේෂණයේ පසුකාලීන ධාවනය සැලකිය යුතු ලෙස වේගවත් කරනු ඇත. මෙය සිදු නොකළේ නම්, විශ්ලේෂකය සෑම විටම සියලුම ගොනු විශ්ලේෂණය කරනු ඇත.

Buddy

ට්‍රැවිස් සීඅයි වගේ, Buddy GitHub හි ගබඩා කර ඇති ව්‍යාපෘති ස්වයංක්‍රීයව ගොඩනැගීමට සහ පරීක්ෂා කිරීමට හැකියාව සපයයි. Travis CI මෙන් නොව, එය වෙබ් අතුරු මුහුණතෙහි වින්‍යාස කර ඇත (bash සහාය ඇත), එබැවින් ව්‍යාපෘතියේ වින්‍යාස ගොනු ගබඩා කිරීම අවශ්‍ය නොවේ.

පළමුවෙන්ම, අපි එකලස් කිරීමේ රේඛාවට නව ක්‍රියාවක් එක් කළ යුතුය:

PVS-Studio භාවිතා කරමින් Travis CI, Buddy සහ AppVeyor හි කැපවීම් සහ ඇදීමේ ඉල්ලීම් විශ්ලේෂණය කිරීම
අපි ප්‍රොජෙක්ට් එක හදන්න පාවිච්චි කරපු compiler එක සඳහන් කරමු. මෙම ක්‍රියාවෙහි ස්ථාපනය කර ඇති ඩොකර් කන්ටේනරය සැලකිල්ලට ගන්න. උදාහරණයක් ලෙස, 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

දැන් අපි ධාවන පටිත්ත වෙත යමු (පළමු නිරූපකය) සහ පහත කේතය අනුරූප සංස්කාරක ක්ෂේත්‍රයට එක් කරන්න:

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 හි කැපවීම් සහ ඇදීමේ ඉල්ලීම් විශ්ලේෂණය කිරීම
කාරණය නම්, දැන් අපි විශ්ලේෂණය කරන්නේ ඒකාබද්ධයේ ප්‍රති result ලය නොව, ඇදීමේ ඉල්ලීම ඉදිරිපත් කරන ශාඛාවේ ප්‍රධානියා ය:

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 — පරිශීලක නාමය සහ ගබඩාවේ එකතුවක් (උදාහරණයක් ලෙස max/test).

දැන් අපි පහත බොත්තම භාවිතයෙන් වෙනස්කම් සුරකිමු සහ ඇදීමේ ඉල්ලීම විශ්ලේෂණය සක්‍රීය කරමු:

PVS-Studio භාවිතා කරමින් Travis CI, Buddy සහ AppVeyor හි කැපවීම් සහ ඇදීමේ ඉල්ලීම් විශ්ලේෂණය කිරීම
Travis CI මෙන් නොව, අපට සඳහන් කිරීමට අවශ්‍ය නැත .pvs-studio පසුකාලීන දියත් කිරීම් සඳහා Buddy ස්වයංක්‍රීයව සියලුම ගොනු හැඹිලිගත කරන බැවින්, හැඹිලිගත කිරීම සඳහා. එමනිසා, අන්තිමට ඉතිරිව ඇත්තේ Buddy හි PVS-Studio සඳහා පිවිසුම් සහ මුරපදය සුරැකීමයි. වෙනස්කම් සුරැකීමෙන් පසුව, අපි නැවත නල මාර්ගයට ගෙන යනු ඇත. අපි විචල්‍යයන් සැකසීමට සහ PVS-Studio සඳහා පිවිසුමක් සහ යතුරක් එක් කිරීමට ඉදිරියට යා යුතුයි:

PVS-Studio භාවිතා කරමින් Travis CI, Buddy සහ AppVeyor හි කැපවීම් සහ ඇදීමේ ඉල්ලීම් විශ්ලේෂණය කිරීම
මෙයින් පසු, නව ඇදීමේ ඉල්ලීමක් හෝ කැපවීමක පෙනුම සමාලෝචනය අවුලුවනු ඇත. කැපවීමක දෝෂ තිබේ නම්, Buddy එය අදින්න ඉල්ලීම් පිටුවේ සඳහන් කරයි.

AppVeyor

AppVeyor පිහිටුවීම Buddy ට සමාන වේ, සෑම දෙයක්ම වෙබ් අතුරු මුහුණත තුළ සිදු වන අතර ව්‍යාපෘති ගබඩාවට *.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 විශ්ලේෂකයේ බලපත්‍රය පරීක්ෂා කිරීමට අවශ්‍ය බව මම ඔබට මතක් කරමි. අපි ඒවා ඉදිරියේදී Bash ස්ක්‍රිප්ට්වලින් නැවත දකින්නෙමු.

පහත පිටුවේම අපි හැඹිලිගත කිරීම සඳහා ෆෝල්ඩරය දක්වන්නෙමු:

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 variable එක ටිකක් බොරු කියලා. මෙම හේතුව නිසා, විශ්ලේෂණය ආරම්භ කිරීමට පෙර මම එහි අගය අතින් යාවත්කාලීන කළෙමි.

එවිට සියල්ල පෙර පරිදි වේ:

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 හි කැපවීම් සහ ඇදීමේ ඉල්ලීම් විශ්ලේෂණය කිරීම

ඔබට මෙම ලිපිය ඉංග්‍රීසි කතා කරන ප්‍රේක්ෂකයින් සමඟ බෙදා ගැනීමට අවශ්‍ය නම්, කරුණාකර පරිවර්තන සබැඳිය භාවිතා කරන්න: Maxim Zvyagintsev. PVS-Studio භාවිතා කරමින් Travis CI, Buddy සහ AppVeyor හි කැපවීම් සහ ඇදීමේ ඉල්ලීම් විශ්ලේෂණය කිරීම.

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න