
ΠΡΠΊΠ°ΠΌΠ΅ Π΄Π° ΡΠΏΠΎΠ΄Π΅Π»ΠΈΠΌ ΠΎΠΏΠΈΡ Ρ Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°ΡΠ° Π·Π° Π½Π΅ΠΏΡΠ΅ΠΊΡΡΠ½Π°Ρ Π°Π½Π°Π»ΠΈΠ· ΠΈ ΠΈΠ·ΠΌΠ΅ΡΠ²Π°Π½Π΅ Π½Π° ΠΊΠ°ΡΠ΅ΡΡΠ²ΠΎΡΠΎ Π½Π° ΠΊΠΎΠ΄Π° SonarQube Π² ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°ΡΠΈΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΠΈ Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° ΠΠΠ (Π΄ΠΎΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΡΠΌ ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° Π·Π° Π΄Π΅ΠΏΠΎΠ·ΠΈΡΠ°ΡΠ½ΠΎ-ΠΊΠ»ΠΈΡΠΈΠ½Π³ΠΎΠ²ΠΎ ΠΎΡΡΠΈΡΠ°Π½Π΅ "ΠΠ»Π°ΠΌΠ΅Π΄Π°") Π½Π° ΠΠ°ΡΠΈΠΎΠ½Π°Π»Π½ΠΈΡ ΡΠ°ΡΡΠ΅ΡΠ΅Π½ Π΄Π΅ΠΏΠΎΠ·ΠΈΡΠ°Ρ.
ΠΠ°ΡΠΈΠΎΠ½Π°Π»Π½ΠΈΡΡ ΡΠ°ΡΡΠ΅ΡΠ΅Π½ Π΄Π΅ΠΏΠΎΠ·ΠΈΡΠ°Ρ (Π³ΡΡΠΏΠ° ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ "ΠΠΎΡΠΊΠΎΠ²ΡΠΊΠ° Π±ΠΎΡΡΠ°") Π΅ Π΅Π΄Π½Π° ΠΎΡ ΠΊΠ»ΡΡΠΎΠ²ΠΈΡΠ΅ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Π²ΡΠ² ΡΠΈΠ½Π°Π½ΡΠΎΠ²Π°ΡΠ° ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ°, ΡΡΡ ΡΠ°Π½ΡΠ²Π° ΠΈ ΠΎΡΠ±Π΅Π»ΡΠ·Π²Π° ΡΠ΅Π½Π½ΠΈ ΠΊΠ½ΠΈΠΆΠ° Π½Π° ΡΡΡΠΊΠΈ ΠΈ ΡΡΠΆΠ΄Π΅ΡΡΡΠ°Π½Π½ΠΈ Π΅ΠΌΠΈΡΠ΅Π½ΡΠΈ Π½Π° ΡΡΠΎΠΉΠ½ΠΎΡΡ Π½Π°Π΄ 50 ΡΡΠ»Π½ ΡΡΠ±Π»ΠΈ. Π Π°ΡΡΡΡΠΈΡΡ ΠΎΠ±Π΅ΠΌ Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈΡΠ΅, ΠΈΠ·Π²ΡΡΡΠ²Π°Π½ΠΈ ΠΎΡ ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ°, ΠΊΠ°ΠΊΡΠΎ ΠΈ Π½Π΅ΠΏΡΠ΅ΠΊΡΡΠ½Π°ΡΠΎΡΠΎ ΡΠ°Π·ΡΠΈΡΡΠ²Π°Π½Π΅ Π½Π° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡΡΠ° ΠΈΠ·ΠΈΡΠΊΠ²Π°Ρ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°Π½Π΅ Π½Π° Π²ΠΈΡΠΎΠΊΠΎ ΠΊΠ°ΡΠ΅ΡΡΠ²ΠΎ Π½Π° ΠΈΠ·Ρ ΠΎΠ΄Π½ΠΈΡ ΠΊΠΎΠ΄ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠΈΡΠ΅. ΠΠ΄ΠΈΠ½ ΠΎΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈΡΠ΅ Π·Π° ΠΏΠΎΡΡΠΈΠ³Π°Π½Π΅ Π½Π° ΡΠ°Π·ΠΈ ΡΠ΅Π» Π΅ ΡΡΠ°ΡΠΈΡΠ½ΠΈΡΡ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡ SonarQube. Π ΡΠ°Π·ΠΈ ΡΡΠ°ΡΠΈΡ ΡΠ΅ ΠΎΠΏΠΈΡΠ΅ΠΌ ΡΡΠΏΠ΅ΡΠ½ΠΈΡ ΠΎΠΏΠΈΡ Π·Π° Π±Π΅Π·ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ½ΠΎ Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅ Π½Π° ΡΡΠ°ΡΠΈΡΠ½ΠΈΡ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡ SonarQube Π² ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°ΡΠΈΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΠΈ Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° Π² Π½Π°ΡΠΈΡ ΠΎΡΠ΄Π΅Π».
ΠΡΠ°ΡΠΊΠΎ Π·Π° ΠΎΡΠ΄Π΅Π»Π°
Π Π½Π°ΡΠ°ΡΠ° ΠΊΠΎΠΌΠΏΠ΅ΡΠ΅Π½ΡΠΈΡ ΡΠ° ΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ: ΠΏΠ»Π°ΡΠ°Π½ΠΈΡ Π½Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠΈΡΠ΅ Π½Π° ΠΠ Π, Π΅Π»Π΅ΠΊΡΡΠΎΠ½Π΅Π½ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΎΠΎΠ±ΠΎΡΠΎΡ (ΠΠΠ), ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎΡ ΡΡΡΠ³ΠΎΠ²ΡΠΊΠΈΡ Π΄Π΅ΠΏΠΎΠ·ΠΈΡΠ°Ρ (ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΡ Π½Π° ΠΈΠ·Π²ΡΠ½Π±ΠΎΡΡΠΎΠ²ΠΈ ΡΠ΄Π΅Π»ΠΊΠΈ), ΠΊΠ°Π½Π°Π»ΠΈ Π·Π° Π΅Π»Π΅ΠΊΡΡΠΎΠ½Π½ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΠΈ ΠΈ ΠΠ Π ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΡΡΠ³ΠΈ. Π ΠΎΠ±ΡΠΈ Π»ΠΈΠ½ΠΈΠΈ, Π³ΠΎΠ»ΡΠΌΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ°Π±ΠΎΡΠ° ΠΏΠΎ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠ°ΡΠ° ΡΡΡΠ°Π½Π° Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½Π°ΡΠ° Π΄Π΅ΠΉΠ½ΠΎΡΡ. Π Π°Π±ΠΎΡΠΈΠΌ Π½Π° ΠΎΡΠ½ΠΎΠ²Π°ΡΠ° Π½Π° Π·Π°ΡΠ²ΠΊΠΈ. ΠΠ°ΡΠ²ΠΊΠΈΡΠ΅ Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΈΡΠ΅ ΡΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ²Π°Ρ ΠΎΡ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΠΈ: ΡΠ΅ ΡΡΠ±ΠΈΡΠ°Ρ ΠΈΠ·ΠΈΡΠΊΠ²Π°Π½ΠΈΡΡΠ° Π½Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΠΈ Π½ΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΡ ΡΠ²ΠΎΠ΅ΡΠΎ Π²ΠΈΠΆΠ΄Π°Π½Π΅ Π·Π° ΡΠΎΠ²Π° ΠΊΠ°ΠΊ Π΄Π° Π±ΡΠ΄Π΅ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠ°Π½ΠΎ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ°. Π‘Π»Π΅Π΄Π²Π°Ρ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΈΡΠ΅ ΡΡΡΠΏΠΊΠΈ: ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΠΊΠΎΠ΄ β ΡΠ΅ΡΡΠ²Π°Π½Π΅ β ΠΎΠΏΠΈΡΠ½Π° Π΅ΠΊΡΠΏΠ»ΠΎΠ°ΡΠ°ΡΠΈΡ β Π΄ΠΎΡΡΠ°Π²ΠΊΠ° Π½Π° ΠΊΠΎΠ΄Π° Π·Π° ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΠ²Π½ΠΈΡ ΠΊΠΎΠ½ΡΡΡ Π½Π° Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½ΠΈΡ ΠΊΠ»ΠΈΠ΅Π½Ρ.
ΠΠ°ΡΠΎ ΡΠΎΡΠ½ΠΎ SonarQube?
Π’ΠΎΠ²Π° Π΅ ΠΏΡΡΠ²ΠΈΡΡ ΠΎΠΏΠΈΡ Π½Π° Π½Π°ΡΠΈΡ ΠΎΡΠ΄Π΅Π» Π·Π° Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅ Π½Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ° Π·Π° ΠΊΠΎΠ½ΡΡΠΎΠ» Π½Π° ΠΊΠ°ΡΠ΅ΡΡΠ²ΠΎΡΠΎ Π½Π° ΠΊΠΎΠ΄Π° β ΠΏΡΠ΅Π΄ΠΈ ΡΠΎΠ²Π° Π³ΠΎ ΠΏΡΠ°Π²Π΅Ρ ΠΌΠ΅ ΡΡΡΠ½ΠΎ, ΠΏΡΠΎΠ²Π΅ΠΆΠ΄Π°ΠΉΠΊΠΈ ΡΠ°ΠΌΠΎ ΠΊΠΎΠ΄ΠΎΠ²ΠΈ ΡΠ΅Π²ΡΡΠ°. ΠΠΎ ΡΠ²Π΅Π»ΠΈΡΠ°Π²Π°ΡΠΈΡΡ ΡΠ΅ ΠΎΠ±Π΅ΠΌ ΡΠ°Π±ΠΎΡΠ° ΠΈΠ·ΠΈΡΠΊΠ²Π° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΡ Π½Π° ΡΠΎΠ·ΠΈ ΠΏΡΠΎΡΠ΅Ρ. ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π°, Π² Π΅ΠΊΠΈΠΏΠ° ΠΈΠΌΠ° ΠΈ Π½Π΅ΠΎΠΏΠΈΡΠ½ΠΈ ΡΠ»ΡΠΆΠΈΡΠ΅Π»ΠΈ, ΠΊΠΎΠΈΡΠΎ Π½Π΅ ΡΠ° Π½Π°ΠΏΡΠ»Π½ΠΎ Π·Π°ΠΏΠΎΠ·Π½Π°ΡΠΈ Ρ Π²ΡΡΡΠ΅ΡΠ½ΠΈΡΠ΅ ΡΠ΅Π³Π»Π°ΠΌΠ΅Π½ΡΠΈ Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ° ΠΈ ΡΠ΅ΡΡΠΎ Π΄ΠΎΠΏΡΡΠΊΠ°Ρ ΠΏΠΎΠ²Π΅ΡΠ΅ Π³ΡΠ΅ΡΠΊΠΈ. ΠΠ° ΠΊΠΎΠ½ΡΡΠΎΠ» Π½Π° ΠΊΠ°ΡΠ΅ΡΡΠ²ΠΎΡΠΎ Π½Π° ΠΊΠΎΠ΄Π° Π±Π΅ΡΠ΅ ΡΠ΅ΡΠ΅Π½ΠΎ Π΄Π° ΡΠ΅ Π²Π½Π΅Π΄ΡΠΈ ΡΡΠ°ΡΠΈΡΠ΅Π½ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡ. Π’ΡΠΉ ΠΊΠ°ΡΠΎ SonarQube Π²Π΅ΡΠ΅ Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ Π² Π½ΡΠΊΠΎΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈ Π½Π° ΠΠ Π, ΠΈΠ·Π±ΠΎΡΡΡ Π½Π΅ ΠΎΡΠ½Π΅ Π΄ΡΠ»Π³ΠΎ Π²ΡΠ΅ΠΌΠ΅. ΠΠΎ-ΡΠ°Π½ΠΎ ΠΊΠΎΠ»Π΅Π³ΠΈΡΠ΅ ΠΎΡ Π΄ΡΡΠ³ΠΈ ΠΏΠΎΠ΄ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΡ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ°Ρ Π° Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° Π½Π΅Π³ΠΎ ΠΊΠΎΠ΄Π° Π½Π° ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΠ·ΠΈΡΠ΅ Π² ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° βΠΠ»Π°ΠΌΠ΅Π½Π°β (ΡΠΎΠ±ΡΡΠ²Π΅Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ° Π·Π° Π΄Π΅ΠΏΠΎΠ·ΠΈΡΠ°ΡΠ½ΠΎ-ΠΊΠ»ΠΈΡΠΈΠ½Π³ΠΎΠ²ΠΎ ΠΎΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΠ Π), Π² Π¦Π€Π’ (ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΎΠ½Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ° Π·Π° Π²ΠΎΠ΄Π΅Π½Π΅ Π½Π° ΡΡΠ΅ΡΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ, Π±Π°Π»Π°Π½Ρ, ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ° Π½Π° Π·Π°Π΄ΡΠ»ΠΆΠΈΡΠ΅Π»Π½Π° ΠΈ Π²ΡΡΡΠ΅ΡΠ½Π° ΠΎΡΡΠ΅ΡΠ½ΠΎΡΡ), ΠΈ Π² Π½ΡΠΊΠΎΠΈ Π΄ΡΡΠ³ΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈ. ΠΠ° Π΅ΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠΈ ΡΠ΅ΡΠΈΡ ΠΌΠ΅ Π΄Π° Π·Π°ΠΏΠΎΡΠ½Π΅ΠΌ Ρ Π±Π΅Π·ΠΏΠ»Π°ΡΠ½Π°ΡΠ° Π²Π΅ΡΡΠΈΡ Π½Π° SonarQube. Π ΡΠ°ΠΊΠ°, Π΄Π° ΠΏΡΠ΅ΠΌΠΈΠ½Π΅ΠΌ ΠΊΡΠΌ Π½Π°ΡΠΈΡ ΡΠ»ΡΡΠ°ΠΉ.
ΠΡΠΎΡΠ΅Ρ Π½Π° Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅
ΠΠΌΠ°ΠΌΠ΅:
- Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° Π² TeamCity;
- Π½Π°ΡΡΡΠΎΠ΅Π½ Π΅ ΠΏΡΠΎΡΠ΅ΡΡΡ Π½Π° ΠΊΠ°ΡΠ²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ΄Π° ΡΡΠ΅Π· MergeRequest ΠΎΡ feature-ΠΊΠ»ΠΎΠ½ Π² master-ΠΊΠ»ΠΎΠ½ Π² GitLab (ΠΏΡΠΎΡΠ΅Ρ Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΡΡΠ³Π»Π°ΡΠ½ΠΎ GitHub Flow);
- SonarQube, Π½Π°ΡΡΡΠΎΠ΅Π½ Π΄Π° Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ° ΠΊΠΎΠ΄Π° Π·Π° ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° ΠΠΠ ΠΏΠΎ Π³ΡΠ°ΡΠΈΠΊ.
ΠΠ°ΡΠ°ΡΠ° ΡΠ΅Π»: Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅ Π½Π° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅Π½ Π°Π½Π°Π»ΠΈΠ· Π½Π° ΠΊΠΎΠ΄Π° Π² CI/CD ΠΏΡΠΎΡΠ΅ΡΠΈΡΠ΅ Π½Π° ΠΠΠ.
Π’ΡΡΠ±Π²Π° Π΄Π° Π½Π°ΡΡΡΠΎΠΈΠΌ: ΠΏΡΠΎΡΠ΅Ρ Π½Π° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅Π½ ΠΊΠΎΠ½ΡΡΠΎΠ» Π½Π° ΠΊΠΎΠ΄Π° ΡΡΡ ΡΡΠ°ΡΠΈΡΠ΅Π½ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡ ΠΏΡΠΈ Π²ΡΠ΅ΠΊΠΈ MergeRequest Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡ ΠΊΠ»ΠΎΠ½.
Π’.Π΅. ΡΠ΅Π»Π΅Π²Π°ΡΠ° ΠΊΠ°ΡΡΠΈΠ½Π° Π΅ ΡΠ»Π΅Π΄Π½Π°ΡΠ°: ΡΠΎΠΌ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΡΡ ΠΊΠ°ΡΠΈ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π² feature-ΠΊΠ»ΠΎΠ½Π°, Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ ΡΠ΅ ΡΡΠ°ΡΡΠΈΡΠ° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π·Π° Π½Π°Π»ΠΈΡΠΈΠ΅ Π½Π° Π½ΠΎΠ²ΠΈ Π³ΡΠ΅ΡΠΊΠΈ Π² ΠΊΠΎΠ΄Π°. ΠΠΊΠΎ Π½ΡΠΌΠ° Π³ΡΠ΅ΡΠΊΠΈ, ΡΠ΅ ΡΠ°Π·ΡΠ΅ΡΠ°Π²Π° ΠΏΡΠΈΠ΅ΠΌΠ°Π½Π΅ΡΠΎ Π½Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅, ΠΈΠ½Π°ΡΠ΅ ΡΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΏΠΎΠΏΡΠ°Π²ΡΡ Π³ΡΠ΅ΡΠΊΠΈΡΠ΅. ΠΠ΅ΡΠ΅ Π² Π½Π°ΡΠ°Π»Π½ΠΈΡ Π΅ΡΠ°ΠΏ ΡΡΠΏΡΡ ΠΌΠ΅ Π΄Π° ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΡΠΈΡΠ°ΠΌΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π³ΡΠ΅ΡΠΊΠΈ Π² ΠΊΠΎΠ΄Π°. Π‘ΠΈΡΡΠ΅ΠΌΠ°ΡΠ° ΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΎ Π³ΡΠ²ΠΊΠ°Π²ΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ: ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ° ΡΠ°ΠΊΠ°, ΡΠ΅ Π΄Π° ΡΠ°Π±ΠΎΡΠΈ ΠΏΠΎ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΈ Π·Π°Π΄Π°ΡΠΈ Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈΡΠ΅, Π·Π° Π²ΡΡΠΊΠ° ΡΠΈΡΡΠ΅ΠΌΠ° ΠΈ ΡΡΠΈΠ» Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅.
ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° Π½Π° QualityGate Π² SonarQube
ΠΠ½Π°Π»ΠΈΠ· QualityGate Π΅ Π½Π΅ΡΠΎ, ΠΊΠΎΠ΅ΡΠΎ ΠΏΡΠΎΡΠ΅ΡΠΎΡ ΠΌΠ΅ Π² Π΄ΡΠ»Π±ΠΈΠ½ΠΈΡΠ΅ Π½Π° ΠΈΠ½ΡΠ΅ΡΠ½Π΅Ρ. ΠΡΡΠ²ΠΎΠ½Π°ΡΠ°Π»Π½ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΠΌΠ΅ Π΄ΡΡΠ³ ΠΏΠΎΠ΄Ρ ΠΎΠ΄, ΠΏΠΎ-ΡΠ»ΠΎΠΆΠ΅Π½ ΠΈ ΠΎΡ Π½ΡΠΊΠ°ΠΊΠ²Π° ΡΡΡΠ°Π½Π° Π½Π΅ ΡΡΠ²ΡΠ΅ΠΌ ΠΏΡΠ°Π²ΠΈΠ»Π΅Π½. ΠΡΡΠ²ΠΎ Π΄Π²Π° ΠΏΡΡΠΈ ΡΡΠ°ΡΡΠΈΡΠ°Ρ ΠΌΠ΅ ΡΠΊΠ°Π½ΠΈΡΠ°Π½Π΅ ΠΏΡΠ΅Π· SonarQube: ΡΠΊΠ°Π½ΠΈΡΠ°Ρ ΠΌΠ΅ feature ΠΊΠ»ΠΎΠ½ ΠΈ ΠΊΠ»ΠΎΠ½Π°, Π² ΠΊΠΎΠΉΡΠΎ ΠΈΡΠΊΠ°Ρ ΠΌΠ΅ Π΄Π° ΡΠ»Π΅Π΅ΠΌ feature ΠΊΠ»ΠΎΠ½Π°, Π° ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° ΡΡΠ°Π²Π½ΡΠ²Π°Ρ ΠΌΠ΅ Π±ΡΠΎΡ Π½Π° Π³ΡΠ΅ΡΠΊΠΈΡΠ΅. Π’ΠΎΠ·ΠΈ ΠΌΠ΅ΡΠΎΠ΄ Π½Π΅ Π±Π΅ΡΠ΅ ΡΡΠ°Π±ΠΈΠ»Π΅Π½ ΠΈ Π½Π΅ Π²ΠΈΠ½Π°Π³ΠΈ Π΄Π°Π²Π°ΡΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΈ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈ. Π ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° Π½Π°ΡΡΠΈΡ ΠΌΠ΅, ΡΠ΅ Π²ΠΌΠ΅ΡΡΠΎ Π΄Π²ΠΎΠΉΠ½ΠΎ ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° SonarQube, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π½Π°ΡΡΡΠΎΠΈΠΌ Π»ΠΈΠΌΠΈΡ Π½Π° Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΈΡΠ΅ Π³ΡΠ΅ΡΠΊΠΈ (QualityGate) ΠΈ Π΄Π° Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ°ΠΌΠ΅ ΡΠ°ΠΌΠΎ ΠΊΠ»ΠΎΠ½Π°, ΠΊΠΎΠΉΡΠΎ ΠΊΠ°ΡΠ²Π°ΠΌΠ΅ ΠΈ ΡΡΠ°Π²Π½ΡΠ²Π°ΠΌΠ΅.

ΠΡΠ΅ ΠΎΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Π΄ΠΎΡΡΠ° ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π½Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° ΠΊΠΎΠ΄Π°. Π‘Π»Π΅Π΄Π²Π° Π΄Π° ΠΎΡΠ±Π΅Π»Π΅ΠΆΠΈΠΌ, ΡΠ΅ SonarQube Π½Π΅ Π΅ ΡΡΠ²ΠΌΠ΅ΡΡΠΈΠΌ Ρ Π½ΡΠΊΠΎΠΈ Π΅Π·ΠΈΡΠΈ Π·Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅, Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ Delphi. Π ΠΌΠΎΠΌΠ΅Π½ΡΠ° Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ°ΠΌΠ΅ ΡΠ°ΠΌΠΎ PLSql ΠΊΠΎΠ΄ Π·Π° Π½Π°ΡΠ°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ°.
Π Π°Π±ΠΎΡΠΈ ΡΠ°ΠΊΠ°:
- ΠΠ½Π°Π»ΠΈΠ·ΠΈΡΠ°ΠΌΠ΅ ΡΠ°ΠΌΠΎ PL/SQL ΠΊΠΎΠ΄ Π·Π° Π½Π°ΡΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡ.
- QualityGate Π² SonarQube Π΅ Π½Π°ΡΡΡΠΎΠ΅Π½ ΡΠ°ΠΊΠ°, ΡΠ΅ Π±ΡΠΎΡΡ Π½Π° Π³ΡΠ΅ΡΠΊΠΈΡΠ΅ Π΄Π° Π½Π΅ ΡΠ΅ ΡΠ²Π΅Π»ΠΈΡΠ°Π²Π° Ρ Π²ΡΠ΅ΠΊΠΈ ΠΊΠΎΠΌΠΈΡ.
- ΠΡΠΎΡΡ Π½Π° Π³ΡΠ΅ΡΠΊΠΈΡΠ΅ ΠΏΡΠΈ ΠΏΡΡΠ²ΠΎΡΠΎ ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π±Π΅ΡΠ΅ 229. ΠΠΊΠΎ Π±ΡΠΎΡΡ Π½Π° Π³ΡΠ΅ΡΠΊΠΈΡΠ΅ ΠΏΡΠΈ ΠΊΠΎΠΌΠΈΡΠ° Π½Π°ΡΠ°ΡΡΠ²Π°, ΡΠΎ ΡΠ»ΠΈΠ²Π°Π½Π΅ΡΠΎ Π½Π΅ ΡΠ΅ ΡΠ°Π·ΡΠ΅ΡΠ°Π²Π°.
- Π‘Π»Π΅Π΄ ΠΏΠΎΠΏΡΠ°Π²ΠΊΠ°ΡΠ° Π½Π° Π³ΡΠ΅ΡΠΊΠΈΡΠ΅ QualityGate ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΠΏΡΠ΅ΠΏΠΎΠ΄ΡΠ΅Π΄Π΅Π½ΠΎ.
- Π‘ΡΡΠΎ ΡΠ°ΠΊΠ°, ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ Π΄ΠΎΠ±Π°Π²ΡΡ Π½ΠΎΠ²ΠΈ Π΅Π»Π΅ΠΌΠ΅Π½ΡΠΈ Π·Π° Π°Π½Π°Π»ΠΈΠ·, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠΎΠΊΡΠΈΡΠΈΠ΅ Π½Π° ΠΊΠΎΠ΄Π° Ρ ΡΠ΅ΡΡΠΎΠ²Π΅ ΠΈ Ρ.Π½.
Π‘Ρ Π΅ΠΌΠ° Π½Π° ΡΠ°Π±ΠΎΡΠ°:

Π ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ΅ ΠΎΡ ΡΠ°Π±ΠΎΡΠ°ΡΠ° Π½Π° ΡΠΊΡΠΈΠΏΡΠ° ΡΠ΅ Π²ΠΈΠΆΠ΄Π°, ΡΠ΅ Π±ΡΠΎΡΡ Π½Π° Π³ΡΠ΅ΡΠΊΠΈΡΠ΅ Π² feature ΠΊΠ»ΠΎΠ½Π° Π½Π΅ ΡΠ΅ Π΅ ΡΠ²Π΅Π»ΠΈΡΠΈΠ». ΠΠ½Π°ΡΠΈ Π²ΡΠΈΡΠΊΠΎ Π΅ Π½Π°ΡΠ΅Π΄.

ΠΠΎΡΡΡΠΏΠ½Π° Π΅ Π±ΡΡΠΎΠ½ΡΡ Merge.

Π ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ΅ ΠΎΡ ΡΠ°Π±ΠΎΡΠ°ΡΠ° Π½Π° ΡΠΊΡΠΈΠΏΡΠ° ΡΠ΅ Π²ΠΈΠΆΠ΄Π°, ΡΠ΅ Π±ΡΠΎΡΡ Π½Π° Π³ΡΠ΅ΡΠΊΠΈΡΠ΅ Π² feature ΠΊΠ»ΠΎΠ½Π° Π΅ ΡΡΠ°Π½Π°Π» ΠΏΠΎ-Π²ΠΈΡΠΎΠΊ ΠΎΡ Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎΡΠΎ. ΠΠ½Π°ΡΠΈ Π²ΡΠΈΡΠΊΠΎ Π΅ Π»ΠΎΡΠΎ.

ΠΡΡΠΎΠ½ΡΡ Merge Π΅ ΡΠ΅ΡΠ²Π΅Π½. Π ΠΌΠΎΠΌΠ΅Π½ΡΠ° Π½ΡΠΌΠ° Π·Π°Π±ΡΠ°Π½Π° Π·Π° ΠΊΠ°ΡΠ²Π°Π½Π΅ Π½Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Ρ Π³ΡΠ΅ΡΠ΅Π½ ΠΊΠΎΠ΄, Π½ΠΎ ΡΠΎΠ²Π° ΡΠ΅ ΠΏΡΠ°Π²ΠΈ ΠΏΠΎ ΡΡΠΌΠΎΡΡΠ΅Π½ΠΈΠ΅ Π½Π° ΠΎΡΠ³ΠΎΠ²ΠΎΡΠ½ΠΈΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ. Π Π±ΡΠ΄Π΅ΡΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π·Π°Π±ΡΠ°Π½ΠΈ Π²Π½Π°ΡΡΠ½Π΅ΡΠΎ Π½Π° ΡΠ°ΠΊΠΈΠ²Π° ΠΊΠΎΠΌΠΈΡΠΈ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡ ΠΊΠ»ΠΎΠ½.

Π‘Π°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»Π½Π° ΡΠ°Π±ΠΎΡΠ° Π²ΡΡΡ Ρ Π³ΡΠ΅ΡΠΊΠΈΡΠ΅
Π‘Π»Π΅Π΄Π²Π° Π΄Π° ΠΏΡΠΎΠ²Π΅ΡΠΈΡΠ΅ Π²ΡΠΈΡΠΊΠΈ ΠΎΡΠΊΡΠΈΡΠΈ ΠΎΡ ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° Π³ΡΠ΅ΡΠΊΠΈ, Π·Π°ΡΠΎΡΠΎ SonarQube Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ° ΠΏΠΎ ΡΠΎΠ±ΡΡΠ²Π΅Π½ΠΈΡΠ΅ ΡΠΈ ΡΡΡΠΎΠ³ΠΈ ΡΡΠ°Π½Π΄Π°ΡΡΠΈ. Π’ΠΎΠ²Π°, ΠΊΠΎΠ΅ΡΠΎ ΡΠΎΠΉ ΡΡΠΈΡΠ° Π·Π° Π³ΡΠ΅ΡΠΊΠ°, Π² Π½Π°ΡΠΈΡ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π΅ Π΅ ΡΠ°ΠΊΠΎΠ²Π°. ΠΠ°ΡΠΎΠ²Π° Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΠΏΡΠΎΠ²Π΅ΡΠΈΠΌ ΠΈ Π΄Π° ΠΎΡΠ±Π΅Π»Π΅ΠΆΠΈΠΌ Π΄Π°Π»ΠΈ Π½Π°ΠΈΡΡΠΈΠ½Π° Π΅ Π³ΡΠ΅ΡΠΊΠ°, ΠΈΠ»ΠΈ Π½Π΅ΡΠΎ, ΠΊΠΎΠ΅ΡΠΎ Π½Π΅ Π΅ Π½ΡΠΆΠ½ΠΎ Π΄Π° ΡΠ΅ ΠΊΠΎΡΠΈΠ³ΠΈΡΠ° ΠΏΡΠΈ Π½Π°ΡΠΈΡΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΡ. Π’Π°ΠΊΠ° Π½Π°ΠΌΠ°Π»ΡΠ²Π°ΠΌΠ΅ Π±ΡΠΎΡ Π½Π° Π³ΡΠ΅ΡΠΊΠΈΡΠ΅. Π‘ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π½Π° Π²ΡΠ΅ΠΌΠ΅ΡΠΎ ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° ΡΠ΅ ΡΠ΅ Π½Π°ΡΡΠΈ Π΄Π° ΡΠ°Π·Π±ΠΈΡΠ° ΡΠ΅Π·ΠΈ Π½ΡΠ°Π½ΡΠΈ.
ΠΠΎ ΠΊΠ°ΠΊΠ²ΠΎ ΡΡΠΈΠ³Π½Π°Ρ ΠΌΠ΅
ΠΠ°ΡΠ°ΡΠ° ΡΠ΅Π» Π±Π΅ΡΠ΅ Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ΅ΠΌ Π΄Π°Π»ΠΈ Π² Π½Π°ΡΠΈΡ ΡΠ»ΡΡΠ°ΠΉ Π΅ ΡΠ΅Π»Π΅ΡΡΠΎΠ±ΡΠ°Π·Π½ΠΎ Π΄Π° ΡΠ΅ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠ° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ°ΡΠ° Π½Π° ΠΊΠΎΠ΄Π°. Π ΡΠ΅Π·ΡΠ»ΡΠ°ΡΡΡ ΠΎΠΏΡΠ°Π²Π΄Π° ΠΎΡΠ°ΠΊΠ²Π°Π½ΠΈΡΡΠ°. SonarQube Π½ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΡΠ°Π±ΠΎΡΠΈΠΌ Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈΡΠ΅ Π·Π° Π½Π°Ρ Π΅Π·ΠΈΡΠΈ, ΠΈΠ·Π²ΡΡΡΠ²Π° Π΄ΠΎΡΡΠ° ΠΊΠΎΠΌΠΏΠ΅ΡΠ΅Π½ΡΠ΅Π½ Π°Π½Π°Π»ΠΈΠ· ΠΈ ΠΈΠΌΠ° ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π» Π΄Π° ΡΠ΅ ΠΎΠ±ΡΡΠ°Π²Π° Π½Π° ΡΡΠ²Π΅ΡΠΈ ΠΎΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈΡΠ΅. Π ΡΡΠ»ΠΎΡΡ, ΡΠΌΠ΅ Π΄ΠΎΠ²ΠΎΠ»Π½ΠΈ ΠΎΡ ΠΏΡΡΠ²ΠΎΠ½Π°ΡΠ°Π»Π½ΠΈΡ ΡΠΈ ΠΎΠΏΠΈΡ Ρ SonarQube ΠΈ ΠΏΠ»Π°Π½ΠΈΡΠ°ΠΌΠ΅ Π΄Π° ΡΠ΅ ΡΠ°Π·Π²ΠΈΠ²Π°ΠΌΠ΅ Π² ΡΠ°Π·ΠΈ ΠΏΠΎΡΠΎΠΊΠ° Π½Π°ΡΠ°ΡΡΠΊ. ΠΡΠ°ΠΊΠ²Π°ΠΌΠ΅, ΡΠ΅ Π² Π±ΡΠ΄Π΅ΡΠ΅ ΡΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΡΠΏΠ΅ΡΡΠΈΠΌ ΠΏΠΎΠ²Π΅ΡΠ΅ Π²ΡΠ΅ΠΌΠ΅ ΠΈ ΡΡΠΈΠ»ΠΈΡ ΠΏΡΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ°ΡΠ° Π½Π° ΠΊΠΎΠ΄Π° ΠΈ Π΄Π° Ρ Π½Π°ΠΏΡΠ°Π²ΠΈΠΌ ΠΏΠΎ-ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅Π½Π°, ΠΊΠ°ΡΠΎ Π΅Π»ΠΈΠΌΠΈΠ½ΠΈΡΠ°ΠΌΠ΅ ΡΠΎΠ²Π΅ΡΠΊΠΈΡ ΡΠ°ΠΊΡΠΎΡ. ΠΠΎΠΆΠ΅ Π±ΠΈ, ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΡΠΎΠ·ΠΈ ΠΏΡΠΎΡΠ΅Ρ, ΡΠ΅ ΠΎΡΠΊΡΠΈΠ΅ΠΌ Π½Π΅Π΄ΠΎΡΡΠ°ΡΡΡΠΈ Π² ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°ΡΠ° ΠΈΠ»ΠΈ ΠΏΡΠΊ ΠΎΡΠ½ΠΎΠ²ΠΎ ΡΠ΅ ΡΠ΅ ΡΠ²Π΅ΡΠΈΠΌ, ΡΠ΅ ΡΠΎΠ²Π° Π΅ ΡΡΡΠ°Ρ ΠΎΡΠ΅Π½ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Ρ Π³ΠΎΠ»ΡΠΌ ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π».
Π ΡΠ°Π·ΠΈ ΠΎΠ±Π·ΠΎΡΠ½Π° ΡΡΠ°ΡΠΈΡ ΡΠ°Π·ΠΊΠ°Π·Π°Ρ ΠΌΠ΅ Π·Π° Π½Π°ΡΠ΅ΡΠΎ Π·Π°ΠΏΠΎΠ·Π½Π°Π½ΡΡΠ²ΠΎ ΡΡΡ ΡΡΠ°ΡΠΈΡΠ½ΠΈΡ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡ SonarQube. ΠΠΊΠΎ ΠΈΠΌΠ°ΡΠ΅ Π²ΡΠΏΡΠΎΡΠΈ, ΠΌΠΎΠ»Ρ ΠΏΠΈΡΠ΅ΡΠ΅ Π² ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ΅. ΠΠΊΠΎ ΡΠ΅ΠΌΠ°ΡΠ° Π²ΠΈ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΠ²Π°, Π² Π½ΠΎΠ²Π°ΡΠ° ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΡ Π²Π΅ΡΠ΅ ΠΏΠΎ-ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΡΠ΅ ΠΎΠΏΠΈΡΠ΅ΠΌ ΠΊΠ°ΠΊ Π΄Π° Π½Π°ΡΡΡΠΎΠΈΠΌ Π²ΡΠΈΡΠΊΠΎ ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎ ΠΈ ΠΊΠ°ΠΊ Π΄Π° Π½Π°ΠΏΠΈΡΠ΅ΠΌ ΠΊΠΎΠ΄, Π·Π° Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΠΌ ΠΏΠΎΠ΄ΠΎΠ±Π½Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ°.
ΠΠ²ΡΠΎΡ Π½Π° ΡΠ΅ΠΊΡΡΠ°:
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: habr.com
