
GitLab ಇಷ್ಟ ಆದರೆ ದೋಷಗಳನ್ನು ದ್ವೇಷಿಸುತ್ತೀರಾ? ನಿಮ್ಮ ಮೂಲ ಕೋಡ್ನ ಗುಣಮಟ್ಟವನ್ನು ಸುಧಾರಿಸಲು ಬಯಸುವಿರಾ? ಹಾಗಾದರೆ ನೀವು ಸರಿಯಾದ ಸ್ಥಳಕ್ಕೆ ಬಂದಿದ್ದೀರಿ. ವಿಲೀನ ವಿನಂತಿಗಳನ್ನು ಪರಿಶೀಲಿಸಲು PVS-Studio C# ವಿಶ್ಲೇಷಕವನ್ನು ಹೇಗೆ ಕಾನ್ಫಿಗರ್ ಮಾಡುವುದು ಎಂಬುದನ್ನು ಇಂದು ನಾವು ವಿವರಿಸುತ್ತೇವೆ. ಯುನಿಕಾರ್ನ್ ತರಹದ ಮನಸ್ಥಿತಿಯನ್ನು ಹೊಂದಿರಿ ಮತ್ತು ಆನಂದಿಸಿ.
— C, C++, C#, ಮತ್ತು ಜಾವಾದಲ್ಲಿ ಬರೆಯಲಾದ ಪ್ರೋಗ್ರಾಂಗಳ ಮೂಲ ಕೋಡ್ನಲ್ಲಿ ದೋಷಗಳು ಮತ್ತು ಸಂಭಾವ್ಯ ದುರ್ಬಲತೆಗಳನ್ನು ಗುರುತಿಸುವ ಸಾಧನವಾಗಿದೆ. ಇದು 64-ಬಿಟ್ ಸಿಸ್ಟಮ್ಗಳಲ್ಲಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ. Windows, Linux и macOSಇದು 32-ಬಿಟ್, 64-ಬಿಟ್ ಮತ್ತು ಎಂಬೆಡೆಡ್ ARM ಪ್ಲಾಟ್ಫಾರ್ಮ್ಗಳನ್ನು ಗುರಿಯಾಗಿಟ್ಟುಕೊಂಡು ಕೋಡ್ ಅನ್ನು ವಿಶ್ಲೇಷಿಸಬಹುದು.
ಅಂದಹಾಗೆ, ನಾವು PVS-ಸ್ಟುಡಿಯೋ 7.08 ಅನ್ನು ಬಿಡುಗಡೆ ಮಾಡಿದ್ದೇವೆ, ಅದರಲ್ಲಿ ನಾವು ಬಹಳಷ್ಟು ಕೆಲಸಗಳನ್ನು ಮಾಡಿದ್ದೇವೆ. . ಉದಾಹರಣೆಗೆ:
- C# ವಿಶ್ಲೇಷಕ ಅಡಿಯಲ್ಲಿ Linux и macOS;
- ರೈಡರ್ಗಾಗಿ ಪ್ಲಗಿನ್;
- ಹೊಸ ಫೈಲ್ ಪಟ್ಟಿ ಪರಿಶೀಲನಾ ವಿಧಾನ.
ಫೈಲ್ ಪಟ್ಟಿ ಪರಿಶೀಲನೆ ಮೋಡ್
ಹಿಂದೆ, ನಿರ್ದಿಷ್ಟ ಫೈಲ್ಗಳನ್ನು ಪರಿಶೀಲಿಸಲು, ನೀವು ಫೈಲ್ ಪಟ್ಟಿಯನ್ನು ಹೊಂದಿರುವ .xml ಫೈಲ್ ಅನ್ನು ವಿಶ್ಲೇಷಕಕ್ಕೆ ರವಾನಿಸಬೇಕಾಗಿತ್ತು. ಆದಾಗ್ಯೂ, ಇದು ತುಂಬಾ ಅನುಕೂಲಕರವಾಗಿಲ್ಲದ ಕಾರಣ, ನಾವು .txt ಫೈಲ್ ಅನ್ನು ರವಾನಿಸುವ ಸಾಮರ್ಥ್ಯವನ್ನು ಸೇರಿಸಿದ್ದೇವೆ, ಇದು ವಿಷಯಗಳನ್ನು ಹೆಚ್ಚು ಸುಲಭಗೊಳಿಸುತ್ತದೆ.
ನಿರ್ದಿಷ್ಟ ಫೈಲ್ಗಳನ್ನು ಪರಿಶೀಲಿಸಲು, ನೀವು ಫ್ಲ್ಯಾಗ್ ಅನ್ನು ನಿರ್ದಿಷ್ಟಪಡಿಸಬೇಕು —ಮೂಲ ಫೈಲ್ಗಳು (-f) ಮತ್ತು ಫೈಲ್ಗಳ ಪಟ್ಟಿಯೊಂದಿಗೆ .txt ಫೈಲ್ ಅನ್ನು ವರ್ಗಾಯಿಸಿ. ಇದು ಈ ರೀತಿ ಕಾಣುತ್ತದೆ:
pvs-studio-dotnet -t path/to/solution.sln -f fileList.txt -o project.jsonನೀವು ಕಮಿಟ್ಗಳು ಅಥವಾ ಪುಲ್ ವಿನಂತಿಗಳ ವಿಮರ್ಶೆಯನ್ನು ಕಸ್ಟಮೈಸ್ ಮಾಡಲು ಆಸಕ್ತಿ ಹೊಂದಿದ್ದರೆ, ನೀವು ಈ ಮೋಡ್ ಬಳಸಿಯೂ ಅದನ್ನು ಮಾಡಬಹುದು. ವ್ಯತ್ಯಾಸವು ವಿಶ್ಲೇಷಿಸಬೇಕಾದ ಫೈಲ್ಗಳ ಪಟ್ಟಿಯಲ್ಲಿರುತ್ತದೆ ಮತ್ತು ಅದು ನೀವು ಬಳಸುತ್ತಿರುವ ವ್ಯವಸ್ಥೆಗಳನ್ನು ಅವಲಂಬಿಸಿರುತ್ತದೆ.
ವಿಲೀನ ವಿನಂತಿ ಪರಿಶೀಲನೆ ತತ್ವ
ಪರಿಶೀಲನೆಯ ಮುಖ್ಯ ಉದ್ದೇಶವೆಂದರೆ ವಿಶ್ಲೇಷಕದಿಂದ ಪತ್ತೆಯಾದ ಸಮಸ್ಯೆಗಳು ವಿಲೀನಕ್ಕೆ ಬರುವುದಿಲ್ಲ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳುವುದು. ಮಾಸ್ಟರ್ ಶಾಖೆ. ನಾವು ಪ್ರತಿ ಬಾರಿಯೂ ಸಂಪೂರ್ಣ ಯೋಜನೆಯನ್ನು ವಿಶ್ಲೇಷಿಸಲು ಬಯಸುವುದಿಲ್ಲ. ವಿಶೇಷವಾಗಿ ಶಾಖೆಗಳನ್ನು ವಿಲೀನಗೊಳಿಸುವಾಗ, ನಮ್ಮಲ್ಲಿ ಬದಲಾದ ಫೈಲ್ಗಳ ಪಟ್ಟಿ ಇರುತ್ತದೆ. ಆದ್ದರಿಂದ, ವಿಲೀನ ವಿನಂತಿ ಪರಿಶೀಲನೆಯನ್ನು ಸೇರಿಸಲು ನಾನು ಪ್ರಸ್ತಾಪಿಸುತ್ತೇನೆ.
ಸ್ಥಿರ ವಿಶ್ಲೇಷಕವನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸುವ ಮೊದಲು ವಿಲೀನ ವಿನಂತಿಯು ಈ ರೀತಿ ಕಾಣುತ್ತದೆ:

ಅಂದರೆ, ಶಾಖೆಯಲ್ಲಿದ್ದ ಎಲ್ಲಾ ದೋಷಗಳು ಬದಲಾವಣೆಗಳನ್ನು, ಮಾಸ್ಟರ್ ಶಾಖೆಗೆ ವರ್ಗಾಯಿಸಲಾಗುತ್ತದೆ. ನಮಗೆ ಇದು ಬೇಡವಾದ್ದರಿಂದ, ನಾವು ವಿಶ್ಲೇಷಣೆಯನ್ನು ಸೇರಿಸುತ್ತೇವೆ ಮತ್ತು ಈಗ ರೇಖಾಚಿತ್ರವು ಈ ರೀತಿ ಕಾಣುತ್ತದೆ:

ನಾವು ವಿಶ್ಲೇಷಿಸುತ್ತೇವೆ ಬದಲಾವಣೆಗಳು2 ಮತ್ತು ಯಾವುದೇ ದೋಷಗಳಿಲ್ಲದಿದ್ದರೆ, ನಾವು ವಿಲೀನ ವಿನಂತಿಯನ್ನು ಸ್ವೀಕರಿಸುತ್ತೇವೆ, ಇಲ್ಲದಿದ್ದರೆ ನಾವು ಅದನ್ನು ತಿರಸ್ಕರಿಸುತ್ತೇವೆ.
ಅಂದಹಾಗೆ, ನೀವು C/C++ ಗಾಗಿ ಕಮಿಟ್ಗಳು ಮತ್ತು ಪುಲ್ ವಿನಂತಿಗಳನ್ನು ವಿಶ್ಲೇಷಿಸಲು ಆಸಕ್ತಿ ಹೊಂದಿದ್ದರೆ, ನೀವು ಅದರ ಬಗ್ಗೆ ಓದಬಹುದು. .
ಗಿಟ್ಲಾಬ್
— ಒಂದು ಓಪನ್-ಸೋರ್ಸ್ ವೆಬ್-ಆಧಾರಿತ DevOps ಜೀವನಚಕ್ರ ಸಾಧನವಾಗಿದ್ದು, ಇದು Git ಗಾಗಿ ತನ್ನದೇ ಆದ ವಿಕಿ, ಸಮಸ್ಯೆ ಟ್ರ್ಯಾಕಿಂಗ್ ವ್ಯವಸ್ಥೆ, CI/CD ಪೈಪ್ಲೈನ್ ಮತ್ತು ಇತರ ವೈಶಿಷ್ಟ್ಯಗಳೊಂದಿಗೆ ಕೋಡ್ ರೆಪೊಸಿಟರಿ ನಿರ್ವಹಣಾ ವ್ಯವಸ್ಥೆಯನ್ನು ಒದಗಿಸುತ್ತದೆ.
ನೀವು ವಿಲೀನ ವಿನಂತಿಗಳನ್ನು ವಿಶ್ಲೇಷಿಸಲು ಪ್ರಾರಂಭಿಸುವ ಮೊದಲು, ನೀವು ನಿಮ್ಮ ಯೋಜನೆಯನ್ನು ನೋಂದಾಯಿಸಿಕೊಳ್ಳಬೇಕು ಮತ್ತು ಅಪ್ಲೋಡ್ ಮಾಡಬೇಕು. ಇದನ್ನು ಹೇಗೆ ಮಾಡಬೇಕೆಂದು ನಿಮಗೆ ತಿಳಿದಿಲ್ಲದಿದ್ದರೆ, ನಾನು ಸೂಚಿಸುತ್ತೇನೆ ನನ್ನ ಸಹೋದ್ಯೋಗಿ.
ಹೇಳಿಕೆಯನ್ನುಕೆಳಗೆ ವಿವರಿಸಿದ ಪರಿಸರ ಸೆಟಪ್ ವಿಧಾನವು ಒಂದು ಸಂಭಾವ್ಯ ವಿಧಾನವಾಗಿದೆ. ವಿಶ್ಲೇಷಣೆಗೆ ಅಗತ್ಯವಾದ ಪರಿಸರವನ್ನು ಸ್ಥಾಪಿಸಲು ಮತ್ತು ವಿಶ್ಲೇಷಕವನ್ನು ಚಲಾಯಿಸಲು ಹಂತಗಳನ್ನು ಪ್ರದರ್ಶಿಸುವುದು ಗುರಿಯಾಗಿದೆ. ಬಹುಶಃ, ನಿಮ್ಮ ಸಂದರ್ಭದಲ್ಲಿ, ಪರಿಸರ ಸಿದ್ಧತೆಯ ಹಂತಗಳನ್ನು (ರೆಪೊಸಿಟರಿಗಳನ್ನು ಸೇರಿಸುವುದು, ವಿಶ್ಲೇಷಕವನ್ನು ಸ್ಥಾಪಿಸುವುದು) ಮತ್ತು ವಿಶ್ಲೇಷಣೆಯನ್ನು ಪ್ರತ್ಯೇಕಿಸುವುದು ಹೆಚ್ಚು ಸೂಕ್ತವಾಗಿರುತ್ತದೆ: ಉದಾಹರಣೆಗೆ, ಅಗತ್ಯವಿರುವ ಪರಿಸರದೊಂದಿಗೆ ಡಾಕರ್ ಚಿತ್ರಗಳನ್ನು ಸಿದ್ಧಪಡಿಸುವುದು ಮತ್ತು ಅವುಗಳನ್ನು ಬಳಸುವುದು, ಅಥವಾ ಬೇರೆ ಯಾವುದಾದರೂ ವಿಧಾನ.
ಏನಾಗಲಿದೆ ಎಂಬುದನ್ನು ಚೆನ್ನಾಗಿ ಅರ್ಥಮಾಡಿಕೊಳ್ಳಲು, ಈ ಕೆಳಗಿನ ರೇಖಾಚಿತ್ರವನ್ನು ನೋಡಲು ನಾನು ನಿಮಗೆ ಸೂಚಿಸುತ್ತೇನೆ:

ವಿಶ್ಲೇಷಕಕ್ಕೆ .NET ಕೋರ್ SDK 3 ಅಗತ್ಯವಿದೆ, ಆದ್ದರಿಂದ ವಿಶ್ಲೇಷಕವನ್ನು ಸ್ಥಾಪಿಸುವ ಮೊದಲು, ನೀವು ವಿಶ್ಲೇಷಕದ ಅವಲಂಬನೆಗಳನ್ನು ಸ್ಥಾಪಿಸುವ Microsoft ರೆಪೊಸಿಟರಿಗಳನ್ನು ಸೇರಿಸಬೇಕಾಗುತ್ತದೆ. ವಿವಿಧ ವಿತರಣೆಗಳಿಗಾಗಿ Microsoft ರೆಪೊಸಿಟರಿಗಳನ್ನು ಸೇರಿಸುವುದು. Linux .
ಪ್ಯಾಕೇಜ್ ಮ್ಯಾನೇಜರ್ ಮೂಲಕ 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 updatePVS-ಸ್ಟುಡಿಯೋ ಮತ್ತು ವಿಶ್ಲೇಷಕ ರೆಪೊಸಿಟರಿಗಳನ್ನು ಸೇರಿಸುವುದು:
- 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"/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ಈಗ ನಾವು ಶಾಖೆಗಳ ನಡುವಿನ ವ್ಯತ್ಯಾಸವನ್ನು ಪಡೆಯುತ್ತೇವೆ ಮತ್ತು ಫಲಿತಾಂಶವನ್ನು ಉಳಿಸುತ್ತೇವೆ txt ಕಡತ:
- git diff --name-only origin/master $CI_COMMIT_SHA > pvs-fl.txtಎಲ್ಲಿ $ಸಿಐ_ಕಮಿಟ್_ಎಸ್ಎಚ್ಎ – ಕೊನೆಯ ಕಮಿಟ್ನ ಹ್ಯಾಶ್.
ಮುಂದೆ, ನಾವು ಫ್ಲ್ಯಾಗ್ ಬಳಸಿ ಫೈಲ್ ಪಟ್ಟಿಯ ವಿಶ್ಲೇಷಣೆಯನ್ನು ಪ್ರಾರಂಭಿಸುತ್ತೇವೆ. -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ಉಪಯುಕ್ತತೆ — ಪಾರ್ಸರ್ ದೋಷ ವರದಿಗಳನ್ನು HTML ನಂತಹ ವಿವಿಧ ಸ್ವರೂಪಗಳಾಗಿ ಪರಿವರ್ತಿಸಲು ಬಳಸಲಾಗುವ ಓಪನ್-ಸೋರ್ಸ್ ಯೋಜನೆಯಾಗಿದೆ. ಉಪಯುಕ್ತತೆಯ ಬಗ್ಗೆ ಹೆಚ್ಚು ವಿವರವಾದ ವಿವರಣೆಯನ್ನು "ಪ್ಲಾಗ್ ಪರಿವರ್ತಕ ಉಪಯುಕ್ತತೆ" ಉಪವಿಭಾಗದಲ್ಲಿ ನೀಡಲಾಗಿದೆ. .
ಅಂದಹಾಗೆ, ನೀವು IDE ಯಿಂದ ಸ್ಥಳೀಯವಾಗಿ .json ವರದಿಯೊಂದಿಗೆ ಅನುಕೂಲಕರವಾಗಿ ಕೆಲಸ ಮಾಡಲು ಬಯಸಿದರೆ, ನಾನು ನಮ್ಮದನ್ನು ಸೂಚಿಸುತ್ತೇನೆ IDE ರೈಡರ್ಗಾಗಿ. ಇದರ ಬಳಕೆಯನ್ನು ಹೆಚ್ಚು ವಿವರವಾಗಿ ಇಲ್ಲಿ ವಿವರಿಸಲಾಗಿದೆ .
ಅನುಕೂಲಕ್ಕಾಗಿ, ಇಲ್ಲಿದೆ .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ನೀವು ಫೈಲ್ಗೆ ಎಲ್ಲವನ್ನೂ ಸೇರಿಸಿದ ನಂತರ, ಕ್ಲಿಕ್ ಮಾಡಿ ಬದಲಾವಣೆಗಳನ್ನು ಮಾಡಿಎಲ್ಲವೂ ಸರಿಯಾಗಿದೆಯೇ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಲು, ಇಲ್ಲಿಗೆ ಹೋಗಿ ಸಿಐ / ಸಿಡಿ -> ಪೈಪ್ಲೈನ್ಗಳು -> ರನ್ನಿಂಗ್ಒಂದು ವರ್ಚುವಲ್ ಮೆಷಿನ್ ವಿಂಡೋ ತೆರೆಯುತ್ತದೆ, ಅದರ ಕೊನೆಯಲ್ಲಿ ನೀವು ಈ ಕೆಳಗಿನವುಗಳನ್ನು ನೋಡಬೇಕು:

ನಾವು ನೋಡಿದೆವು ಕೆಲಸ ಯಶಸ್ವಿಯಾಯಿತು – ಯಶಸ್ಸು, ಎಲ್ಲವೂ ಚೆನ್ನಾಗಿದೆ. ಈಗ ನಾವು ಏನು ಮಾಡಿದ್ದೇವೆಂದು ಪರೀಕ್ಷಿಸಬಹುದು.
ಕೆಲಸದ ಉದಾಹರಣೆಗಳು
ಕೆಲಸವನ್ನು ವಿವರಿಸಲು, ಒಂದು ಸರಳ ಯೋಜನೆಯನ್ನು ರಚಿಸೋಣ (ಇನ್ ಮಾಸ್ಟರ್) ಹಲವಾರು ಫೈಲ್ಗಳನ್ನು ಹೊಂದಿರುತ್ತದೆ. ಅದರ ನಂತರ, ಇನ್ನೊಂದು ಶಾಖೆಯಲ್ಲಿ, ನಾವು ಒಂದು ಫೈಲ್ ಅನ್ನು ಮಾತ್ರ ಬದಲಾಯಿಸುತ್ತೇವೆ ಮತ್ತು ವಿಲೀನ ವಿನಂತಿಯನ್ನು ಮಾಡಲು ಪ್ರಯತ್ನಿಸುತ್ತೇವೆ.
ಎರಡು ಪ್ರಕರಣಗಳನ್ನು ಪರಿಗಣಿಸೋಣ: ಒಂದು ಮಾರ್ಪಡಿಸಿದ ಫೈಲ್ ದೋಷವನ್ನು ಹೊಂದಿದ್ದರೆ ಮತ್ತು ಇನ್ನೊಂದು ದೋಷವನ್ನು ಹೊಂದಿಲ್ಲ. ಮೊದಲು, ದೋಷವಿರುವ ಉದಾಹರಣೆ.
ಮಾಸ್ಟರ್ ಶಾಖೆಯಲ್ಲಿ ಒಂದು ಫೈಲ್ ಇದೆ ಎಂದು ಹೇಳೋಣ. ಪ್ರೋಗ್ರಾಂ.ಸಿಎಸ್, ಇದರಲ್ಲಿ ಯಾವುದೇ ದೋಷಗಳಿಲ್ಲ, ಮತ್ತು ಇನ್ನೊಂದು ಶಾಖೆಯಲ್ಲಿ, ಡೆವಲಪರ್ ತಪ್ಪಾದ ಕೋಡ್ ಅನ್ನು ಸೇರಿಸಿದ್ದಾರೆ ಮತ್ತು ವಿಲೀನ ವಿನಂತಿಯನ್ನು ಮಾಡಲು ಬಯಸುತ್ತಾರೆ. ನಿಖರವಾದ ದೋಷವು ಅಷ್ಟು ಮುಖ್ಯವಲ್ಲ, ಮುಖ್ಯ ವಿಷಯವೆಂದರೆ ಅದು ಅಸ್ತಿತ್ವದಲ್ಲಿದೆ. ಉದಾಹರಣೆಗೆ, ಅವರು ಆಪರೇಟರ್ ಅನ್ನು ಮರೆತಿದ್ದಾರೆ ಎಸೆಯಿರಿ (ಹೌದು, ):
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
