ΠΡ Ρ ΠΎΡΠΈΠΌ ΠΏΠΎΠ΄Π΅Π»ΠΈΡΡΡΡ ΠΎΠΏΡΡΠΎΠΌ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ Π΄Π»Ρ Π½Π΅ΠΏΡΠ΅ΡΡΠ²Π½ΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π° ΠΈ ΠΈΠ·ΠΌΠ΅ΡΠ΅Π½ΠΈΡ ΠΊΠ°ΡΠ΅ΡΡΠ²Π° ΠΊΠΎΠ΄Π° SonarQube Π² ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΈΡΡΠ΅ΠΌΡ ΠΠΠ (Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ ΡΠΈΡΡΠ΅ΠΌΠ΅ Π΄Π΅ΠΏΠΎΠ·ΠΈΡΠ°ΡΠ½ΠΎ-ΠΊΠ»ΠΈΡΠΈΠ½Π³ΠΎΠ²ΠΎΠ³ΠΎ ΡΡΠ΅ΡΠ° Β«ΠΠ»Π°ΠΌΠ΅Π΄Π°Β») ΠΠ°ΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ°ΡΡΠ΅ΡΠ½ΠΎΠ³ΠΎ Π΄Π΅ΠΏΠΎΠ·ΠΈΡΠ°ΡΠΈΡ.
ΠΠ°ΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΉ ΡΠ°ΡΡΠ΅ΡΠ½ΡΠΉ Π΄Π΅ΠΏΠΎΠ·ΠΈΡΠ°ΡΠΈΠΉ (Π³ΡΡΠΏΠΏΠ° ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΉ Β«ΠΠΎΡΠΊΠΎΠ²ΡΠΊΠ°Ρ Π±ΠΈΡΠΆΠ°Β») ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΠΊΠ»ΡΡΠ΅Π²ΡΡ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΉ ΡΠΈΠ½Π°Π½ΡΠΎΠ²ΠΎΠΉ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ, Ρ ΡΠ°Π½ΠΈΡ ΠΈ ΡΡΠΈΡΡΠ²Π°Π΅Ρ ΡΠ΅Π½Π½ΡΠ΅ Π±ΡΠΌΠ°Π³ΠΈ ΡΠΎΡΡΠΈΠΉΡΠΊΠΈΡ ΠΈ ΠΈΠ½ΠΎΡΡΡΠ°Π½Π½ΡΡ ΡΠΌΠΈΡΠ΅Π½ΡΠΎΠ² Π½Π° ΡΡΠΌΠΌΡ Π±ΠΎΠ»Π΅Π΅ 50 ΡΡΠ»Π½ ΡΡΠ±. Π Π°ΡΡΡΡΠΈΠΉ ΠΎΠ±ΡΠ΅ΠΌ ΠΏΡΠΎΠ²ΠΎΠ΄ΠΈΠΌΡΡ ΡΠΈΡΡΠ΅ΠΌΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ, Π° ΡΠ°ΠΊ ΠΆΠ΅ Π½Π΅ΠΏΡΠ΅ΡΡΠ²Π½ΠΎΠ΅ Π½Π°ΡΠ°ΡΠΈΠ²Π°Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π° ΡΡΠ΅Π±ΡΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠ°Π½ΠΈΡ Π²ΡΡΠΎΠΊΠΎΠ³ΠΎ ΠΊΠ°ΡΠ΅ΡΡΠ²Π° ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΡΠΈΡΡΠ΅ΠΌ. ΠΠ΄Π½ΠΈΠΌ ΠΈΠ· ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² Π΄Π»Ρ Π΄ΠΎΡΡΠΈΠΆΠ΅Π½ΠΈΡ ΡΡΠΎΠΉ ΡΠ΅Π»ΠΈ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡ SonarQube. Π ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅ ΠΌΡ ΠΎΠΏΠΈΡΠ΅ΠΌ ΡΡΠΏΠ΅ΡΠ½ΡΠΉ ΠΎΠΏΡΡ Π±Π΅ΡΡΠΎΠ²Π½ΠΎΠ³ΠΎ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΡ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΠ° SonarQube Π² ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Π½Π°ΡΠ΅Π³ΠΎ ΠΎΡΠ΄Π΅Π»Π°.
ΠΡΠ°ΡΠΊΠΎ ΠΎΠ± ΠΎΡΠ΄Π΅Π»Π΅
Π Π½Π°ΡΠ΅ΠΉ ΠΊΠΎΠΌΠΏΠ΅ΡΠ΅Π½ΡΠΈΠΈ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ: Π²ΡΠΏΠ»Π°ΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°ΠΌ ΠΠ Π, ΡΠ»Π΅ΠΊΡΡΠΎΠ½Π½ΡΠΉ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΎΠΎΠ±ΠΎΡΠΎΡ (ΠΠΠ), ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΡΠΎΡΠ³ΠΎΠ²ΠΎΠ³ΠΎ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠ°ΡΠΈΡ (ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΡ Π²Π½Π΅Π±ΠΈΡΠΆΠ΅Π²ΡΡ ΡΠ΄Π΅Π»ΠΎΠΊ), ΠΊΠ°Π½Π°Π»Ρ ΡΠ»Π΅ΠΊΡΡΠΎΠ½Π½ΠΎΠ³ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°ΠΌΠΈ ΠΈ ΠΠ Π ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ Π΄ΡΡΠ³ΠΎΠ΅. Π ΠΎΠ±ΡΠ΅ΠΌ, Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΏΠ»Π°ΡΡ ΡΠ°Π±ΠΎΡΡ Π½Π°Π΄ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΡΠΎΡΠΎΠ½ΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ Π΄Π΅ΡΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ. Π Π°Π±ΠΎΡΠ°Π΅ΠΌ ΠΌΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π·Π°ΡΠ²ΠΎΠΊ. ΠΠ°ΡΠ²ΠΊΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½ΠΈΡΡΠΎΠ² ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΡΡΡ Π°Π½Π°Π»ΠΈΡΠΈΠΊΠ°ΠΌΠΈ: ΠΎΠ½ΠΈ ΡΠΎΠ±ΠΈΡΠ°ΡΡ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ Π·Π°ΠΊΠ°Π·ΡΠΈΠΊΠ° ΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ Π½Π°ΠΌ ΡΠ²ΠΎΠ΅ Π²ΠΈΠ΄Π΅Π½ΠΈΠ΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΡΡΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π»Π΅ΡΡ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΠ°Π»Π΅Π΅ ΡΡΠ°Π½Π΄Π°ΡΡΠ½Π°Ρ ΡΡ Π΅ΠΌΠ°: ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΠΊΠΎΠ΄Π° β ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ β ΠΎΠΏΡΡΠ½Π°Ρ ΡΠΊΡΠΏΠ»ΡΠ°ΡΠ°ΡΠΈΡ β ΠΏΠΎΡΡΠ°Π²ΠΊΠ° ΠΊΠΎΠ΄Π° Π½Π° ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΠ²Π½ΡΠΉ ΠΊΠΎΠ½ΡΡΡ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎΠΌΡ Π·Π°ΠΊΠ°Π·ΡΠΈΠΊΡ.
ΠΠΎΡΠ΅ΠΌΡ ΠΈΠΌΠ΅Π½Π½ΠΎ SonarQube?
ΠΡΠΎ ΠΏΠ΅ΡΠ²ΡΠΉ ΠΎΠΏΡΡ Π½Π°ΡΠ΅Π³ΠΎ ΠΎΡΠ΄Π΅Π»Π° ΠΏΠΎ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ Π΄Π»Ρ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ ΠΊΠ°ΡΠ΅ΡΡΠ²Π° ΠΊΠΎΠ΄Π° β ΡΠ°Π½Π΅Π΅ ΠΌΡ Π΄Π΅Π»Π°Π»ΠΈ ΡΡΠΎ Π²ΡΡΡΠ½ΡΡ, ΠΏΡΠΎΠ²ΠΎΠ΄ΠΈΠ»ΠΈ Π»ΠΈΡΡ code review. ΠΠΎ ΡΠ°ΡΡΡΡΠΈΠΉ ΠΎΠ±ΡΠ΅ΠΌ ΡΠ°Π±ΠΎΡ ΡΡΠ΅Π±ΡΠ΅Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΠΈ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ°. ΠΡΠΎΠΌΠ΅ ΡΡΠΎΠ³ΠΎ, Π² ΡΠΎΡΡΠ°Π²Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π΅ΡΡΡ ΠΈ Π½Π΅ΠΎΠΏΡΡΠ½ΡΠ΅ ΡΠΎΡΡΡΠ΄Π½ΠΈΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ ΡΠΎΠ²ΡΠ΅ΠΌ Π·Π½Π°ΠΊΠΎΠΌΡ Ρ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠΌΠΈ ΡΠ΅Π³Π»Π°ΠΌΠ΅Π½ΡΠ°ΠΌΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈ ΡΠΊΠ»ΠΎΠ½Π½Ρ Π΄ΠΎΠΏΡΡΠΊΠ°ΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΎΡΠΈΠ±ΠΎΠΊ. ΠΠ»Ρ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ ΠΊΠ°ΡΠ΅ΡΡΠ²Π° ΠΊΠΎΠ΄Π° Π±ΡΠ»ΠΎ ΡΠ΅ΡΠ΅Π½ΠΎ Π²Π½Π΅Π΄ΡΡΡΡ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡ. Π’Π°ΠΊ ΠΊΠ°ΠΊ SonarQube ΡΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΡΡ Π² Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠΈΡΡΠ΅ΠΌΠ°Ρ ΠΠ Π, Π΄ΠΎΠ»Π³ΠΎ Π²ΡΠ±ΠΈΡΠ°ΡΡ Π½Π΅ ΠΏΡΠΈΡΠ»ΠΎΡΡ. Π Π°Π½Π΅Π΅ ΠΊΠΎΠ»Π»Π΅Π³ΠΈ ΠΈΠ· Π΄ΡΡΠ³ΠΈΡ ΠΏΠΎΠ΄ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΠΉ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π»ΠΈ Ρ Π΅Π³ΠΎ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΠ΄ ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠΎΠ² Π² ΡΠΈΡΡΠ΅ΠΌΠ΅ Β«ΠΠ»Π°ΠΌΠ΅Π΄Π°Β» (ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° Π΄Π΅ΠΏΠΎΠ·ΠΈΡΠ°ΡΠ½ΠΎ-ΠΊΠ»ΠΈΡΠΈΠ½Π³ΠΎΠ²ΠΎΠ³ΠΎ ΡΡΠ΅ΡΠ° ΠΠ Π), Π² Π¦Π€Π’ (ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΎΠ½Π½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° Π΄Π»Ρ Π²Π΅Π΄Π΅Π½ΠΈΡ Π±ΡΡ .ΡΡΠ΅ΡΠ°, Π±Π°Π»Π°Π½ΡΠ°, ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠΈ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΈ Π²Π½ΡΡΡΠ΅Π½Π½Π΅ΠΉ ΠΎΡΡΠ΅ΡΠ½ΠΎΡΡΠΈ), Π² Π½Π΅ΠΊΠΎΡΠΎΡΡΡ Π΄ΡΡΠ³ΠΈΡ ΡΠΈΡΡΠ΅ΠΌΠ°Ρ . ΠΠ»Ρ ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠΎΠ² ΠΌΡ ΡΠ΅ΡΠΈΠ»ΠΈ Π½Π°ΡΠ°ΡΡ Ρ Π±Π΅ΡΠΏΠ»Π°ΡΠ½ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ SonarQube. ΠΡΠ°ΠΊ, ΠΏΠ΅ΡΠ΅ΠΉΠ΄Π΅ΠΌ ΠΊ Π½Π°ΡΠ΅ΠΌΡ ΠΊΠ΅ΠΉΡΡ.
ΠΡΠΎΡΠ΅ΡΡ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΡ
Π£ Π½Π°Ρ Π΅ΡΡΡ:
- Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΡΠ±ΠΎΡΠΊΠ° ΡΠΈΡΡΠ΅ΠΌΡ Π² TeamCity;
- Π½Π°ΡΡΡΠΎΠ΅Π½ ΠΏΡΠΎΡΠ΅ΡΡ Π·Π°Π»ΠΈΠ²ΠΊΠΈ ΠΊΠΎΠ΄Π° ΡΠ΅ΡΠ΅Π· MergeRequest ΠΈΠ· feature-Π²Π΅ΡΠΊΠΈ Π² master-Π²Π΅ΡΠΊΡ Π² GitLab (ΠΏΡΠΎΡΠ΅ΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΎΠ³Π»Π°ΡΠ½ΠΎ GitHub Flow);
- SonarQube, Π½Π°ΡΡΡΠΎΠ΅Π½Π½ΡΠΉ Π½Π° Π°Π½Π°Π»ΠΈΠ· ΠΊΠΎΠ΄Π° Π΄Π»Ρ ΡΠΈΡΡΠ΅ΠΌΡ ΠΠΠ ΠΏΠΎ ΡΠ°ΡΠΏΠΈΡΠ°Π½ΠΈΡ.
ΠΠ°ΡΠ° ΡΠ΅Π»Ρ: Π²Π½Π΅Π΄ΡΠΈΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π°Π½Π°Π»ΠΈΠ· ΠΊΠΎΠ΄Π° Π² CI/CD ΠΏΡΠΎΡΠ΅ΡΡΡ ΠΠΠ.
ΠΠ°Π΄ΠΎ Π½Π°ΡΡΡΠΎΠΈΡΡ: ΠΏΡΠΎΡΠ΅ΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΊΠΎΠ΄Π° ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΌ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΠΎΠΌ ΠΏΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ MergeRequestβe Π² ΠΎΡΠ½ΠΎΠ²Π½ΡΡ Π²Π΅ΡΠΊΡ.
Π’.Π΅. ΡΠ΅Π»Π΅Π²Π°Ρ ΠΊΠ°ΡΡΠΈΠ½Π° ΡΠ»Π΅Π΄ΡΡΡΠ°Ρ: ΠΊΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ Π·Π°Π»ΠΈΠ²Π°Π΅Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² feature-Π²Π΅ΡΠΊΡ, Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° Π½Π°Π»ΠΈΡΠΈΠ΅ Π½ΠΎΠ²ΡΡ ΠΎΡΠΈΠ±ΠΎΠΊ Π² ΠΊΠΎΠ΄Π΅. ΠΡΠ»ΠΈ ΠΎΡΠΈΠ±ΠΎΠΊ Π½Π΅Ρ, ΡΠΎ ΡΠ°Π·ΡΠ΅ΡΠ°Π΅ΡΡΡ ΠΏΡΠΈΠ½ΡΡΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, ΠΈΠ½Π°ΡΠ΅ ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΠΏΡΠ°Π²ΠΈΡΡ ΠΎΡΠΈΠ±ΠΊΠΈ. Π£ΠΆΠ΅ Π½Π° Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠΌ ΡΡΠ°ΠΏΠ΅ ΠΌΡ ΡΠΌΠΎΠ³Π»ΠΈ Π²ΡΡΠ²ΠΈΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΎΡΠΈΠ±ΠΎΠΊ Π² ΠΊΠΎΠ΄Π΅. Π£ ΡΠΈΡΡΠ΅ΠΌΡ ΠΎΡΠ΅Π½Ρ Π³ΠΈΠ±ΠΊΠΈΠ΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ: Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°ΡΡ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠΎΠ±Ρ ΠΎΠ½Π° ΡΠ°Π±ΠΎΡΠ°Π»Π° ΠΏΠΎΠ΄ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠ΅ Π·Π°Π΄Π°ΡΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ², ΠΏΠΎΠ΄ ΠΊΠ°ΠΆΠ΄ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ ΠΈ ΡΡΠΈΠ»Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° QualityGate Π² SonarQube
ΠΠ½Π°Π»ΠΈΠ· QualityGate β ΡΡΠΎ Π²Π΅ΡΡ, ΠΊΠΎΡΠΎΡΡΡ ΠΌΡ Π²ΡΡΠΈΡΠ°Π»ΠΈ Π² Π½Π΅Π΄ΡΠ°Ρ ΠΈΠ½ΡΠ΅ΡΠ½Π΅ΡΠ°. ΠΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ Π΄ΡΡΠ³ΠΎΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄, Π±ΠΎΠ»Π΅Π΅ ΡΠ»ΠΎΠΆΠ½ΡΠΉ ΠΈ Ρ ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ ΡΡΠΎΡΠΎΠ½Ρ Π½Π΅ ΡΠΎΠ²ΡΠ΅ΠΌ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΉ. Π‘Π½Π°ΡΠ°Π»Π° ΠΌΡ Π΄Π²Π°ΠΆΠ΄Ρ Π·Π°ΠΏΡΡΠΊΠ°Π»ΠΈ ΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ΅ΡΠ΅Π· SonarQube: ΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π»ΠΈ feature-Π²Π΅ΡΠΊΡ ΠΈ Π²Π΅ΡΠΊΡ, ΠΊΡΠ΄Π° ΡΠΎΠ±ΠΈΡΠ°Π»ΠΈΡΡ Π²Π»ΠΈΠ²Π°ΡΡ feature-Π²Π΅ΡΠΊΡ, Π° Π·Π°ΡΠ΅ΠΌ ΡΡΠ°Π²Π½ΠΈΠ²Π°Π»ΠΈ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΎΡΠΈΠ±ΠΎΠΊ. ΠΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ Π½Π΅ ΠΎΡΠ»ΠΈΡΠ°Π»ΡΡ ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΠΎΡΡΡΡ ΠΈ Π½Π΅ Π²ΡΠ΅Π³Π΄Π° Π²ΡΠ΄Π°Π²Π°Π» ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ. Π Π·Π°ΡΠ΅ΠΌ ΠΌΡ ΡΠ·Π½Π°Π»ΠΈ, ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΌΠ΅ΡΡΠΎ Π΄Π²ΠΎΠΉΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΠΎΠ½Π° SonarQube, ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π»ΠΈΠΌΠΈΡ Π½Π° ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π΄ΠΎΠΏΡΡΠ΅Π½Π½ΡΡ ΠΎΡΠΈΠ±ΠΎΠΊ (QualityGate) ΠΈ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΡ Π²Π΅ΡΠΊΡ, ΠΊΠΎΡΠΎΡΡΡ ΡΡ Π·Π°Π»ΠΈΠ²Π°Π΅ΡΡ ΠΈ ΡΡΠ°Π²Π½ΠΈΠ²Π°Π΅ΡΡ.
ΠΠΎΠΊΠ° ΡΡΠΎ Π΅ΡΠ΅ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π½ΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ ΠΊΠΎΠ΄Π°. Π‘ΡΠΎΠΈΡ ΠΎΡΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ SonarQube Π½Π΅ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌ Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΡΠ·ΡΠΊΠ°ΠΌΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ Ρ Delphi. ΠΠ° Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π΄Π»Ρ Π½Π°ΡΠ΅ΠΉ ΡΠΈΡΡΠ΅ΠΌΡ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ ΡΠΎΠ»ΡΠΊΠΎ PLSql ΠΊΠΎΠ΄.
Π Π°Π±ΠΎΡΠ°Π΅Ρ ΡΡΠΎ ΡΠ°ΠΊ:
- ΠΡ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ Π΄Π»Ρ Π½Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ° ΡΠΎΠ»ΡΠΊΠΎ PL/SQL ΠΊΠΎΠ΄.
- Π SonarQube Π½Π°ΡΡΡΠΎΠ΅Π½ QualityGate ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠΎΠ±Ρ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΎΡΠΈΠ±ΠΎΠΊ Π½Π΅ ΠΏΡΠΈΠ±Π°Π²Π»ΡΠ»ΠΎΡΡ Ρ ΠΊΠΎΠΌΠΌΠΈΡΠΎΠΌ.
- ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΎΡΠΈΠ±ΠΎΠΊ ΠΏΡΠΈ ΠΏΠ΅ΡΠ²ΠΎΠΌ Π·Π°ΠΏΡΡΠΊΠ΅ Ρ Π½Π°Ρ Π²ΡΡΠ»ΠΎ 229. ΠΡΠ»ΠΈ ΠΎΡΠΈΠ±ΠΎΠΊ ΠΏΡΠΈ ΠΊΠΎΠΌΠΌΠΈΡΠ΅ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π±ΠΎΠ»ΡΡΠ΅, ΡΠΎ merge Π½Π΅ ΡΠ°Π·ΡΠ΅ΡΠ°Π΅ΡΡΡ.
- ΠΠ°Π»Π΅Π΅ ΠΏΡΠΈ ΡΡΠ»ΠΎΠ²ΠΈΠΈ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΎΡΠΈΠ±ΠΎΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ΄Π΅Ρ ΠΏΠ΅ΡΠ΅Π½Π°ΡΡΡΠ°ΠΈΠ²Π°ΡΡ QualityGate.
- Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ Π½ΠΎΠ²ΡΠ΅ ΠΏΡΠ½ΠΊΡΡ Π΄Π»Ρ Π°Π½Π°Π»ΠΈΠ·Π°, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠΎΠΊΡΡΡΠΈΠ΅ ΠΊΠΎΠ΄Π° ΡΠ΅ΡΡΠ°ΠΌΠΈ ΠΈ Ρ.Π΄.
Π‘Ρ Π΅ΠΌΠ° ΡΠ°Π±ΠΎΡΡ:
Π ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡ ΡΠ°Π±ΠΎΡΡ ΡΠΊΡΠΈΠΏΡΠ° Π²ΠΈΠ΄Π½ΠΎ ΡΡΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΎΡΠΈΠ±ΠΎΠΊ Π² feature-Π²Π΅ΡΠΊΠ΅ Π½Π΅ ΡΠ²Π΅Π»ΠΈΡΠΈΠ»ΠΎΡΡ. ΠΠ½Π°ΡΠΈΡ Π²ΡΠ΅ ΠΠ.
Π‘ΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π΄ΠΎΡΡΡΠΏΠ½Π° ΠΊΠ½ΠΎΠΏΠΊΠ° Merge.
Π ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡ ΡΠ°Π±ΠΎΡΡ ΡΠΊΡΠΈΠΏΡΠ° Π²ΠΈΠ΄Π½ΠΎ, ΡΡΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΎΡΠΈΠ±ΠΎΠΊ Π² feature-Π²Π΅ΡΠΊΠ΅ ΡΡΠ°Π»ΠΎ Π±ΠΎΠ»ΡΡΠ΅ Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎΠ³ΠΎ. ΠΠ½Π°ΡΠΈΡ Π²ΡΠ΅ ΠΠΠΠ₯Π.
ΠΠ½ΠΎΠΏΠΊΠ° Merge ΠΊΡΠ°ΡΠ½Π°Ρ. ΠΠ° Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π½Π΅Ρ Π·Π°ΠΏΡΠ΅ΡΠ° Π½Π° ΡΠΎ ΡΡΠΎΠ±Ρ Π·Π°Π»ΠΈΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΏΠΎ ΠΎΡΠΈΠ±ΠΎΡΠ½ΠΎΠΌΡ ΠΊΠΎΠ΄Ρ, Π½ΠΎ ΡΡΠΎ Π΄Π΅Π»Π°Π΅ΡΡΡ Π½Π° ΡΡΠΌΠΎΡΡΠ΅Π½ΠΈΠ΅ ΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°. Π Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡΠ΅ΡΠΈΡΡ Π²Π½ΠΎΡΠΈΡΡ ΡΠ°ΠΊΠΈΠ΅ ΠΊΠΎΠΌΠΌΠΈΡΡ Π² ΠΎΡΠ½ΠΎΠ²Π½ΡΡ Π²Π΅ΡΠΊΡ.
Π‘Π°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½Π°Ρ ΡΠ°Π±ΠΎΡΠ° Π½Π°Π΄ ΠΎΡΠΈΠ±ΠΊΠ°ΠΌΠΈ
ΠΠ°Π»Π΅Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ Π²ΡΠ΅ Π²ΡΡΠ²Π»Π΅Π½Π½ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΠΎΠΉ ΠΎΡΠΈΠ±ΠΊΠΈ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ SonarQube Π°Π½Π°Π»ΠΈΠ·ΠΈΡΡΠ΅Ρ ΠΏΠΎ ΡΠ²ΠΎΠΈΠΌ ΡΡΡΠΎΠ³ΠΈΠΌ ΡΡΠ°Π½Π΄Π°ΡΡΠ°ΠΌ. Π§ΡΠΎ ΠΎΠ½ ΡΡΠΈΡΠ°Π΅Ρ ΠΎΡΠΈΠ±ΠΊΠΎΠΉ, ΡΠ΅Π°Π»ΡΠ½ΠΎ Π² Π½Π°ΡΠ΅ΠΌ ΠΊΠΎΠ΄Π΅ ΠΌΠΎΠΆΠ΅Ρ ΡΠ°ΠΊΠΎΠ²ΡΠΌ Π½Π΅ ΡΠ²Π»ΡΡΡΡΡ. ΠΠΎΡΡΠΎΠΌΡ Π½ΡΠΆΠ½ΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ ΠΈ ΠΎΡΠΌΠ΅ΡΠΈΡΡ, Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π»ΠΈ ΡΡΠΎ ΠΎΡΠΈΠ±ΠΊΠ°, ΠΈΠ»ΠΈ ΡΠΎ, ΡΡΠΎ ΠΏΡΠ°Π²ΠΈΡΡ Π² Π½Π°ΡΠΈΡ ΡΡΠ»ΠΎΠ²ΠΈΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ Π½Π΅Ρ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΌΡ ΡΠΎΠΊΡΠ°ΡΠ°Π΅ΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΎΡΠΈΠ±ΠΎΠΊ. Π‘ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½Π΅ΠΌ ΡΠΈΡΡΠ΅ΠΌΠ° Π½Π°ΡΡΠΈΡΡΡ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡ ΡΡΠΈ Π½ΡΠ°Π½ΡΡ.
Π ΡΠ΅ΠΌΡ ΠΌΡ ΠΏΡΠΈΡΠ»ΠΈ
ΠΠ°ΡΠ΅ΠΉ ΡΠ΅Π»ΡΡ Π±ΡΠ»ΠΎ ΠΏΠΎΠ½ΡΡΡ, ΡΠ΅Π»Π΅ΡΠΎΠΎΠ±ΡΠ°Π·Π½ΠΎ Π»ΠΈ Π² Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΈΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ ΠΊΠΎΠ΄Π° Π½Π° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΡ. Π ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΎΠΏΡΠ°Π²Π΄Π°Π» ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ. SonarQube ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π½Π°ΠΌ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ Π½ΡΠΆΠ½ΡΠΌΠΈ Π½Π°ΠΌ ΡΠ·ΡΠΊΠ°ΠΌΠΈ, Π΄Π΅Π»Π°Π΅Ρ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Π³ΡΠ°ΠΌΠΎΡΠ½ΡΠΉ Π°Π½Π°Π»ΠΈΠ· ΠΈ ΠΈΠΌΠ΅Π΅Ρ ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π» ΠΎΠ±ΡΡΠ°ΡΡΡΡ Π½Π° ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠ°Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ². Π ΡΠ΅Π»ΠΎΠΌ, ΠΌΡ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½Ρ Π½Π°ΡΠΈΠΌ ΠΏΠ΅ΡΠ²ΡΠΌ ΠΎΠΏΡΡΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ SonarQube ΠΈ ΠΏΠ»Π°Π½ΠΈΡΡΠ΅ΠΌ ΡΠ°Π·Π²ΠΈΠ²Π°ΡΡΡΡ Π² ΡΡΠΎΠΌ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠΈ Π΄Π°Π»ΡΡΠ΅. ΠΠΆΠΈΠ΄Π°Π΅ΠΌ, ΡΡΠΎ Π² Π±ΡΠ΄ΡΡΠ΅ΠΌ ΠΌΡ ΡΠΌΠΎΠΆΠ΅ΠΌ ΡΠΊΠΎΠ½ΠΎΠΌΠΈΡΡ Π±ΠΎΠ»ΡΡΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΈ ΡΠΈΠ» Π½Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΡ ΠΊΠΎΠ΄Π° ΠΈ ΡΠ΄Π΅Π»Π°ΡΡ Π΅Π΅ Π±ΠΎΠ»Π΅Π΅ ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠΉ, ΡΡΡΡΠ°Π½ΠΈΠ² ΡΠ΅Π»ΠΎΠ²Π΅ΡΠ΅ΡΠΊΠΈΠΉ ΡΠ°ΠΊΡΠΎΡ. ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΠΌΡ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠΌ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΊΠΈ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ ΠΈΠ»ΠΈ, Π½Π°ΠΎΠ±ΠΎΡΠΎΡ, ΡΠ±Π΅Π΄ΠΈΠΌΡΡ Π΅ΡΠ΅ ΡΠ°Π·, ΡΡΠΎ ΡΡΠΎ ΠΊΡΡΡΠ°Ρ Π²Π΅ΡΡ Ρ Π±ΠΎΠ»ΡΡΠΈΠΌ ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»ΠΎΠΌ.
Π ΡΡΠΎΠΉ ΠΎΠ±Π·ΠΎΡΠ½ΠΎΠΉ ΡΡΠ°ΡΡΠ΅ ΠΌΡ ΡΠ°ΡΡΠΊΠ°Π·Π°Π»ΠΈ ΠΎ Π½Π°ΡΠ΅ΠΌ Π·Π½Π°ΠΊΠΎΠΌΡΡΠ²Π΅ ΡΠΎ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΌ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΠΎΠΌ SonarQube. ΠΡΠ»ΠΈ Ρ Π²Π°Ρ Π΅ΡΡΡ Π²ΠΎΠΏΡΠΎΡΡ, ΠΏΠΈΡΠΈΡΠ΅, ΠΏΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°, Π² ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡ . ΠΡΠ»ΠΈ Π²Π°ΠΌ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½Π° ΡΡΠ° ΡΠ΅ΠΌΠ°, Π² Π½ΠΎΠ²ΠΎΠΉ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈ ΠΌΡ ΡΠΆΠ΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΠΎΠΏΠΈΡΠ΅ΠΌ, ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ Π²ΡΠ΅ Π½Π°ΡΡΡΠΎΠΈΡΡ ΠΈ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΠΊΠΎΠ΄, ΡΡΠΎΠ±Ρ Π΄Π΅Π»Π°ΡΡ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ.
ΠΠ²ΡΠΎΡ ΡΠ΅ΠΊΡΡΠ°:
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com