PVS-Studioን በመጠቀም በ Travis CI፣ Buddy እና AppVeyor ውስጥ የፈጸሙትን የመፈጸም እና የመሳብ ጥያቄዎች ትንተና

PVS-Studioን በመጠቀም በ Travis CI፣ Buddy እና AppVeyor ውስጥ የፈጸሙትን የመፈጸም እና የመሳብ ጥያቄዎች ትንተና
በ PVS-Studio analyzer ውስጥ ለ C እና C++ ቋንቋዎች በሊኑክስ እና ማክኦኤስ ከስሪት 7.04 ጀምሮ የተወሰኑ ፋይሎችን ዝርዝር ለማየት የሙከራ አማራጭ ታይቷል። አዲሱን ሁነታ በመጠቀም ተንታኞችን ለመፈተሽ እና ጥያቄዎችን ለመሳብ ማዋቀር ይችላሉ። ይህ ጽሁፍ እንደ Travis CI፣ Buddy እና AppVeyor ባሉ ታዋቂ CI (ቀጣይ ውህደት) ስርዓቶች ውስጥ የGitHub ፕሮጄክት የተቀየሩ ፋይሎችን ዝርዝር መፈተሽ እንዴት እንደሚያዋቅሩ ይነግርዎታል።

የፋይል ዝርዝር አረጋግጥ ሁነታ

PVS- ስቱዲዮ በ C፣ C++፣ C # እና Java የተፃፉ የፕሮግራሞች ምንጭ ኮድ ውስጥ ስህተቶችን እና ሊሆኑ የሚችሉ ተጋላጭነቶችን ለመለየት የሚያስችል መሳሪያ ነው። በዊንዶውስ ፣ ሊኑክስ እና ማክኦኤስ ላይ በ64-ቢት ስርዓቶች ላይ ይሰራል።

በ PVS-Studio 7.04 ለሊኑክስ እና ማክኦኤስ፣ የምንጭ ፋይሎችን ዝርዝር የመፈተሽ ሁነታ ታይቷል። ይህ የግንባታ ስርዓቱ ፋይልን ለመፍጠር ለሚፈቅድልዎት ፕሮጀክቶች ይሰራል ማጠናቀር_ትእዛዞች.json. ስለተገለጹት ፋይሎች ስብስብ መረጃ ለማውጣት ለተንታኙ ያስፈልጋል። የግንባታ ስርዓትዎ compile_commands.json ፋይል መፍጠርን የማይደግፍ ከሆነ መገልገያውን ተጠቅመው ይህን ፋይል ለመፍጠር መሞከር ይችላሉ። ድብ.

እንዲሁም፣ የፋይል ዝርዝር መፈተሻ ሁነታን ከትራክ ሎግ ኦፍ ኮምፕሌር ማስጀመሪያዎች (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 አገልግሎት ስለ የውሂብ ጎታ ለመዋሃድ አስፈላጊውን መረጃ አይሰጥም, ስለዚህ በእያንዳንዱ ጊዜ ይህንን ውሂብ ለማግኘት አዳዲስ መንገዶችን መፍጠር አለብዎት. ይህ በእያንዳንዱ በተገለጹት የድር አገልግሎቶች ውስጥ ከዚህ በታች በዝርዝር ይገለጻል።

ስለዚህ, በቅርንጫፎቹ መካከል ያለውን ልዩነት አግኝተናል, ወይም ይልቁንስ, የተቀየሩት የፋይል ስሞች ዝርዝር. አሁን ፋይሉን መስጠት አለብን .pvs-pr.ዝርዝር (ከላይ ያለውን ውጤት ወደ እሱ አዙረነዋል) ወደ ተንታኙ፡-

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

ይህ ትዕዛዝ ስህተቶቹን ይዘረዝራል እስቴደር (መደበኛ የስህተት መልእክት ውፅዓት)።

አሁን ብቻ ስህተቶችን ማሳየት ብቻ ሳይሆን የችግሮች መኖራቸውን ለመገጣጠም እና ለመፈተሽ አገልግሎታችንን ማሳወቅ አለብን. ለዚሁ ዓላማ, በመቀየሪያው ላይ ባንዲራ ተጨምሯል -W (--ማመልከት-ማስጠንቀቂያዎች). ቢያንስ አንድ ተንታኝ ማስጠንቀቂያ ካለ የፍጆታ መመለሻ ኮድ ፕላግ-መቀየሪያ ወደ 2 ይቀየራል, ይህም በተራው የ CI አገልግሎትን በመጎተት ጥያቄ ፋይሎች ውስጥ ሊኖሩ የሚችሉ ስህተቶች መኖሩን ያሳውቃል.

Travis CI

አወቃቀሩ እንደ ፋይል ነው የተሰራው። .travis.yml. ለመመቻቸት ፣ ሁሉንም ነገር ከፋይሉ ከሚጠሩ ተግባራት ጋር ወደ የተለየ የባሽ ስክሪፕት እንዲያስቀምጡ እመክርዎታለሁ። .travis.yml (bash script_name.sh ተግባር_ስም).

በ ስክሪፕቱ ላይ አስፈላጊውን ኮድ እንጨምራለን bash, በዚህ መንገድ ተጨማሪ ተግባራትን እናገኛለን. በክፍል ጫን የሚከተለውን እንጻፍ፡-

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 CI ራሳቸውን ችለው ያውጃቸዋል፡-

  • $TRAVIS_PULL_REQUEST የሚጎትት ጥያቄ ቁጥር ያከማቻል ወይም የሐሰት, ይህ መደበኛ ቅርንጫፍ ከሆነ;
  • $TRAVIS_REPO_SLUG የፕሮጀክቱን ማከማቻ ስም ያከማቻል.

የዚህ ተግባር ስልተ ቀመር፡-

PVS-Studioን በመጠቀም በ Travis CI፣ Buddy እና AppVeyor ውስጥ የፈጸሙትን የመፈጸም እና የመሳብ ጥያቄዎች ትንተና
ትራቪስ ሲአይ የመመለሻ ኮዶች ምላሽ ይሰጣል፣ስለዚህ የማስጠንቀቂያዎች መኖር አገልግሎቱ ስህተቶቹን እንደያዘ ምልክት እንዲያደርግ ይነግረዋል።

አሁን ይህንን የኮድ መስመር በዝርዝር እንመልከት፡-

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-ስቱዲዮ/:

cache:
  directories:
    - .PVS-Studio/

ይህ ኮድ ወደ ፋይሉ መታከል አለበት። .travis.yml. ይህ ማውጫ ከተተነተነ በኋላ የተሰበሰቡ የተለያዩ መረጃዎችን ያከማቻል፣ ይህም በቀጣይ የፋይል ዝርዝር ትንተና ወይም ተጨማሪ ትንተና ሂደቶችን በእጅጉ ያፋጥናል። ይህ ካልተደረገ, ተንታኙ በእውነቱ ሁሉንም ፋይሎች በእያንዳንዱ ጊዜ ይመረምራል.

Buddy

እንደ Travis CI ፣ Buddy በ GitHub ላይ የተከማቹ ፕሮጀክቶችን በራስ ሰር የመገንባት እና የመሞከር ችሎታን ይሰጣል። እንደ Travis CI ሳይሆን በድር በይነገጽ ውስጥ የተዋቀረ ነው (የባሽ ድጋፍ አለ) ስለዚህ በፕሮጀክቱ ውስጥ የማዋቀሪያ ፋይሎችን ማከማቸት አያስፈልግም.

በመጀመሪያ ደረጃ, በስብሰባው መስመር ላይ አዲስ እርምጃ ማከል አለብን:

PVS-Studioን በመጠቀም በ Travis CI፣ Buddy እና AppVeyor ውስጥ የፈጸሙትን የመፈጸም እና የመሳብ ጥያቄዎች ትንተና
ፕሮጀክቱን ለመገንባት ጥቅም ላይ የዋለውን አጠናቃሪ እንጠቁም. በዚህ ድርጊት ውስጥ የተጫነውን የዶክ ኮንቴይነር ያስተውሉ. ለምሳሌ፣ ለጂሲሲ ልዩ መያዣ አለ፡-

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 ኤፒአይን እንጠቀም፡-

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

ቡዲ የሚያቀርባቸውን የሚከተሉትን ተለዋዋጮች ተጠቀምን።

  • $BUDDY_EXECUTION_PULL_REQEUST_NO - የጥያቄ ቁጥር ይጎትቱ;
  • $BUDDY_REPO_SLUG - የተጠቃሚ ስም እና ማከማቻ (ለምሳሌ ከፍተኛ/ሙከራ) ጥምረት።

አሁን ከታች ያለውን አዝራር ተጠቅመን ለውጦቹን እናስቀምጥ እና የመጎተት ጥያቄን ትንተና አንቃ።

PVS-Studioን በመጠቀም በ Travis CI፣ Buddy እና AppVeyor ውስጥ የፈጸሙትን የመፈጸም እና የመሳብ ጥያቄዎች ትንተና
እንደ Travis CI በተለየ፣ መግለጽ አያስፈልገንም። .pvs-ስቱዲዮ Buddy ለቀጣይ ጅምር ሁሉንም ፋይሎች በራስ-ሰር ስለሚሸጎጥ ለመሸጎጥ። ስለዚህ, የቀረው የመጨረሻው ነገር በ Buddy ውስጥ ለ PVS-Studio መግቢያ እና የይለፍ ቃል ማስቀመጥ ነው. ለውጦቹን ካስቀመጥን በኋላ ወደ ቧንቧው እንመለሳለን. ተለዋዋጮችን ወደማዘጋጀት እና ለ PVS-ስቱዲዮ መግቢያ እና ቁልፍ ማከል አለብን፡-

PVS-Studioን በመጠቀም በ Travis CI፣ Buddy እና AppVeyor ውስጥ የፈጸሙትን የመፈጸም እና የመሳብ ጥያቄዎች ትንተና
ከዚህ በኋላ፣ አዲስ የመሳብ ጥያቄ ወይም ቁርጠኝነት መታየት ግምገማውን ያስነሳል። አንድ መፈጸም ስህተቶችን ከያዘ፣ Buddy ይህንን በመጎተት ጥያቄ ገጹ ላይ ይጠቁማል።

አፕቬዮር

አፕቬዮርን ማዋቀር ከ 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 analyzerን ፈቃድ ለማረጋገጥ አስፈላጊ መሆናቸውን ላስታውስህ። ወደፊት እንደገና በባሽ ስክሪፕቶች ውስጥ እናያቸዋለን።

ከታች ባለው ተመሳሳይ ገጽ ላይ ለመሸጎጫ አቃፊ እንጠቁማለን-

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/ፕሮጀክቶች/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 ውስጥ የፈጸሙትን የመፈጸም እና የመሳብ ጥያቄዎች ትንተና

ይህን ጽሑፍ ለእንግሊዝኛ ተናጋሪ ታዳሚዎች ማጋራት ከፈለጉ እባክዎን የትርጉም ማገናኛን ይጠቀሙ፡ Maxim Zvyagintsev። PVS-Studioን በመጠቀም በ Travis CI፣ Buddy እና AppVeyor ውስጥ የፈጸሙትን የመፈጸም እና የመሳብ ጥያቄዎች ትንተና.

ምንጭ: hab.com

አስተያየት ያክሉ