PVS-ಸ್ಟುಡಿಯೋವನ್ನು ಬಳಸಿಕೊಂಡು ಟ್ರಾವಿಸ್ CI, ಬಡ್ಡಿ ಮತ್ತು AppVeyor ನಲ್ಲಿ ಕಮಿಟ್‌ಗಳ ವಿಶ್ಲೇಷಣೆ ಮತ್ತು ಪುಲ್ ವಿನಂತಿಗಳು

PVS-ಸ್ಟುಡಿಯೋವನ್ನು ಬಳಸಿಕೊಂಡು ಟ್ರಾವಿಸ್ CI, ಬಡ್ಡಿ ಮತ್ತು AppVeyor ನಲ್ಲಿ ಕಮಿಟ್‌ಗಳ ವಿಶ್ಲೇಷಣೆ ಮತ್ತು ಪುಲ್ ವಿನಂತಿಗಳು
ಲಿನಕ್ಸ್ ಮತ್ತು ಮ್ಯಾಕೋಸ್‌ನಲ್ಲಿನ ಸಿ ಮತ್ತು ಸಿ ++ ಭಾಷೆಗಳಿಗಾಗಿ ಪಿವಿಎಸ್-ಸ್ಟುಡಿಯೋ ವಿಶ್ಲೇಷಕದಲ್ಲಿ, ಆವೃತ್ತಿ 7.04 ರಿಂದ ಪ್ರಾರಂಭಿಸಿ, ನಿರ್ದಿಷ್ಟಪಡಿಸಿದ ಫೈಲ್‌ಗಳ ಪಟ್ಟಿಯನ್ನು ಪರಿಶೀಲಿಸಲು ಪರೀಕ್ಷಾ ಆಯ್ಕೆಯು ಕಾಣಿಸಿಕೊಂಡಿದೆ. ಹೊಸ ಮೋಡ್ ಅನ್ನು ಬಳಸಿಕೊಂಡು, ಕಮಿಟ್‌ಗಳನ್ನು ಪರಿಶೀಲಿಸಲು ಮತ್ತು ವಿನಂತಿಗಳನ್ನು ಎಳೆಯಲು ನೀವು ವಿಶ್ಲೇಷಕವನ್ನು ಕಾನ್ಫಿಗರ್ ಮಾಡಬಹುದು. ಟ್ರಾವಿಸ್ CI, ಬಡ್ಡಿ ಮತ್ತು AppVeyor ನಂತಹ ಜನಪ್ರಿಯ CI (ನಿರಂತರ ಏಕೀಕರಣ) ವ್ಯವಸ್ಥೆಗಳಲ್ಲಿ GitHub ಯೋಜನೆಯ ಬದಲಾದ ಫೈಲ್‌ಗಳ ಪಟ್ಟಿಯನ್ನು ಪರಿಶೀಲಿಸುವುದನ್ನು ಹೇಗೆ ಹೊಂದಿಸುವುದು ಎಂಬುದನ್ನು ಈ ಲೇಖನವು ನಿಮಗೆ ತಿಳಿಸುತ್ತದೆ.

ಫೈಲ್ ಪಟ್ಟಿ ಪರಿಶೀಲನೆ ಮೋಡ್

ಪಿವಿಎಸ್-ಸ್ಟುಡಿಯೋ C, C++, C# ಮತ್ತು Java ನಲ್ಲಿ ಬರೆಯಲಾದ ಪ್ರೋಗ್ರಾಂಗಳ ಮೂಲ ಕೋಡ್‌ನಲ್ಲಿ ದೋಷಗಳು ಮತ್ತು ಸಂಭಾವ್ಯ ದೋಷಗಳನ್ನು ಗುರುತಿಸುವ ಸಾಧನವಾಗಿದೆ. Windows, Linux ಮತ್ತು macOS ನಲ್ಲಿ 64-ಬಿಟ್ ಸಿಸ್ಟಮ್‌ಗಳಲ್ಲಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ.

Linux ಮತ್ತು macOS ಗಾಗಿ PVS-Studio 7.04 ಆವೃತ್ತಿಯಲ್ಲಿ, ಮೂಲ ಫೈಲ್‌ಗಳ ಪಟ್ಟಿಯನ್ನು ಪರಿಶೀಲಿಸುವ ಮೋಡ್ ಕಾಣಿಸಿಕೊಂಡಿದೆ. ಫೈಲ್ ಅನ್ನು ರಚಿಸಲು ನಿಮಗೆ ಬಿಲ್ಡ್ ಸಿಸ್ಟಮ್ ಅನುಮತಿಸುವ ಯೋಜನೆಗಳಿಗೆ ಇದು ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತದೆ compile_commands.json. ನಿರ್ದಿಷ್ಟಪಡಿಸಿದ ಫೈಲ್‌ಗಳ ಸಂಕಲನದ ಬಗ್ಗೆ ಮಾಹಿತಿಯನ್ನು ಹೊರತೆಗೆಯಲು ವಿಶ್ಲೇಷಕಕ್ಕೆ ಇದು ಅಗತ್ಯವಿದೆ. ನಿಮ್ಮ ಬಿಲ್ಡ್ ಸಿಸ್ಟಮ್ compile_commands.json ಫೈಲ್ ಅನ್ನು ಉತ್ಪಾದಿಸುವುದನ್ನು ಬೆಂಬಲಿಸದಿದ್ದರೆ, ನೀವು ಉಪಯುಕ್ತತೆಯನ್ನು ಬಳಸಿಕೊಂಡು ಅಂತಹ ಫೈಲ್ ಅನ್ನು ರಚಿಸಲು ಪ್ರಯತ್ನಿಸಬಹುದು ಕರಡಿ.

ಅಲ್ಲದೆ, ಕಂಪೈಲರ್ ಲಾಂಚ್‌ಗಳ (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++ ಫೈಲ್‌ಗಳನ್ನು ವಿಶ್ಲೇಷಿಸುವ ವೈಶಿಷ್ಟ್ಯವಾಗಿದೆ. ಭವಿಷ್ಯದಲ್ಲಿ, ಅವಲಂಬನೆ ಫೈಲ್ ಅನ್ನು ಕ್ಯಾಶ್ ಮಾಡಬಹುದು ಮತ್ತು ವಿಶ್ಲೇಷಕದಿಂದ ಅದನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ನವೀಕರಿಸಲಾಗುತ್ತದೆ. ಇನ್‌ಕ್ರಿಮೆಂಟಲ್ ಅನಾಲಿಸಿಸ್ ಮೋಡ್ ಅನ್ನು ಬಳಸುವುದಕ್ಕಿಂತ ಫೈಲ್ ಲಿಸ್ಟ್ ಚೆಕಿಂಗ್ ಮೋಡ್ ಅನ್ನು ಬಳಸುವಾಗ ಕಮಿಟ್‌ಗಳನ್ನು ಪರಿಶೀಲಿಸುವುದರ ಪ್ರಯೋಜನವೆಂದರೆ ನೀವು ಆ ಫೈಲ್ ಅನ್ನು ಮಾತ್ರ ಸಂಗ್ರಹಿಸಬೇಕಾಗುತ್ತದೆ ಮತ್ತು ಆಬ್ಜೆಕ್ಟ್ ಫೈಲ್‌ಗಳನ್ನು ಅಲ್ಲ.

ಪುಲ್ ವಿನಂತಿ ವಿಶ್ಲೇಷಣೆಯ ಸಾಮಾನ್ಯ ತತ್ವಗಳು

ಸಂಪೂರ್ಣ ಯೋಜನೆಯನ್ನು ವಿಶ್ಲೇಷಿಸಲು ಸಾಕಷ್ಟು ಸಮಯ ತೆಗೆದುಕೊಳ್ಳುತ್ತದೆ, ಆದ್ದರಿಂದ ಅದರ ಒಂದು ನಿರ್ದಿಷ್ಟ ಭಾಗವನ್ನು ಮಾತ್ರ ಪರಿಶೀಲಿಸಲು ಇದು ಅರ್ಥಪೂರ್ಣವಾಗಿದೆ. ಸಮಸ್ಯೆಯೆಂದರೆ ನೀವು ಹೊಸ ಫೈಲ್‌ಗಳನ್ನು ಉಳಿದ ಪ್ರಾಜೆಕ್ಟ್ ಫೈಲ್‌ಗಳಿಂದ ಪ್ರತ್ಯೇಕಿಸಬೇಕಾಗಿದೆ.

ಎರಡು ಶಾಖೆಗಳನ್ನು ಹೊಂದಿರುವ ಕಮಿಟ್ ಮರದ ಉದಾಹರಣೆಯನ್ನು ನೋಡೋಣ:

PVS-ಸ್ಟುಡಿಯೋವನ್ನು ಬಳಸಿಕೊಂಡು ಟ್ರಾವಿಸ್ CI, ಬಡ್ಡಿ ಮತ್ತು AppVeyor ನಲ್ಲಿ ಕಮಿಟ್‌ಗಳ ವಿಶ್ಲೇಷಣೆ ಮತ್ತು ಪುಲ್ ವಿನಂತಿಗಳು

ಆ ಬದ್ಧತೆಯನ್ನು ಕಲ್ಪಿಸಿಕೊಳ್ಳೋಣ A1 ಈಗಾಗಲೇ ಪರೀಕ್ಷಿಸಲಾದ ಸಾಕಷ್ಟು ದೊಡ್ಡ ಪ್ರಮಾಣದ ಕೋಡ್ ಅನ್ನು ಒಳಗೊಂಡಿದೆ. ಸ್ವಲ್ಪ ಮುಂಚಿತವಾಗಿ ನಾವು ಕಮಿಟ್ನಿಂದ ಶಾಖೆಯನ್ನು ಮಾಡಿದೆವು A1 ಮತ್ತು ಕೆಲವು ಫೈಲ್‌ಗಳನ್ನು ಬದಲಾಯಿಸಲಾಗಿದೆ.

ಸಹಜವಾಗಿ, ನೀವು ಅದನ್ನು ನಂತರ ಗಮನಿಸಿದ್ದೀರಿ A1 ಇನ್ನೂ ಎರಡು ಬದ್ಧತೆಗಳು ಸಂಭವಿಸಿವೆ, ಆದರೆ ಇವುಗಳು ಇತರ ಶಾಖೆಗಳ ವಿಲೀನಗಳಾಗಿವೆ, ಏಕೆಂದರೆ ನಾವು ಬದ್ಧರಾಗಿರುವುದಿಲ್ಲ ಮಾಸ್ಟರ್. ಮತ್ತು ಈಗ ಸಮಯ ಬಂದಾಗ ಬಂದಿದೆ ಹಾಟ್ಫಿಕ್ಸ್ ಸಿದ್ಧವಾಗಿದೆ. ಅದಕ್ಕಾಗಿಯೇ ವಿಲೀನಕ್ಕಾಗಿ ಪುಲ್ ವಿನಂತಿ ಕಾಣಿಸಿಕೊಂಡಿದೆ 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

ಈ ಆಜ್ಞೆಯು ದೋಷಗಳನ್ನು ಪಟ್ಟಿ ಮಾಡುತ್ತದೆ stderr (ಪ್ರಮಾಣಿತ ದೋಷ ಸಂದೇಶದ ಔಟ್ಪುಟ್).

ಈಗ ಮಾತ್ರ ನಾವು ದೋಷಗಳನ್ನು ಪ್ರದರ್ಶಿಸಲು ಮಾತ್ರವಲ್ಲ, ಸಮಸ್ಯೆಗಳ ಉಪಸ್ಥಿತಿಯ ಬಗ್ಗೆ ಅಸೆಂಬ್ಲಿ ಮತ್ತು ಪರೀಕ್ಷೆಗಾಗಿ ನಮ್ಮ ಸೇವೆಗೆ ತಿಳಿಸಬೇಕಾಗಿದೆ. ಈ ಉದ್ದೇಶಕ್ಕಾಗಿ, ಪರಿವರ್ತಕಕ್ಕೆ ಧ್ವಜವನ್ನು ಸೇರಿಸಲಾಯಿತು -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 ಯೋಜನೆಯ ರೆಪೊಸಿಟರಿಯ ಹೆಸರನ್ನು ಸಂಗ್ರಹಿಸುತ್ತದೆ.

ಈ ಕಾರ್ಯಕ್ಕಾಗಿ ಅಲ್ಗಾರಿದಮ್:

PVS-ಸ್ಟುಡಿಯೋವನ್ನು ಬಳಸಿಕೊಂಡು ಟ್ರಾವಿಸ್ CI, ಬಡ್ಡಿ ಮತ್ತು AppVeyor ನಲ್ಲಿ ಕಮಿಟ್‌ಗಳ ವಿಶ್ಲೇಷಣೆ ಮತ್ತು ಪುಲ್ ವಿನಂತಿಗಳು
ಟ್ರಾವಿಸ್ CI ರಿಟರ್ನ್ ಕೋಡ್‌ಗಳಿಗೆ ಪ್ರತಿಕ್ರಿಯಿಸುತ್ತದೆ, ಆದ್ದರಿಂದ ಎಚ್ಚರಿಕೆಗಳ ಉಪಸ್ಥಿತಿಯು ದೋಷಗಳನ್ನು ಹೊಂದಿರುವಂತೆ ಬದ್ಧತೆಯನ್ನು ಗುರುತಿಸಲು ಸೇವೆಗೆ ತಿಳಿಸುತ್ತದೆ.

ಈಗ ಈ ಸಾಲಿನ ಕೋಡ್ ಅನ್ನು ಹತ್ತಿರದಿಂದ ನೋಡೋಣ:

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

ಪುಲ್ ವಿನಂತಿಯನ್ನು ವಿಶ್ಲೇಷಿಸುವಾಗ ಟ್ರಾವಿಸ್ CI ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಶಾಖೆಗಳನ್ನು ವಿಲೀನಗೊಳಿಸುತ್ತದೆ ಎಂಬುದು ಸತ್ಯ:

PVS-ಸ್ಟುಡಿಯೋವನ್ನು ಬಳಸಿಕೊಂಡು ಟ್ರಾವಿಸ್ CI, ಬಡ್ಡಿ ಮತ್ತು AppVeyor ನಲ್ಲಿ ಕಮಿಟ್‌ಗಳ ವಿಶ್ಲೇಷಣೆ ಮತ್ತು ಪುಲ್ ವಿನಂತಿಗಳು
ಆದ್ದರಿಂದ ನಾವು ವಿಶ್ಲೇಷಿಸುತ್ತೇವೆ A4ಮತ್ತು ಅಲ್ಲ B3->A3. ಈ ವೈಶಿಷ್ಟ್ಯದ ಕಾರಣ, ನಾವು ಇದರೊಂದಿಗೆ ವ್ಯತ್ಯಾಸವನ್ನು ಲೆಕ್ಕಾಚಾರ ಮಾಡಬೇಕಾಗುತ್ತದೆ ಅಕ್ಸಕ್ಸ್, ಇದು ನಿಖರವಾಗಿ ಶಾಖೆಯ ಮೇಲ್ಭಾಗವಾಗಿದೆ ಮೂಲ.

ಒಂದು ಪ್ರಮುಖ ವಿವರ ಉಳಿದಿದೆ - ಕಂಪೈಲ್ ಮಾಡಿದ ಅನುವಾದ ಘಟಕಗಳಲ್ಲಿ ಹೆಡರ್ ಫೈಲ್‌ಗಳ ಅವಲಂಬನೆಗಳನ್ನು ಹಿಡಿದಿಟ್ಟುಕೊಳ್ಳುವುದು (*.c, *.cc, *.cpp, ಇತ್ಯಾದಿ.). ವಿಶ್ಲೇಷಕವು ಫೈಲ್‌ಗಳ ಪಟ್ಟಿಯನ್ನು ಪರಿಶೀಲಿಸುವ ಕ್ರಮದಲ್ಲಿ ಮೊದಲು ಪ್ರಾರಂಭಿಸಿದಾಗ ಈ ಅವಲಂಬನೆಗಳನ್ನು ಲೆಕ್ಕಾಚಾರ ಮಾಡುತ್ತದೆ ಮತ್ತು ನಂತರ ಅವುಗಳನ್ನು .PVS-ಸ್ಟುಡಿಯೋ ಡೈರೆಕ್ಟರಿಯಲ್ಲಿ ಉಳಿಸುತ್ತದೆ. ಟ್ರಾವಿಸ್ ಸಿಐ ನಿಮಗೆ ಫೋಲ್ಡರ್‌ಗಳನ್ನು ಕ್ಯಾಶ್ ಮಾಡಲು ಅನುಮತಿಸುತ್ತದೆ, ಆದ್ದರಿಂದ ನಾವು ಡೈರೆಕ್ಟರಿ ಡೇಟಾವನ್ನು ಉಳಿಸುತ್ತೇವೆ .PVS-ಸ್ಟುಡಿಯೋ/:

cache:
  directories:
    - .PVS-Studio/

ಈ ಕೋಡ್ ಅನ್ನು ಫೈಲ್‌ಗೆ ಸೇರಿಸುವ ಅಗತ್ಯವಿದೆ .travis.yml. ಈ ಡೈರೆಕ್ಟರಿಯು ವಿಶ್ಲೇಷಣೆಯ ನಂತರ ಸಂಗ್ರಹಿಸಿದ ವಿವಿಧ ಡೇಟಾವನ್ನು ಸಂಗ್ರಹಿಸುತ್ತದೆ, ಇದು ಫೈಲ್ ಪಟ್ಟಿ ವಿಶ್ಲೇಷಣೆ ಅಥವಾ ಹೆಚ್ಚುತ್ತಿರುವ ವಿಶ್ಲೇಷಣೆಯ ನಂತರದ ರನ್‌ಗಳನ್ನು ಗಮನಾರ್ಹವಾಗಿ ವೇಗಗೊಳಿಸುತ್ತದೆ. ಇದನ್ನು ಮಾಡದಿದ್ದರೆ, ವಿಶ್ಲೇಷಕವು ಪ್ರತಿ ಬಾರಿ ಎಲ್ಲಾ ಫೈಲ್‌ಗಳನ್ನು ವಾಸ್ತವವಾಗಿ ವಿಶ್ಲೇಷಿಸುತ್ತದೆ.

ಬಡ್ಡಿ

ಟ್ರಾವಿಸ್ CI ನಂತೆ, ಬಡ್ಡಿ GitHub ನಲ್ಲಿ ಸಂಗ್ರಹವಾಗಿರುವ ಯೋಜನೆಗಳನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ನಿರ್ಮಿಸುವ ಮತ್ತು ಪರೀಕ್ಷಿಸುವ ಸಾಮರ್ಥ್ಯವನ್ನು ಒದಗಿಸುತ್ತದೆ. ಟ್ರಾವಿಸ್ CI ಗಿಂತ ಭಿನ್ನವಾಗಿ, ಇದು ವೆಬ್ ಇಂಟರ್ಫೇಸ್ನಲ್ಲಿ ಕಾನ್ಫಿಗರ್ ಮಾಡಲಾಗಿದೆ (ಬ್ಯಾಶ್ ಬೆಂಬಲ ಲಭ್ಯವಿದೆ), ಆದ್ದರಿಂದ ಯೋಜನೆಯಲ್ಲಿ ಕಾನ್ಫಿಗರೇಶನ್ ಫೈಲ್ಗಳನ್ನು ಸಂಗ್ರಹಿಸುವ ಅಗತ್ಯವಿಲ್ಲ.

ಮೊದಲನೆಯದಾಗಿ, ನಾವು ಅಸೆಂಬ್ಲಿ ಸಾಲಿಗೆ ಹೊಸ ಕ್ರಿಯೆಯನ್ನು ಸೇರಿಸಬೇಕಾಗಿದೆ:

PVS-ಸ್ಟುಡಿಯೋವನ್ನು ಬಳಸಿಕೊಂಡು ಟ್ರಾವಿಸ್ CI, ಬಡ್ಡಿ ಮತ್ತು AppVeyor ನಲ್ಲಿ ಕಮಿಟ್‌ಗಳ ವಿಶ್ಲೇಷಣೆ ಮತ್ತು ಪುಲ್ ವಿನಂತಿಗಳು
ಯೋಜನೆಯನ್ನು ನಿರ್ಮಿಸಲು ಬಳಸಿದ ಕಂಪೈಲರ್ ಅನ್ನು ಸೂಚಿಸೋಣ. ಈ ಕ್ರಿಯೆಯಲ್ಲಿ ಸ್ಥಾಪಿಸಲಾದ ಡಾಕರ್ ಕಂಟೇನರ್ ಅನ್ನು ಗಮನಿಸಿ. ಉದಾಹರಣೆಗೆ, GCC ಗಾಗಿ ವಿಶೇಷ ಕಂಟೇನರ್ ಇದೆ:

PVS-ಸ್ಟುಡಿಯೋವನ್ನು ಬಳಸಿಕೊಂಡು ಟ್ರಾವಿಸ್ CI, ಬಡ್ಡಿ ಮತ್ತು AppVeyor ನಲ್ಲಿ ಕಮಿಟ್‌ಗಳ ವಿಶ್ಲೇಷಣೆ ಮತ್ತು ಪುಲ್ ವಿನಂತಿಗಳು
ಈಗ PVS-ಸ್ಟುಡಿಯೋ ಮತ್ತು ಅಗತ್ಯ ಉಪಯುಕ್ತತೆಗಳನ್ನು ಸ್ಥಾಪಿಸೋಣ:

PVS-ಸ್ಟುಡಿಯೋವನ್ನು ಬಳಸಿಕೊಂಡು ಟ್ರಾವಿಸ್ CI, ಬಡ್ಡಿ ಮತ್ತು 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

ನೀವು ಟ್ರಾವ್ಸ್-ಸಿಐನಲ್ಲಿ ವಿಭಾಗವನ್ನು ಓದಿದರೆ, ಈ ಕೋಡ್ ನಿಮಗೆ ಈಗಾಗಲೇ ಪರಿಚಿತವಾಗಿದೆ, ಆದಾಗ್ಯೂ, ಈಗ ಹೊಸ ಹಂತವಿದೆ:

PVS-ಸ್ಟುಡಿಯೋವನ್ನು ಬಳಸಿಕೊಂಡು ಟ್ರಾವಿಸ್ CI, ಬಡ್ಡಿ ಮತ್ತು AppVeyor ನಲ್ಲಿ ಕಮಿಟ್‌ಗಳ ವಿಶ್ಲೇಷಣೆ ಮತ್ತು ಪುಲ್ ವಿನಂತಿಗಳು
ಸತ್ಯವೆಂದರೆ ಈಗ ನಾವು ವಿಲೀನದ ಫಲಿತಾಂಶವನ್ನು ವಿಶ್ಲೇಷಿಸುವುದಿಲ್ಲ, ಆದರೆ ಪುಲ್ ವಿನಂತಿಯನ್ನು ಮಾಡಿದ ಶಾಖೆಯ ಮುಖ್ಯಸ್ಥ:

PVS-ಸ್ಟುಡಿಯೋವನ್ನು ಬಳಸಿಕೊಂಡು ಟ್ರಾವಿಸ್ CI, ಬಡ್ಡಿ ಮತ್ತು 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_EXECUTION_PULL_REQEUST_NO - ವಿನಂತಿ ಸಂಖ್ಯೆಯನ್ನು ಎಳೆಯಿರಿ;
  • $BUDDY_REPO_SLUG - ಬಳಕೆದಾರಹೆಸರು ಮತ್ತು ರೆಪೊಸಿಟರಿಯ ಸಂಯೋಜನೆ (ಉದಾಹರಣೆಗೆ ಗರಿಷ್ಠ/ಪರೀಕ್ಷೆ).

ಈಗ ಕೆಳಗಿನ ಬಟನ್ ಅನ್ನು ಬಳಸಿಕೊಂಡು ಬದಲಾವಣೆಗಳನ್ನು ಉಳಿಸೋಣ ಮತ್ತು ಪುಲ್ ವಿನಂತಿಯ ವಿಶ್ಲೇಷಣೆಯನ್ನು ಸಕ್ರಿಯಗೊಳಿಸೋಣ:

PVS-ಸ್ಟುಡಿಯೋವನ್ನು ಬಳಸಿಕೊಂಡು ಟ್ರಾವಿಸ್ CI, ಬಡ್ಡಿ ಮತ್ತು AppVeyor ನಲ್ಲಿ ಕಮಿಟ್‌ಗಳ ವಿಶ್ಲೇಷಣೆ ಮತ್ತು ಪುಲ್ ವಿನಂತಿಗಳು
ಟ್ರಾವಿಸ್ CI ಗಿಂತ ಭಿನ್ನವಾಗಿ, ನಾವು ನಿರ್ದಿಷ್ಟಪಡಿಸುವ ಅಗತ್ಯವಿಲ್ಲ .pvs-studio ಹಿಡಿದಿಟ್ಟುಕೊಳ್ಳುವಿಕೆಗಾಗಿ, ಬಡ್ಡಿ ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಎಲ್ಲಾ ಫೈಲ್‌ಗಳನ್ನು ನಂತರದ ಉಡಾವಣೆಗಳಿಗಾಗಿ ಸಂಗ್ರಹಿಸುತ್ತದೆ. ಆದ್ದರಿಂದ, ಬಡ್ಡಿಯಲ್ಲಿ PVS-ಸ್ಟುಡಿಯೋಗಾಗಿ ಲಾಗಿನ್ ಮತ್ತು ಪಾಸ್ವರ್ಡ್ ಅನ್ನು ಉಳಿಸಲು ಕೊನೆಯದಾಗಿ ಉಳಿದಿದೆ. ಬದಲಾವಣೆಗಳನ್ನು ಉಳಿಸಿದ ನಂತರ, ನಮ್ಮನ್ನು ಪೈಪ್‌ಲೈನ್‌ಗೆ ಹಿಂತಿರುಗಿಸಲಾಗುತ್ತದೆ. ನಾವು ವೇರಿಯೇಬಲ್‌ಗಳನ್ನು ಹೊಂದಿಸಲು ಮತ್ತು PVS-ಸ್ಟುಡಿಯೋಗೆ ಲಾಗಿನ್ ಮತ್ತು ಕೀಯನ್ನು ಸೇರಿಸಲು ಮುಂದುವರಿಯಬೇಕಾಗಿದೆ:

PVS-ಸ್ಟುಡಿಯೋವನ್ನು ಬಳಸಿಕೊಂಡು ಟ್ರಾವಿಸ್ CI, ಬಡ್ಡಿ ಮತ್ತು AppVeyor ನಲ್ಲಿ ಕಮಿಟ್‌ಗಳ ವಿಶ್ಲೇಷಣೆ ಮತ್ತು ಪುಲ್ ವಿನಂತಿಗಳು
ಇದರ ನಂತರ, ಹೊಸ ಪುಲ್ ವಿನಂತಿ ಅಥವಾ ಬದ್ಧತೆಯ ನೋಟವು ವಿಮರ್ಶೆಯನ್ನು ಪ್ರಚೋದಿಸುತ್ತದೆ. ಬದ್ಧತೆಯು ದೋಷಗಳನ್ನು ಹೊಂದಿದ್ದರೆ, ಪುಲ್ ವಿನಂತಿ ಪುಟದಲ್ಲಿ ಬಡ್ಡಿ ಇದನ್ನು ಸೂಚಿಸುತ್ತದೆ.

AppVeyor

AppVeyor ಅನ್ನು ಹೊಂದಿಸುವುದು ಬಡ್ಡಿಗೆ ಹೋಲುತ್ತದೆ, ಏಕೆಂದರೆ ಎಲ್ಲವೂ ವೆಬ್ ಇಂಟರ್ಫೇಸ್‌ನಲ್ಲಿ ನಡೆಯುತ್ತದೆ ಮತ್ತು ಪ್ರಾಜೆಕ್ಟ್ ರೆಪೊಸಿಟರಿಗೆ *.yml ಫೈಲ್ ಅನ್ನು ಸೇರಿಸುವ ಅಗತ್ಯವಿಲ್ಲ.

ಯೋಜನೆಯ ಅವಲೋಕನದಲ್ಲಿ ಸೆಟ್ಟಿಂಗ್‌ಗಳ ಟ್ಯಾಬ್‌ಗೆ ಹೋಗೋಣ:

PVS-ಸ್ಟುಡಿಯೋವನ್ನು ಬಳಸಿಕೊಂಡು ಟ್ರಾವಿಸ್ CI, ಬಡ್ಡಿ ಮತ್ತು AppVeyor ನಲ್ಲಿ ಕಮಿಟ್‌ಗಳ ವಿಶ್ಲೇಷಣೆ ಮತ್ತು ಪುಲ್ ವಿನಂತಿಗಳು
ಈ ಪುಟವನ್ನು ಕೆಳಗೆ ಸ್ಕ್ರಾಲ್ ಮಾಡೋಣ ಮತ್ತು ಪುಲ್ ವಿನಂತಿಗಳನ್ನು ಸಂಗ್ರಹಿಸಲು ಸಂಗ್ರಹ ಉಳಿಸುವಿಕೆಯನ್ನು ಸಕ್ರಿಯಗೊಳಿಸೋಣ:

PVS-ಸ್ಟುಡಿಯೋವನ್ನು ಬಳಸಿಕೊಂಡು ಟ್ರಾವಿಸ್ CI, ಬಡ್ಡಿ ಮತ್ತು AppVeyor ನಲ್ಲಿ ಕಮಿಟ್‌ಗಳ ವಿಶ್ಲೇಷಣೆ ಮತ್ತು ಪುಲ್ ವಿನಂತಿಗಳು
ಈಗ ನಾವು ಪರಿಸರ ಟ್ಯಾಬ್‌ಗೆ ಹೋಗೋಣ, ಅಲ್ಲಿ ನಾವು ಜೋಡಣೆಗಾಗಿ ಚಿತ್ರವನ್ನು ಮತ್ತು ಅಗತ್ಯ ಪರಿಸರ ಅಸ್ಥಿರಗಳನ್ನು ನಿರ್ದಿಷ್ಟಪಡಿಸುತ್ತೇವೆ:

PVS-ಸ್ಟುಡಿಯೋವನ್ನು ಬಳಸಿಕೊಂಡು ಟ್ರಾವಿಸ್ CI, ಬಡ್ಡಿ ಮತ್ತು AppVeyor ನಲ್ಲಿ ಕಮಿಟ್‌ಗಳ ವಿಶ್ಲೇಷಣೆ ಮತ್ತು ಪುಲ್ ವಿನಂತಿಗಳು
ನೀವು ಹಿಂದಿನ ವಿಭಾಗಗಳನ್ನು ಓದಿದ್ದರೆ, ಈ ಎರಡು ವೇರಿಯೇಬಲ್‌ಗಳೊಂದಿಗೆ ನೀವು ತುಂಬಾ ಪರಿಚಿತರಾಗಿರುವಿರಿ - PVS_KEY и PVS_USERNAME. ಇಲ್ಲದಿದ್ದರೆ, PVS-ಸ್ಟುಡಿಯೋ ವಿಶ್ಲೇಷಕದ ಪರವಾನಗಿಯನ್ನು ಪರಿಶೀಲಿಸುವುದು ಅವಶ್ಯಕ ಎಂದು ನಾನು ನಿಮಗೆ ನೆನಪಿಸುತ್ತೇನೆ. ಭವಿಷ್ಯದಲ್ಲಿ ಬ್ಯಾಷ್ ಸ್ಕ್ರಿಪ್ಟ್‌ಗಳಲ್ಲಿ ನಾವು ಅವರನ್ನು ಮತ್ತೆ ನೋಡುತ್ತೇವೆ.

ಕೆಳಗಿನ ಅದೇ ಪುಟದಲ್ಲಿ ನಾವು ಹಿಡಿದಿಟ್ಟುಕೊಳ್ಳಲು ಫೋಲ್ಡರ್ ಅನ್ನು ಸೂಚಿಸುತ್ತೇವೆ:

PVS-ಸ್ಟುಡಿಯೋವನ್ನು ಬಳಸಿಕೊಂಡು ಟ್ರಾವಿಸ್ CI, ಬಡ್ಡಿ ಮತ್ತು AppVeyor ನಲ್ಲಿ ಕಮಿಟ್‌ಗಳ ವಿಶ್ಲೇಷಣೆ ಮತ್ತು ಪುಲ್ ವಿನಂತಿಗಳು
ನಾವು ಇದನ್ನು ಮಾಡದಿದ್ದರೆ, ನಾವು ಒಂದೆರಡು ಫೈಲ್‌ಗಳ ಬದಲಿಗೆ ಸಂಪೂರ್ಣ ಯೋಜನೆಯನ್ನು ವಿಶ್ಲೇಷಿಸುತ್ತೇವೆ, ಆದರೆ ನಿರ್ದಿಷ್ಟಪಡಿಸಿದ ಫೈಲ್‌ಗಳಿಂದ ನಾವು ಔಟ್‌ಪುಟ್ ಅನ್ನು ಪಡೆಯುತ್ತೇವೆ. ಆದ್ದರಿಂದ, ಸರಿಯಾದ ಡೈರೆಕ್ಟರಿ ಹೆಸರನ್ನು ನಮೂದಿಸುವುದು ಮುಖ್ಯವಾಗಿದೆ.

ಈಗ ಸ್ಕ್ರಿಪ್ಟ್ ಪರೀಕ್ಷೆಯ ಸಮಯ. ಪರೀಕ್ಷೆಗಳ ಟ್ಯಾಬ್ ತೆರೆಯಿರಿ ಮತ್ತು ಸ್ಕ್ರಿಪ್ಟ್ ಆಯ್ಕೆಮಾಡಿ:

PVS-ಸ್ಟುಡಿಯೋವನ್ನು ಬಳಸಿಕೊಂಡು ಟ್ರಾವಿಸ್ CI, ಬಡ್ಡಿ ಮತ್ತು 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 ವೇರಿಯೇಬಲ್ ಸ್ವಲ್ಪ ಸುಳ್ಳು ಎಂದು ನಾನು ಅರಿತುಕೊಂಡೆ. ಈ ಕಾರಣಕ್ಕಾಗಿ, ವಿಶ್ಲೇಷಣೆಯನ್ನು ಪ್ರಾರಂಭಿಸುವ ಮೊದಲು ನಾನು ಅದರ ಮೌಲ್ಯವನ್ನು ಹಸ್ತಚಾಲಿತವಾಗಿ ನವೀಕರಿಸಿದ್ದೇನೆ.

ತದನಂತರ ಎಲ್ಲವೂ ಮೊದಲಿನಂತೆಯೇ ಇರುತ್ತದೆ:

PVS-ಸ್ಟುಡಿಯೋವನ್ನು ಬಳಸಿಕೊಂಡು ಟ್ರಾವಿಸ್ CI, ಬಡ್ಡಿ ಮತ್ತು 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 - ಬಳಕೆದಾರ ಹೆಸರು ಮತ್ತು ಪ್ರಾಜೆಕ್ಟ್ ರೆಪೊಸಿಟರಿ.

ತೀರ್ಮಾನಕ್ಕೆ

ಸಹಜವಾಗಿ, ನಾವು ಎಲ್ಲಾ ಸಂಭವನೀಯ ನಿರಂತರ ಏಕೀಕರಣ ಸೇವೆಗಳನ್ನು ಪರಿಗಣಿಸಿಲ್ಲ, ಆದಾಗ್ಯೂ, ಅವೆಲ್ಲವೂ ಪರಸ್ಪರ ಒಂದೇ ರೀತಿಯ ಕಾರ್ಯಾಚರಣೆಯ ವಿಶಿಷ್ಟತೆಗಳನ್ನು ಹೊಂದಿವೆ. ಹಿಡಿದಿಟ್ಟುಕೊಳ್ಳುವುದನ್ನು ಹೊರತುಪಡಿಸಿ, ಪ್ರತಿ ಸೇವೆಯು ತನ್ನದೇ ಆದ "ಬೈಸಿಕಲ್" ಅನ್ನು ಮಾಡುತ್ತದೆ, ಆದ್ದರಿಂದ ಎಲ್ಲವೂ ಯಾವಾಗಲೂ ವಿಭಿನ್ನವಾಗಿರುತ್ತದೆ.

ಎಲ್ಲೋ, ಟ್ರಾವಿಸ್-ಸಿಐನಲ್ಲಿರುವಂತೆ, ಕೋಡ್ ಮತ್ತು ಹಿಡಿದಿಟ್ಟುಕೊಳ್ಳುವಿಕೆಯ ಒಂದೆರಡು ಸಾಲುಗಳು ದೋಷರಹಿತವಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತವೆ; ಎಲ್ಲೋ, AppVeyor ನಂತೆ, ನೀವು ಸೆಟ್ಟಿಂಗ್‌ಗಳಲ್ಲಿ ಫೋಲ್ಡರ್ ಅನ್ನು ನಿರ್ದಿಷ್ಟಪಡಿಸಬೇಕಾಗಿದೆ; ಆದರೆ ಎಲ್ಲೋ ನೀವು ಅನನ್ಯ ಕೀಲಿಗಳನ್ನು ರಚಿಸಬೇಕಾಗಿದೆ ಮತ್ತು ಕ್ಯಾಶ್ ಮಾಡಿದ ತುಣುಕನ್ನು ತಿದ್ದಿ ಬರೆಯಲು ನಿಮಗೆ ಅವಕಾಶವನ್ನು ನೀಡಲು ಸಿಸ್ಟಮ್ ಅನ್ನು ಮನವೊಲಿಸಲು ಪ್ರಯತ್ನಿಸಿ. ಆದ್ದರಿಂದ, ಮೇಲೆ ಚರ್ಚಿಸದ ನಿರಂತರ ಏಕೀಕರಣ ಸೇವೆಯಲ್ಲಿ ಪುಲ್ ವಿನಂತಿಗಳ ವಿಶ್ಲೇಷಣೆಯನ್ನು ಹೊಂದಿಸಲು ನೀವು ಬಯಸಿದರೆ, ನಂತರ ನೀವು ಹಿಡಿದಿಟ್ಟುಕೊಳ್ಳುವಲ್ಲಿ ಸಮಸ್ಯೆಗಳನ್ನು ಹೊಂದಿರುವುದಿಲ್ಲ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ.

ನಿಮ್ಮ ಗಮನಕ್ಕೆ ಧನ್ಯವಾದಗಳು. ಏನಾದರೂ ಕೆಲಸ ಮಾಡದಿದ್ದರೆ, ನಮಗೆ ಬರೆಯಲು ಮುಕ್ತವಾಗಿರಿ ಬೆಂಬಲ. ನಾವು ಸಲಹೆ ಮತ್ತು ಸಹಾಯ ಮಾಡುತ್ತೇವೆ.

PVS-ಸ್ಟುಡಿಯೋವನ್ನು ಬಳಸಿಕೊಂಡು ಟ್ರಾವಿಸ್ CI, ಬಡ್ಡಿ ಮತ್ತು AppVeyor ನಲ್ಲಿ ಕಮಿಟ್‌ಗಳ ವಿಶ್ಲೇಷಣೆ ಮತ್ತು ಪುಲ್ ವಿನಂತಿಗಳು

ನೀವು ಈ ಲೇಖನವನ್ನು ಇಂಗ್ಲಿಷ್ ಮಾತನಾಡುವ ಪ್ರೇಕ್ಷಕರೊಂದಿಗೆ ಹಂಚಿಕೊಳ್ಳಲು ಬಯಸಿದರೆ, ದಯವಿಟ್ಟು ಅನುವಾದ ಲಿಂಕ್ ಬಳಸಿ: ಮ್ಯಾಕ್ಸಿಮ್ ಜ್ವ್ಯಾಗಿಂಟ್ಸೆವ್. PVS-ಸ್ಟುಡಿಯೋವನ್ನು ಬಳಸಿಕೊಂಡು ಟ್ರಾವಿಸ್ CI, ಬಡ್ಡಿ ಮತ್ತು AppVeyor ನಲ್ಲಿ ಕಮಿಟ್‌ಗಳ ವಿಶ್ಲೇಷಣೆ ಮತ್ತು ಪುಲ್ ವಿನಂತಿಗಳು.

ಮೂಲ: www.habr.com

ಕಾಮೆಂಟ್ ಅನ್ನು ಸೇರಿಸಿ