Linux మరియు macOSలో C మరియు C++ భాషల కోసం PVS-స్టూడియో ఎనలైజర్లో, వెర్షన్ 7.04 నుండి ప్రారంభించి, పేర్కొన్న ఫైల్ల జాబితాను తనిఖీ చేయడానికి ఒక పరీక్ష ఎంపిక కనిపించింది. కొత్త మోడ్ను ఉపయోగించి, మీరు కమిట్లను తనిఖీ చేయడానికి మరియు అభ్యర్థనలను లాగడానికి ఎనలైజర్ను కాన్ఫిగర్ చేయవచ్చు. ట్రావిస్ CI, బడ్డీ మరియు AppVeyor వంటి ప్రసిద్ధ CI (నిరంతర ఇంటిగ్రేషన్) సిస్టమ్లలో GitHub ప్రాజెక్ట్ యొక్క మార్చబడిన ఫైల్ల జాబితాను తనిఖీ చేయడం ఎలాగో ఈ కథనం మీకు తెలియజేస్తుంది.
ఫైల్ జాబితా తనిఖీ మోడ్
Linux మరియు macOS కోసం PVS-Studio 7.04 వెర్షన్లో, సోర్స్ ఫైల్ల జాబితాను తనిఖీ చేసే మోడ్ కనిపించింది. ఫైల్ను రూపొందించడానికి మిమ్మల్ని బిల్డ్ సిస్టమ్ అనుమతించే ప్రాజెక్ట్ల కోసం ఇది పని చేస్తుంది
అలాగే, కంపైలర్ లాంచ్ల (pvs-studio-analyzer ట్రేస్) యొక్క స్ట్రేస్ ట్రేస్ లాగ్తో కలిసి ఫైల్ జాబితా తనిఖీ మోడ్ను ఉపయోగించవచ్చు. దీన్ని చేయడానికి, మీరు మొదట ప్రాజెక్ట్ యొక్క పూర్తి నిర్మాణాన్ని నిర్వహించాలి మరియు దానిని ట్రాక్ చేయాలి, తద్వారా ఎనలైజర్ తనిఖీ చేయబడిన అన్ని ఫైల్ల కంపైలేషన్ పారామితుల గురించి పూర్తి సమాచారాన్ని సేకరిస్తుంది.
అయితే, ఈ ఐచ్ఛికం ఒక ముఖ్యమైన లోపాన్ని కలిగి ఉంది - మీరు దీన్ని అమలు చేస్తున్న ప్రతిసారీ మొత్తం ప్రాజెక్ట్ యొక్క పూర్తి బిల్డ్ ట్రేస్ను నిర్వహించవలసి ఉంటుంది, ఇది నిబద్ధతను త్వరగా తనిఖీ చేయాలనే ఆలోచనకు విరుద్ధంగా ఉంటుంది. లేదా, మీరు ట్రేస్ ఫలితాన్ని క్యాష్ చేస్తే, ట్రేస్ తర్వాత సోర్స్ ఫైల్ల డిపెండెన్సీ స్ట్రక్చర్ మారితే ఎనలైజర్ యొక్క తదుపరి పరుగులు అసంపూర్ణంగా ఉండవచ్చు (ఉదాహరణకు, సోర్స్ ఫైల్లలో ఒకదానికి కొత్త #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++ ఫైళ్లను విశ్లేషించే లక్షణం. భవిష్యత్తులో, డిపెండెన్సీ ఫైల్ కాష్ చేయబడుతుంది మరియు ఇది ఎనలైజర్ ద్వారా స్వయంచాలకంగా నవీకరించబడుతుంది. ఇన్క్రిమెంటల్ పార్సింగ్ మోడ్ను ఉపయోగించకుండా ఫైల్ జాబితా తనిఖీ మోడ్ను ఉపయోగిస్తున్నప్పుడు తనిఖీ చేయడం వల్ల కలిగే ప్రయోజనం ఏమిటంటే మీరు ఆ ఫైల్ను మాత్రమే కాష్ చేయాలి మరియు ఆబ్జెక్ట్ ఫైల్లను కాదు.
పుల్ అభ్యర్థన విశ్లేషణ యొక్క సాధారణ సూత్రాలు
మొత్తం ప్రాజెక్ట్ను విశ్లేషించడానికి చాలా సమయం పడుతుంది, కాబట్టి దానిలో కొంత భాగాన్ని మాత్రమే తనిఖీ చేయడం అర్ధమే. సమస్య ఏమిటంటే మీరు కొత్త ఫైల్లను మిగిలిన ప్రాజెక్ట్ ఫైల్ల నుండి వేరు చేయాలి.
రెండు శాఖలతో కూడిన కమిట్ చెట్టు యొక్క ఉదాహరణను చూద్దాం:
ఆ నిబద్ధతను ఊహించుకుందాం A1 ఇప్పటికే పరీక్షించబడిన చాలా పెద్ద మొత్తంలో కోడ్ని కలిగి ఉంది. కొంచెం ముందుగా మేము కమిట్ నుండి ఒక శాఖను తయారు చేసాము A1 మరియు కొన్ని ఫైళ్లను మార్చారు.
మీరు, వాస్తవానికి, ఆ తర్వాత గమనించారు A1 మరో రెండు కమిట్లు జరిగాయి, కానీ ఇవి కూడా ఇతర శాఖల విలీనాలు, ఎందుకంటే మేము కట్టుబడి ఉండము మాస్టర్. మరియు ఇప్పుడు సమయం ఆసన్నమైంది hotfix సిద్ధంగా. అందుకే విలీనానికి పుల్ రిక్వెస్ట్ వచ్చింది 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
ఈ కమాండ్ లోపాలను జాబితా చేస్తుంది
ఇప్పుడు మాత్రమే మేము లోపాలను ప్రదర్శించడం మాత్రమే కాకుండా, సమస్యల ఉనికి గురించి అసెంబ్లీ మరియు పరీక్ష కోసం మా సేవకు తెలియజేయాలి. ఈ ప్రయోజనం కోసం, కన్వర్టర్కు జెండా జోడించబడింది -W (--సూచించు-హెచ్చరికలు) కనీసం ఒక ఎనలైజర్ హెచ్చరిక ఉంటే, యుటిలిటీ రిటర్న్ కోడ్ ప్లగ్-కన్వర్టర్ 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. ట్రావిస్ CI వాటిని స్వతంత్రంగా ప్రకటించింది:
- $TRAVIS_PULL_REQUEST పుల్ అభ్యర్థన సంఖ్యను నిల్వ చేస్తుంది లేదా తప్పుడు, ఇది సాధారణ శాఖ అయితే;
- $TRAVIS_REPO_SLUG ప్రాజెక్ట్ రిపోజిటరీ పేరును నిల్వ చేస్తుంది.
ఈ ఫంక్షన్ కోసం అల్గోరిథం:
ట్రావిస్ CI రిటర్న్ కోడ్లకు ప్రతిస్పందిస్తుంది, కాబట్టి హెచ్చరికల ఉనికిని లోపాలను కలిగి ఉన్నట్లు గుర్తించమని సేవకు తెలియజేస్తుంది.
ఇప్పుడు ఈ కోడ్ లైన్ను నిశితంగా పరిశీలిద్దాం:
git diff --name-only origin/HEAD > .pvs-pr.list
వాస్తవం ఏమిటంటే, పుల్ అభ్యర్థనను విశ్లేషించేటప్పుడు ట్రావిస్ CI స్వయంచాలకంగా శాఖలను విలీనం చేస్తుంది:
కాబట్టి మేము విశ్లేషిస్తాము A4కానీ కాదు B3->A3. ఈ లక్షణం కారణంగా, మేము తేడాను లెక్కించాలి A3, ఇది ఖచ్చితంగా శాఖ యొక్క పైభాగం నుండి మూలం.
ఒక ముఖ్యమైన వివరాలు మిగిలి ఉన్నాయి - కంపైల్ చేయబడిన అనువాద యూనిట్లలో (*.c, *.cc, *.cpp, మొదలైనవి) హెడర్ ఫైల్ల డిపెండెన్సీలను కాష్ చేయడం. ఫైళ్ల జాబితాను తనిఖీ చేసే మోడ్లో మొదట ప్రారంభించబడినప్పుడు ఎనలైజర్ ఈ డిపెండెన్సీలను గణిస్తుంది మరియు వాటిని .PVS-Studio డైరెక్టరీలో సేవ్ చేస్తుంది. ట్రావిస్ CI మిమ్మల్ని ఫోల్డర్లను కాష్ చేయడానికి అనుమతిస్తుంది, కాబట్టి మేము డైరెక్టరీ డేటాను సేవ్ చేస్తాము .PVS-స్టూడియో/:
cache:
directories:
- .PVS-Studio/
ఈ కోడ్ని ఫైల్కి జోడించాలి .travis.yml. ఈ డైరెక్టరీ విశ్లేషణ తర్వాత సేకరించిన వివిధ డేటాను నిల్వ చేస్తుంది, ఇది ఫైల్ జాబితా విశ్లేషణ లేదా పెరుగుతున్న విశ్లేషణ యొక్క తదుపరి పరుగులను గణనీయంగా వేగవంతం చేస్తుంది. ఇది చేయకపోతే, ఎనలైజర్ వాస్తవానికి ప్రతిసారీ అన్ని ఫైల్లను విశ్లేషిస్తుంది.
బడ్డీ
ట్రావిస్ CI లాగా,
అన్నింటిలో మొదటిది, మేము అసెంబ్లీ లైన్కు కొత్త చర్యను జోడించాలి:
ప్రాజెక్ట్ను నిర్మించడానికి ఉపయోగించిన కంపైలర్ను సూచిస్తాము. ఈ చర్యలో ఇన్స్టాల్ చేయబడిన డాకర్ కంటైనర్ను గమనించండి. ఉదాహరణకు, GCC కోసం ఒక ప్రత్యేక కంటైనర్ ఉంది:
ఇప్పుడు PVS-స్టూడియో మరియు అవసరమైన యుటిలిటీలను ఇన్స్టాల్ చేద్దాం:
ఎడిటర్కు ఈ క్రింది పంక్తులను జోడిద్దాం:
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
మీరు ట్రావ్స్-సిఐలో విభాగాన్ని చదివితే, ఈ కోడ్ మీకు ఇప్పటికే సుపరిచితం, అయితే, ఇప్పుడు కొత్త దశ ఉంది:
వాస్తవం ఏమిటంటే, ఇప్పుడు మేము విలీన ఫలితాన్ని విశ్లేషిస్తాము, కానీ పుల్ అభ్యర్థన చేయబడిన శాఖ యొక్క హెడ్:
కాబట్టి మేము షరతులతో కూడిన నిబద్ధతలో ఉన్నాము 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_EXECUTION_PULL_REQEUST_NO - అభ్యర్థన సంఖ్యను లాగండి;
- $BUDDY_REPO_SLUG — వినియోగదారు పేరు మరియు రిపోజిటరీ కలయిక (ఉదాహరణకు గరిష్టం/పరీక్ష).
ఇప్పుడు దిగువ బటన్ను ఉపయోగించి మార్పులను సేవ్ చేద్దాం మరియు పుల్ అభ్యర్థన యొక్క విశ్లేషణను ప్రారంభిద్దాం:
ట్రావిస్ CI వలె కాకుండా, మేము పేర్కొనవలసిన అవసరం లేదు .pvs-studio కాషింగ్ కోసం, బడ్డీ స్వయంచాలకంగా అన్ని ఫైల్లను తదుపరి లాంచ్ల కోసం కాష్ చేస్తుంది. అందువల్ల, బడ్డీలో PVS-స్టూడియో కోసం లాగిన్ మరియు పాస్వర్డ్ను సేవ్ చేయడం చివరిది. మార్పులను సేవ్ చేసిన తర్వాత, మేము తిరిగి పైప్లైన్కి తీసుకెళ్లబడతాము. మేము వేరియబుల్లను సెటప్ చేయడానికి మరియు PVS-స్టూడియో కోసం లాగిన్ మరియు కీని జోడించడానికి వెళ్లాలి:
దీని తర్వాత, కొత్త పుల్ రిక్వెస్ట్ లేదా కమిట్ కనిపించడం సమీక్షను ట్రిగ్గర్ చేస్తుంది. కమిట్లో లోపాలు ఉంటే, బడ్డీ పుల్ రిక్వెస్ట్ పేజీలో దీన్ని సూచిస్తుంది.
AppVeyor
AppVeyorని సెటప్ చేయడం బడ్డీని పోలి ఉంటుంది, ఎందుకంటే ప్రతిదీ వెబ్ ఇంటర్ఫేస్లో జరుగుతుంది మరియు ప్రాజెక్ట్ రిపోజిటరీకి *.yml ఫైల్ను జోడించాల్సిన అవసరం లేదు.
ప్రాజెక్ట్ అవలోకనంలోని సెట్టింగ్ల ట్యాబ్కు వెళ్దాం:
ఈ పేజీని క్రిందికి స్క్రోల్ చేద్దాం మరియు పుల్ అభ్యర్థనలను సేకరించడం కోసం కాష్ సేవింగ్ని ప్రారంభిద్దాం:
ఇప్పుడు మనం ఎన్విరాన్మెంట్ ట్యాబ్కి వెళ్దాం, ఇక్కడ మేము అసెంబ్లీ కోసం చిత్రాన్ని మరియు అవసరమైన ఎన్విరాన్మెంట్ వేరియబుల్స్ను పేర్కొంటాము:
మీరు మునుపటి విభాగాలను చదివి ఉంటే, ఈ రెండు వేరియబుల్స్ మీకు బాగా తెలుసు - PVS_KEY и PVS_USERNAME. కాకపోతే, PVS-స్టూడియో ఎనలైజర్ లైసెన్స్ని ధృవీకరించడం అవసరం అని నేను మీకు గుర్తు చేస్తున్నాను. భవిష్యత్తులో బాష్ స్క్రిప్ట్లలో వాటిని మళ్లీ చూస్తాము.
దిగువన ఉన్న అదే పేజీలో మేము కాషింగ్ కోసం ఫోల్డర్ను సూచిస్తాము:
మేము దీన్ని చేయకపోతే, మేము రెండు ఫైల్లకు బదులుగా మొత్తం ప్రాజెక్ట్ను విశ్లేషిస్తాము, కానీ మేము పేర్కొన్న ఫైల్ల నుండి అవుట్పుట్ను పొందుతాము. కాబట్టి, సరైన డైరెక్టరీ పేరును నమోదు చేయడం ముఖ్యం.
ఇప్పుడు స్క్రిప్ట్ని పరీక్షించే సమయం వచ్చింది. పరీక్షల ట్యాబ్ని తెరిచి, స్క్రిప్ట్ని ఎంచుకోండి:
మీరు ఈ ఫారమ్లో కింది కోడ్ను అతికించాలి:
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 వేరియబుల్ కొద్దిగా అబద్ధం అని నేను గ్రహించాను. ఈ కారణంగా, నేను విశ్లేషణను ప్రారంభించే ముందు దాని విలువను మాన్యువల్గా నవీకరించాను.
ఆపై ప్రతిదీ మునుపటిలా ఉంటుంది:
ఇప్పుడు కింది భాగాన్ని పరిగణించండి:
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 - వినియోగదారు పేరు మరియు ప్రాజెక్ట్ రిపోజిటరీ.
తీర్మానం
వాస్తవానికి, సాధ్యమయ్యే అన్ని నిరంతర ఏకీకరణ సేవలను మేము పరిగణించలేదు, అయినప్పటికీ, అవన్నీ ఒకదానికొకటి చాలా సారూప్యమైన ఆపరేటింగ్ ప్రత్యేకతలను కలిగి ఉన్నాయి. కాషింగ్ మినహా, ప్రతి సేవ దాని స్వంత "సైకిల్" చేస్తుంది, కాబట్టి ప్రతిదీ ఎల్లప్పుడూ భిన్నంగా ఉంటుంది.
ఎక్కడో, ట్రావిస్-CI లో వలె, కోడ్ మరియు కాషింగ్ యొక్క రెండు పంక్తులు దోషపూరితంగా పని చేస్తాయి; ఎక్కడో, AppVeyor లో వలె, మీరు సెట్టింగ్లలో ఫోల్డర్ను పేర్కొనాలి; కానీ ఎక్కడో మీరు ప్రత్యేకమైన కీలను సృష్టించాలి మరియు కాష్ చేసిన భాగాన్ని ఓవర్రైట్ చేయడానికి మీకు అవకాశం ఇవ్వడానికి సిస్టమ్ను ఒప్పించేందుకు ప్రయత్నించాలి. కాబట్టి, మీరు పైన చర్చించబడని నిరంతర ఏకీకరణ సేవలో పుల్ అభ్యర్థనల విశ్లేషణను సెటప్ చేయాలనుకుంటే, ముందుగా మీకు కాషింగ్లో సమస్యలు ఉండవని నిర్ధారించుకోండి.
మీరు ఆసక్తి చూపినందుకు ధన్యవాదములు. ఏదైనా పని చేయకపోతే, మాకు వ్రాయడానికి సంకోచించకండి
మీరు ఈ కథనాన్ని ఆంగ్లం మాట్లాడే ప్రేక్షకులతో భాగస్వామ్యం చేయాలనుకుంటే, దయచేసి అనువాద లింక్ని ఉపయోగించండి: Maxim Zvyagintsev.
మూలం: www.habr.com