GitLabని ఇష్టపడుతున్నారా మరియు బగ్లను ద్వేషిస్తున్నారా? మీ సోర్స్ కోడ్ నాణ్యతను మెరుగుపరచాలనుకుంటున్నారా? అప్పుడు మీరు సరైన స్థలానికి వచ్చారు. విలీన అభ్యర్థనలను తనిఖీ చేయడానికి PVS-Studio C# ఎనలైజర్ను ఎలా కాన్ఫిగర్ చేయాలో ఈ రోజు మేము మీకు తెలియజేస్తాము. యునికార్న్ మూడ్ని కలిగి ఉండండి మరియు అందరికీ చదవండి.
మార్గం ద్వారా, మేము PVS-స్టూడియో 7.08ని విడుదల చేసాము, దీనిలో మేము చాలా పనులు చేసాము
- Linux మరియు macOS కోసం C# ఎనలైజర్;
- రైడర్ కోసం ప్లగ్ఇన్;
- కొత్త ఫైల్ జాబితా తనిఖీ మోడ్.
ఫైల్ జాబితా తనిఖీ మోడ్
గతంలో, నిర్దిష్ట ఫైల్లను తనిఖీ చేయడానికి, ఫైళ్ల జాబితాతో కూడిన .xmlని ఎనలైజర్కు పంపడం అవసరం. కానీ ఇది చాలా సౌకర్యవంతంగా లేనందున, మేము .txtని బదిలీ చేసే సామర్థ్యాన్ని జోడించాము, ఇది జీవితాన్ని చాలా సులభం చేస్తుంది.
నిర్దిష్ట ఫైల్లను తనిఖీ చేయడానికి, మీరు తప్పనిసరిగా ఫ్లాగ్ను పేర్కొనాలి --sourceFiles (-f) మరియు ఫైల్ల జాబితాతో .txtని బదిలీ చేయండి. ఇది ఇలా కనిపిస్తుంది:
pvs-studio-dotnet -t path/to/solution.sln -f fileList.txt -o project.json
కమిట్ చెకింగ్ లేదా పుల్ రిక్వెస్ట్లను సెటప్ చేయడానికి మీకు ఆసక్తి ఉంటే, మీరు ఈ మోడ్ని ఉపయోగించి కూడా చేయవచ్చు. విశ్లేషించడానికి ఫైల్ల జాబితాను పొందడంలో తేడా ఉంటుంది మరియు మీరు ఏ సిస్టమ్లను ఉపయోగిస్తున్నారనే దానిపై ఆధారపడి ఉంటుంది.
విలీన అభ్యర్థనను తనిఖీ చేసే సూత్రం
చెక్ యొక్క ప్రధాన సారాంశం ఏమిటంటే, విలీనం సమయంలో ఎనలైజర్ ద్వారా కనుగొనబడిన సమస్యలు రాకుండా చూసుకోవడం. మాస్టర్ శాఖ. మేము మొత్తం ప్రాజెక్ట్ను ప్రతిసారీ విశ్లేషించకూడదనుకుంటున్నాము. అంతేకాకుండా, శాఖలను విలీనం చేసేటప్పుడు, మేము మార్చబడిన ఫైల్ల జాబితాను కలిగి ఉన్నాము. అందువల్ల, విలీన అభ్యర్థన తనిఖీని జోడించమని నేను సూచిస్తున్నాను.
స్టాటిక్ ఎనలైజర్ని అమలు చేయడానికి ముందు విలీన అభ్యర్థన ఇలా కనిపిస్తుంది:
అంటే, శాఖలో ఉన్న అన్ని లోపాలు మార్పులు, మాస్టర్ బ్రాంచ్కి తరలిస్తారు. మేము దీన్ని కోరుకోనందున, మేము విశ్లేషణను జోడిస్తాము మరియు ఇప్పుడు రేఖాచిత్రం ఇలా కనిపిస్తుంది:
మేము విశ్లేషిస్తాము మార్పులు2 మరియు, లోపాలు లేకుంటే, మేము విలీన అభ్యర్థనను అంగీకరిస్తాము, లేకుంటే మేము దానిని తిరస్కరిస్తాము.
మార్గం ద్వారా, మీరు C/C++ కోసం కమిట్లను మరియు పుల్ రిక్వెస్ట్లను విశ్లేషించడానికి ఆసక్తి కలిగి ఉంటే, మీరు దాని గురించి చదువుకోవచ్చు.
GitLab
మీరు విలీన అభ్యర్థనలను విశ్లేషించడం ప్రారంభించే ముందు, మీరు మీ ప్రాజెక్ట్ను నమోదు చేసి, అప్లోడ్ చేయాలి. దీన్ని ఎలా చేయాలో మీకు తెలియకపోతే, నేను సూచిస్తున్నాను
వ్యాఖ్య. క్రింద వివరించిన పర్యావరణాన్ని ఏర్పాటు చేసే పద్ధతి సాధ్యమయ్యే వాటిలో ఒకటి. విశ్లేషణ కోసం అవసరమైన వాతావరణాన్ని ఏర్పాటు చేయడానికి మరియు ఎనలైజర్ను ప్రారంభించడానికి దశలను చూపడం లక్ష్యం. బహుశా మీ విషయంలో పర్యావరణ తయారీ (రిపోజిటరీలను జోడించడం, ఎనలైజర్ను ఇన్స్టాల్ చేయడం) మరియు విశ్లేషణ యొక్క దశలను వేరు చేయడం మరింత సరైనది: ఉదాహరణకు, అవసరమైన వాతావరణంతో డాకర్ చిత్రాలను సిద్ధం చేయడం మరియు వాటిని ఉపయోగించడం లేదా ఇతర పద్ధతి.
ఇప్పుడు ఏమి జరుగుతుందో బాగా అర్థం చేసుకోవడానికి, నేను క్రింది రేఖాచిత్రాన్ని చూడాలని సూచిస్తున్నాను:
ఎనలైజర్ని ఆపరేట్ చేయడానికి .NET కోర్ SDK 3 అవసరం, కాబట్టి ఎనలైజర్ని ఇన్స్టాల్ చేసే ముందు మీరు మైక్రోసాఫ్ట్ రిపోజిటరీలను జోడించాలి, దాని నుండి ఎనలైజర్కు అవసరమైన డిపెండెన్సీలు ఇన్స్టాల్ చేయబడతాయి. వివిధ Linux పంపిణీల కోసం Microsoft రిపోజిటరీలను జోడించడం
PVS-Studioని ప్యాకేజీ మేనేజర్ ద్వారా ఇన్స్టాల్ చేయడానికి, మీరు PVS-Studio రిపోజిటరీలను కూడా జోడించాలి. వివిధ పంపిణీల కోసం రిపోజిటరీలను జోడించడం మరింత వివరంగా వివరించబడింది
ఎనలైజర్ ఆపరేట్ చేయడానికి లైసెన్స్ కీ అవసరం. వద్ద మీరు ట్రయల్ లైసెన్స్ పొందవచ్చు
వ్యాఖ్య. దయచేసి వివరించిన మోడ్ ఆఫ్ ఆపరేషన్కు (విలీనం అభ్యర్థనల విశ్లేషణ) ఎంటర్ప్రైజ్ లైసెన్స్ అవసరమని దయచేసి గమనించండి. కాబట్టి, మీరు ఈ మోడ్ ఆఫ్ ఆపరేషన్ని ప్రయత్నించాలనుకుంటే, మీకు ఎంటర్ప్రైజ్ లైసెన్స్ అవసరమని “సందేశం” ఫీల్డ్లో సూచించడం మర్చిపోవద్దు.
విలీన అభ్యర్థన సంభవించినట్లయితే, మేము మార్చబడిన ఫైల్ల జాబితాను మాత్రమే విశ్లేషించాలి, లేకుంటే మేము అన్ని ఫైల్లను విశ్లేషిస్తాము. విశ్లేషణ తర్వాత, లాగ్లను మనకు అవసరమైన ఫార్మాట్లోకి మార్చాలి.
ఇప్పుడు, మీ కళ్ళ ముందు పని యొక్క అల్గోరిథం కలిగి, మీరు స్క్రిప్ట్ రాయడానికి కొనసాగవచ్చు. దీన్ని చేయడానికి, మీరు ఫైల్ను మార్చాలి .gitlab-ci.yml లేదా, అది ఉనికిలో లేకుంటే, దానిని సృష్టించండి. దీన్ని సృష్టించడానికి, మీరు మీ ప్రాజెక్ట్ పేరుపై క్లిక్ చేయాలి -> CI/CDని సెటప్ చేయండి.
ఇప్పుడు మేము స్క్రిప్ట్ రాయడానికి సిద్ధంగా ఉన్నాము. ఎనలైజర్ను ఇన్స్టాల్ చేసి లైసెన్స్ని నమోదు చేసే కోడ్ను ముందుగా వ్రాస్దాం:
before_script:
- apt-get update && apt-get -y install wget gnupg
- apt-get -y install git
- wget https://packages.microsoft.com/config/debian/10/
packages-microsoft-prod.deb -O packages-microsoft-prod.deb
- dpkg -i packages-microsoft-prod.deb
- apt-get update
- apt-get install apt-transport-https
- apt-get update
- 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-dotnet
- pvs-studio-analyzer credentials $PVS_NAME $PVS_KEY
- dotnet restore "$CI_PROJECT_DIR"/Test/Test.sln
అన్ని ఇతర స్క్రిప్ట్ల కంటే ముందుగా ఇన్స్టాలేషన్ మరియు యాక్టివేషన్ జరగాలి కాబట్టి, మేము ప్రత్యేక లేబుల్ని ఉపయోగిస్తాము ముందు_స్క్రిప్ట్. ఈ భాగాన్ని కొద్దిగా వివరిస్తాను.
ఎనలైజర్ను ఇన్స్టాల్ చేయడానికి సిద్ధమవుతోంది:
- wget https://packages.microsoft.com/config/debian/10/
packages-microsoft-prod.deb -O packages-microsoft-prod.deb
- dpkg -i packages-microsoft-prod.deb
- apt-get update
- apt-get install apt-transport-https
- apt-get update
PVS-స్టూడియో రిపోజిటరీలు మరియు ఎనలైజర్ని జోడిస్తోంది:
- 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-dotnet
లైసెన్స్ యాక్టివేషన్:
- pvs-studio-analyzer credentials $PVS_NAME $PVS_KEY
$PVS_NAME - వినియోగదారు పేరు.
$PVS_KEY - ఉత్పత్తి కీ.
ఎక్కడ ప్రాజెక్ట్ డిపెండెన్సీలను పునరుద్ధరిస్తోంది $CI_PROJECT_DIR - ప్రాజెక్ట్ డైరెక్టరీకి పూర్తి మార్గం:
- dotnet restore "$CI_PROJECT_DIR"/Path/To/Solution.sln
సరైన విశ్లేషణ కోసం, ప్రాజెక్ట్ విజయవంతంగా నిర్మించబడాలి మరియు దాని డిపెండెన్సీలను తప్పనిసరిగా పునరుద్ధరించాలి (ఉదాహరణకు, అవసరమైన NuGet ప్యాకేజీలు తప్పనిసరిగా డౌన్లోడ్ చేయబడాలి).
మీరు క్లిక్ చేయడం ద్వారా లైసెన్స్ సమాచారాన్ని కలిగి ఉన్న పర్యావరణ వేరియబుల్లను సెట్ చేయవచ్చు సెట్టింగు, మరియు తర్వాత - ఆన్ CI/CD.
తెరుచుకునే విండోలో, అంశాన్ని కనుగొనండి వేరియబుల్స్, కుడివైపు ఉన్న బటన్పై క్లిక్ చేయండి విస్తరించు మరియు వేరియబుల్స్ జోడించండి. ఫలితం ఇలా ఉండాలి:
ఇప్పుడు మీరు విశ్లేషణకు వెళ్లవచ్చు. ముందుగా, పూర్తి విశ్లేషణ కోసం స్క్రిప్ట్ని జోడిద్దాం. జెండాకు -t మేము జెండాకు పరిష్కారానికి మార్గం పాస్ చేస్తాము -o విశ్లేషణ ఫలితాలు వ్రాయబడే ఫైల్కు మార్గాన్ని వ్రాయండి. మేము రిటర్న్ కోడ్పై కూడా ఆసక్తి కలిగి ఉన్నాము. ఈ సందర్భంలో, రిటర్న్ కోడ్ విశ్లేషణ సమయంలో హెచ్చరికలు జారీ చేయబడిన సమాచారాన్ని కలిగి ఉన్నప్పుడు ఆపరేషన్ ఆపివేయడంపై మాకు ఆసక్తి ఉంది. ఈ భాగం ఇలా కనిపిస్తుంది:
job:
script:
- exit_code=0
- pvs-studio-dotnet -t "$CI_PROJECT_DIR"/Test/Test.sln -o
PVS-Studio.json || exit_code=$?
- exit_code=$((($exit_code & 8)/8))
- if [[ $exit_code == 1 ]]; then exit 1; else exit 0; fi
రిటర్న్ కోడ్లు బిట్ మాస్క్ సూత్రంపై పనిచేస్తాయి. ఉదాహరణకు, విశ్లేషణ ఫలితంగా హెచ్చరికలు జారీ చేయబడితే, రిటర్న్ కోడ్ 8కి సమానంగా ఉంటుంది. ఒక నెలలోపు లైసెన్స్ గడువు ముగిస్తే, రిటర్న్ కోడ్ 4కి సమానంగా ఉంటుంది. విశ్లేషణ సమయంలో లోపాలు గుర్తించబడితే, మరియు లైసెన్స్ ఒక నెలలోపు గడువు ముగుస్తుంది, కోడ్ రిటర్న్, రెండు విలువలు వ్రాయబడతాయి: సంఖ్యలను కలిపి, చివరి రిటర్న్ కోడ్ను పొందండి - 8+4=12. అందువల్ల, సంబంధిత బిట్లను తనిఖీ చేయడం ద్వారా, విశ్లేషణ సమయంలో వివిధ రాష్ట్రాల గురించి సమాచారాన్ని పొందవచ్చు. రిటర్న్ కోడ్లు పత్రంలోని "pvs-studio-dotnet (Linux / macOS) రిటర్న్ కోడ్లు" విభాగంలో మరింత వివరంగా వివరించబడ్డాయి "
ఈ సందర్భంలో, 8 కనిపించే అన్ని రిటర్న్ కోడ్లపై మాకు ఆసక్తి ఉంది.
- exit_code=$((($exit_code & 8)/8))
రిటర్న్ కోడ్లో మనకు ఆసక్తి ఉన్న సంఖ్య యొక్క బిట్ ఉన్నప్పుడు మేము 1ని అందుకుంటాము, లేకుంటే మేము 0ని అందుకుంటాము.
విలీన అభ్యర్థన విశ్లేషణను జోడించాల్సిన సమయం ఇది. దీన్ని చేయడానికి ముందు, స్క్రిప్ట్ కోసం ఒక స్థలాన్ని సిద్ధం చేద్దాం. విలీన అభ్యర్థన సంభవించినప్పుడు మాత్రమే మేము దానిని అమలు చేయాలి. ఇది ఇలా కనిపిస్తుంది:
merge:
script:
only:
- merge_requests
స్క్రిప్ట్ విషయానికి వెళ్దాం. వర్చువల్ మెషీన్ గురించి ఏమీ తెలియదని నేను ఎదుర్కొన్నాను మూలం/మాస్టర్. కాబట్టి ఆమెకు కొంచెం సహాయం చేద్దాం:
- git fetch origin
ఇప్పుడు మేము శాఖల మధ్య వ్యత్యాసాన్ని పొందుతాము మరియు ఫలితాన్ని సేవ్ చేస్తాము టిఎక్స్ టి ఫైల్:
- git diff --name-only origin/master $CI_COMMIT_SHA > pvs-fl.txt
పేరు $CI_COMMIT_SHA - చివరి కమిట్ యొక్క హాష్.
తరువాత, మేము ఫ్లాగ్ ఉపయోగించి ఫైళ్ళ జాబితాను విశ్లేషించడం ప్రారంభిస్తాము -f. మేము మునుపు అందుకున్న .txt ఫైల్ని దానికి బదిలీ చేస్తాము. సరే, పూర్తి విశ్లేషణతో సారూప్యత ద్వారా, మేము రిటర్న్ కోడ్లను పరిశీలిస్తాము:
- exit_code=0
- pvs-studio-dotnet -t "$CI_PROJECT_DIR"/Test/Test.sln -f
pvs-fl.txt -o PVS-Studio.json || exit_code=$?
- exit_code=$((($exit_code & 8)/8))
- if [[ $exit_code == 1 ]]; then exit 1; else exit 0; fi
విలీన అభ్యర్థనను తనిఖీ చేయడానికి పూర్తి స్క్రిప్ట్ ఇలా కనిపిస్తుంది:
merge:
script:
- git fetch origin
- git diff --name-only origin/master $CI_COMMIT_SHA > pvs-fl.txt
- exit_code=0
- pvs-studio-dotnet -t "$CI_PROJECT_DIR"/Test/Test.sln -f
pvs-fl.txt -o PVS-Studio.json || exit_code=$?
- exit_code=$((($exit_code & 8)/8))
- if [[ $exit_code == 1 ]]; then exit 1; else exit 0; fi
only:
- merge_requests
అన్ని స్క్రిప్ట్లు ప్రాసెస్ చేయబడిన తర్వాత లాగ్ మార్పిడిని జోడించడం మాత్రమే మిగిలి ఉంది. మేము లేబుల్ని ఉపయోగిస్తాము తర్వాత_స్క్రిప్ట్ మరియు యుటిలిటీ ప్లగ్-కన్వర్టర్:
after_script:
- plog-converter -t html -o eLog ./PVS-Studio.json
వినియోగ
అయితే, మీరు IDE నుండి స్థానికంగా .json నివేదికలతో సౌకర్యవంతంగా పని చేయాలనుకుంటే, నేను మా సూచన
సౌలభ్యం కోసం, ఇదిగోండి .gitlab-ci.yml పూర్తిగా:
image: debian
before_script:
- apt-get update && apt-get -y install wget gnupg
- apt-get -y install git
- wget https://packages.microsoft.com/config/debian/10/
packages-microsoft-prod.deb -O packages-microsoft-prod.deb
- dpkg -i packages-microsoft-prod.deb
- apt-get update
- apt-get install apt-transport-https
- apt-get update
- 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-dotnet
- pvs-studio-analyzer credentials $PVS_NAME $PVS_KEY
- dotnet restore "$CI_PROJECT_DIR"/Test/Test.sln
merge:
script:
- git fetch origin
- git diff --name-only origin/master $CI_COMMIT_SHA > pvs-fl.txt
- exit_code=0
- pvs-studio-dotnet -t "$CI_PROJECT_DIR"/Test/Test.sln -f
pvs-fl.txt -o PVS-Studio.json || exit_code=$?
- exit_code=$((($exit_code & 8)/8))
- if [[ $exit_code == 1 ]]; then exit 1; else exit 0; fi
only:
- merge_requests
job:
script:
- exit_code=0
- pvs-studio-dotnet -t "$CI_PROJECT_DIR"/Test/Test.sln -o
PVS-Studio.json || exit_code=$?
- exit_code=$((($exit_code & 8)/8))
- if [[ $exit_code == 1 ]]; then exit 1; else exit 0; fi
after_script:
- plog-converter -t html -o eLog ./PVS-Studio.json
మీరు ఫైల్కి అన్నింటినీ జోడించిన తర్వాత, క్లిక్ చేయండి మార్పులకు కట్టుబడి ఉండండి. ప్రతిదీ సరిగ్గా ఉందని చూడటానికి, వెళ్ళండి CI/CD -> పైపులైన్ల -> రన్నింగ్. వర్చువల్ మెషీన్ విండో తెరవబడుతుంది, దాని చివరిలో కిందివి ఉండాలి:
చూసింది ఉద్యోగం విజయవంతమైంది - విజయం, అంతా బాగానే ఉంది. ఇప్పుడు మీరు ఏమి చేశారో పరీక్షించవచ్చు.
పని ఉదాహరణలు
పని యొక్క ఉదాహరణ కోసం, ఒక సాధారణ ప్రాజెక్ట్ను రూపొందిద్దాం (లో మాస్టర్) ఇది అనేక ఫైల్లను కలిగి ఉంటుంది. ఆ తర్వాత, మరొక శాఖలో మేము ఒక ఫైల్ను మాత్రమే మారుస్తాము మరియు విలీన అభ్యర్థన చేయడానికి ప్రయత్నిస్తాము.
రెండు సందర్భాలను పరిశీలిద్దాం: సవరించిన ఫైల్ లోపాన్ని కలిగి ఉన్నప్పుడు మరియు అది లేనప్పుడు. మొదట, లోపం ఉన్న ఉదాహరణ.
మాస్టర్ బ్రాంచ్లో ఫైల్ ఉందనుకుందాం Program.cs, ఇది లోపాలను కలిగి ఉండదు, కానీ మరొక శాఖలో డెవలపర్ తప్పు కోడ్ను జోడించారు మరియు విలీన అభ్యర్థన చేయాలనుకుంటున్నారు. అతను ఎలాంటి తప్పు చేసాడు అనేది అంత ముఖ్యమైనది కాదు, ప్రధాన విషయం ఏమిటంటే అది ఉనికిలో ఉంది. ఉదాహరణకు, ఆపరేటర్ మర్చిపోయారు త్రో (అవును,
void MyAwesomeMethod(String name)
{
if (name == null)
new ArgumentNullException(....);
// do something
....
}
లోపంతో ఒక ఉదాహరణను విశ్లేషించడం యొక్క ఫలితాన్ని చూద్దాం. ఒక ఫైల్ మాత్రమే అన్వయించబడిందని నిర్ధారించుకోవడానికి, నేను ఫ్లాగ్ని జోడించాను -r pvs-studio-dotnet లాంచ్ లైన్కు:
ఎనలైజర్ లోపాన్ని కనుగొన్నట్లు మరియు శాఖలను విలీనం చేయడానికి అనుమతించలేదని మేము చూస్తున్నాము.
లోపం లేకుండా ఉదాహరణను తనిఖీ చేద్దాం. కోడ్ని సరి చేస్తోంది:
void MyAwesomeMethod(String name)
{
if (name == null)
throw new ArgumentNullException(....);
// do something
....
}
అభ్యర్థన విశ్లేషణ ఫలితాలను విలీనం చేయండి:
మేము చూడగలిగినట్లుగా, లోపాలు ఏవీ కనుగొనబడలేదు మరియు టాస్క్ ఎగ్జిక్యూషన్ విజయవంతమైంది, ఇది మేము తనిఖీ చేయాలనుకుంటున్నాము.
తీర్మానం
శాఖలను విలీనం చేసే ముందు చెడు కోడ్ను తొలగించడం చాలా సౌకర్యవంతంగా మరియు ఆహ్లాదకరంగా ఉంటుంది. మీరు CI/CDని ఉపయోగిస్తుంటే, తనిఖీ చేయడానికి స్టాటిక్ ఎనలైజర్ను పొందుపరచడానికి ప్రయత్నించండి. అంతేకాక, ఇది చాలా సరళంగా చేయబడుతుంది.
మీ దృష్టిని ధన్యవాదాలు.
మీరు ఈ కథనాన్ని ఇంగ్లీష్ మాట్లాడే ప్రేక్షకులతో భాగస్వామ్యం చేయాలనుకుంటే, దయచేసి అనువాద లింక్ని ఉపయోగించండి: నికోలాయ్ మిరోనోవ్.
మూలం: www.habr.com