Π‘Π΅Π³ΠΎΠ΄Π½Ρ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΡ ΠΏΡΠΎΠ΄ΡΠΊΡΠΎΠ² ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡΡΡ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ . Π£ΡΠ»ΠΎΠ²ΠΈΡ ΡΡΠΏΠ΅Ρ Π° ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΡΡ Π² Π²ΠΈΠ΄Π΅ ΠΏΡΠΎΡΡΠΎΠΉ ΡΡ Π΅ΠΌΡ.
ΠΠ°ΠΏΠΈΡΠ°Π² ΠΊΠΎΠ΄, Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ, ΡΡΠΎ ΠΎΠ½:
- Π Π°Π±ΠΎΡΠ°Π΅Ρ.
- ΠΠΈΡΠ΅Π³ΠΎ Π½Π΅ Π»ΠΎΠΌΠ°Π΅Ρ, Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ ΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π°ΠΏΠΈΡΠ°Π»ΠΈ Π²Π°ΡΠΈ ΠΊΠΎΠ»Π»Π΅Π³ΠΈ.
ΠΡΠ»ΠΈ ΠΎΠ±Π° ΡΡΠ»ΠΎΠ²ΠΈΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ, ΡΠΎ Π²Ρ Π½Π° ΠΏΡΡΠΈ ΠΊ ΡΡΠΏΠ΅Ρ Ρ. Π§ΡΠΎΠ±Ρ Π»Π΅Π³ΠΊΠΎ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ ΡΡΠΈ ΡΡΠ»ΠΎΠ²ΠΈΡ ΠΈ Π½Π΅ ΡΠ²ΠΎΡΠ°ΡΠΈΠ²Π°ΡΡ Ρ Π²ΡΠ³ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡΡΠΈ, ΠΏΡΠΈΠ΄ΡΠΌΠ°Π»ΠΈ Continuous Integration.
CI β ΡΡΠΎ ΡΠ°Π±ΠΎΡΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡ, ΠΏΡΠΈ ΠΊΠΎΡΠΎΡΠΎΠΌ Π²Ρ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΡΠ΅ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΡΠ΅ΡΠ΅ ΡΠ²ΠΎΠΉ ΠΊΠΎΠ΄ Π² ΠΎΠ±ΡΠΈΠΉ ΠΊΠΎΠ΄ ΠΏΡΠΎΠ΄ΡΠΊΡΠ°. Π Π½Π΅ ΠΏΡΠΎΡΡΠΎ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΡΠ΅ΡΠ΅, Π° Π΅ΡΠ΅ ΠΈ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΡΠ΅, ΡΡΠΎ Π²ΡΠ΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ Π½ΡΠΆΠ½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ ΠΈ ΡΠ°ΡΡΠΎ, ΡΡΠΎΠΈΡ Π·Π°Π΄ΡΠΌΠ°ΡΡΡΡ ΠΎΠ± Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΠΈ. ΠΠΎΠΆΠ½ΠΎ Π²ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ Π½Π° ΡΡΡΠ½ΠΎΠΉ ΡΡΠ³Π΅, Π½ΠΎ Π½Π΅ ΡΡΠΎΠΈΡ, ΠΈ Π²ΠΎΡ ΠΏΠΎΡΠ΅ΠΌΡ.
- ΠΡΠ΄ΠΈ Π΄ΠΎΡΠΎΠ³ΠΈΠ΅. Π§Π°Ρ ΡΠ°Π±ΠΎΡΡ Π»ΡΠ±ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ° ΡΡΠΎΠΈΡ Π΄ΠΎΡΠΎΠΆΠ΅, ΡΠ΅ΠΌ ΡΠ°Ρ ΡΠ°Π±ΠΎΡΡ Π»ΡΠ±ΠΎΠ³ΠΎ ΡΠ΅ΡΠ²Π΅ΡΠ°.
- ΠΡΠ΄ΠΈ ΠΎΡΠΈΠ±Π°ΡΡΡΡ. ΠΠΎΡΡΠΎΠΌΡ ΠΌΠΎΠ³ΡΡ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡΡΡ ΡΠΈΡΡΠ°ΡΠΈΠΈ, ΠΊΠΎΠ³Π΄Π° Π·Π°ΠΏΡΡΡΠΈΠ»ΠΈ ΡΠ΅ΡΡΡ Π½Π΅ Π½Π° ΡΠΎΠΉ Π²Π΅ΡΠΊΠ΅ ΠΈΠ»ΠΈ ΡΠΎΠ±ΡΠ°Π»ΠΈ Π½Π΅ ΡΠΎΡ ΠΊΠΎΠΌΠΌΠΈΡ Π΄Π»Ρ ΡΠ΅ΡΡΠΈΡΠΎΠ²ΡΠΈΠΊΠΎΠ².
- ΠΡΠ΄ΠΈ Π»Π΅Π½ΡΡΡΡ. ΠΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ΅ΡΠΊΠΈ, ΠΊΠΎΠ³Π΄Π° Ρ Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°Ρ ΠΊΠ°ΠΊΡΡ-Π½ΠΈΠ±ΡΠ΄Ρ Π·Π°Π΄Π°ΡΡ, Ρ ΠΌΠ΅Π½Ρ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ ΠΌΡΡΠ»Ρ: Β«ΠΠ° ΡΡΠΎ ΡΡΡ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ? Π― Π½Π°ΠΏΠΈΡΠ°Π» Π΄Π²Π΅ ΡΡΡΠΎΡΠΊΠΈ β ΡΡΠΎΠΏΡΠ΄ΠΎΠ²ΠΎ Π²ΡΠ΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ!Β» ΠΡΠΌΠ°Ρ, Π½Π΅ΠΊΠΎΡΠΎΡΡΠΌ ΠΈΠ· Π²Π°Ρ ΡΠ°ΠΊΠΈΠ΅ ΠΌΡΡΠ»ΠΈ ΡΠΎΠΆΠ΅ ΠΈΠ½ΠΎΠ³Π΄Π° ΠΏΡΠΈΡ ΠΎΠ΄ΡΡ Π² Π³ΠΎΠ»ΠΎΠ²Ρ. ΠΠΎ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ Π½ΡΠΆΠ½ΠΎ Π²ΡΠ΅Π³Π΄Π°.
ΠΠ°ΠΊ Π²Π½Π΅Π΄ΡΡΠ»ΠΈ ΠΈ ΡΠ°Π·Π²ΠΈΠ²Π°Π»ΠΈ Continuous Integration Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅ ΠΌΠΎΠ±ΠΈΠ»ΡΠ½ΠΎΠΉ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΠ²ΠΈΡΠΎ, ΠΊΠ°ΠΊ Π΄ΠΎΡΠ»ΠΈ ΠΎΡ 0 Π΄ΠΎ 450 ΡΠ±ΠΎΡΠΎΠΊ Π² Π΄Π΅Π½Ρ, ΠΈ ΡΡΠΎ Π±ΠΈΠ»Π΄-ΠΌΠ°ΡΠΈΠ½Ρ ΡΠΎΠ±ΠΈΡΠ°ΡΡ 200 ΡΠ°ΡΠΎΠ² Π² Π΄Π΅Π½Ρ, ΡΠ°ΡΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΠΠΈΠΊΠΎΠ»Π°ΠΉ ΠΠ΅ΡΡΠ΅ΡΠΎΠ² (
Π Π°ΡΡΠΊΠ°Π· ΠΏΠΎΡΡΡΠΎΠ΅Π½ Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Android-ΠΊΠΎΠΌΠ°Π½Π΄Ρ, Π½ΠΎ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΎΠ² ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌΡ ΠΈ Π½Π° iOS ΡΠΎΠΆΠ΅.
ΠΠΎΠ³Π΄Π°-ΡΠΎ Π΄Π°Π²Π½ΠΎ Π² Android-ΠΊΠΎΠΌΠ°Π½Π΄Π΅ ΠΠ²ΠΈΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π» ΠΎΠ΄ΠΈΠ½ ΡΠ΅Π»ΠΎΠ²Π΅ΠΊ. ΠΠΌΡ ΠΏΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ Π½ΠΈΡΠ΅Π³ΠΎ ΠΈΠ· Continuous Integration Π±ΡΠ»ΠΎ Π½Π΅ Π½ΡΠΆΠ½ΠΎ: ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠΎΠ²Π°ΡΡΡΡ Π½Π΅ Ρ ΠΊΠ΅ΠΌ.
ΠΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠΎΡΠ»ΠΎ, ΠΏΠΎΡΠ²Π»ΡΠ»ΠΎΡΡ Π²ΡΠ΅ Π±ΠΎΠ»ΡΡΠ΅ ΠΈ Π±ΠΎΠ»ΡΡΠ΅ Π½ΠΎΠ²ΡΡ Π·Π°Π΄Π°Ρ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, ΡΠΎΡΠ»Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°. Π ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ ΠΏΡΠΈΡΠ»ΠΎ Π²ΡΠ΅ΠΌΡ Π±ΠΎΠ»Π΅Π΅ ΡΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ Π½Π°Π»Π°Π΄ΠΈΡΡ ΠΏΡΠΎΡΠ΅ΡΡ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ ΠΊΠΎΠ΄Π°. ΠΡΠ»ΠΎ ΡΠ΅ΡΠ΅Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Git flow.
ΠΠΎΠ½ΡΠ΅ΠΏΡΠΈΡ Git flow ΠΈΠ·Π²Π΅ΡΡΠ½Π°: Π² ΠΏΡΠΎΠ΅ΠΊΡΠ΅ Π΅ΡΡΡ ΠΎΠ΄Π½Π° ΠΎΠ±ΡΠ°Ρ Π²Π΅ΡΠΊΠ° develop, Π° Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π½ΠΎΠ²ΠΎΠΉ ΡΠΈΡΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΡΡΠ΅Π·Π°ΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ Π²Π΅ΡΠΊΡ, ΠΊΠΎΠΌΠΌΠΈΡΡΡ Π² Π½Π΅Π΅, ΠΏΡΡΠ°Ρ, ΠΈ, ΠΊΠΎΠ³Π΄Π° Ρ
ΠΎΡΡΡ Π²Π»ΠΈΡΡ ΡΠ²ΠΎΠΉ ΠΊΠΎΠ΄ Π² Π²Π΅ΡΠΊΡ develop, ΠΎΡΠΊΡΡΠ²Π°ΡΡ pull request. ΠΠ»Ρ ΠΎΠ±ΠΌΠ΅Π½Π° Π·Π½Π°Π½ΠΈΡΠΌΠΈ ΠΈ ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΡ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΠΎΠ² ΠΌΡ Π²Π²Π΅Π»ΠΈ code review, ΡΠΎ Π΅ΡΡΡ ΠΊΠΎΠ»Π»Π΅Π³ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ ΠΈ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠ΄ΠΈΡΡ ΠΊΠΎΠ΄ Π΄ΡΡΠ³ Π΄ΡΡΠ³Π°.
ΠΡΠΎΠ²Π΅ΡΠΊΠΈ
Π‘ΠΌΠΎΡΡΠ΅ΡΡ ΠΊΠΎΠ΄ Π³Π»Π°Π·Π°ΠΌΠΈ β ΡΡΠΎ ΠΊΡΡΡΠΎ, Π½ΠΎ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ. ΠΠΎΡΡΠΎΠΌΡ Π²Π²ΠΎΠ΄ΡΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ.
- ΠΠ΅ΡΠ²ΡΠΌ Π΄Π΅Π»ΠΎΠΌ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΡΠ±ΠΎΡΠΊΡ ΠΠ Π.
- ΠΠ½ΠΎΠ³ΠΎ Junit-ΡΠ΅ΡΡΠΎΠ².
- Π‘ΡΠΈΡΠ°Π΅ΠΌ code coverage, ΡΠ°Π· ΡΠΆ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌ ΡΠ΅ΡΡΡ.
Π§ΡΠΎΠ±Ρ ΠΏΠΎΠ½ΡΡΡ, ΠΊΠ°ΠΊ ΡΠ»Π΅Π΄ΡΠ΅Ρ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΡΡΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ, ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ Π½Π° ΠΏΡΠΎΡΠ΅ΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Π² ΠΠ²ΠΈΡΠΎ.
Π‘Ρ Π΅ΠΌΠ°ΡΠΈΡΠ½ΠΎ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΡΡ ΡΠ°ΠΊ:
- Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΏΠΈΡΠ΅Ρ ΠΊΠΎΠ΄ Π½Π° ΡΠ²ΠΎΠ΅ΠΌ Π½ΠΎΡΡΠ±ΡΠΊΠ΅. ΠΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ ΠΏΡΡΠΌΠΎ Π·Π΄Π΅ΡΡ β Π»ΠΈΠ±ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ-Ρ ΡΠΊΠΎΠΌ, Π»ΠΈΠ±ΠΎ ΠΏΡΠΎΡΡΠΎ Π³ΠΎΠ½ΡΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π² ΡΠΎΠ½Π΅.
- ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ Π·Π°ΠΏΡΡΠΈΠ» ΠΊΠΎΠ΄, ΠΎΠ½ ΠΎΡΠΊΡΡΠ²Π°Π΅Ρ pull request. Π§ΡΠΎΠ±Ρ Π΅Π³ΠΎ ΠΊΠΎΠ΄ ΠΏΠΎΠΏΠ°Π» Π² Π²Π΅ΡΠΊΡ develop, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡΠΎΠΉΡΠΈ code review ΠΈ ΡΠΎΠ±ΡΠ°ΡΡ Π½ΡΠΆΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠΉ. ΠΠΎΠΆΠ½ΠΎ Π²ΠΊΠ»ΡΡΠΈΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΈ Π±ΠΈΠ»Π΄Ρ Π·Π΄Π΅ΡΡ: ΠΏΠΎΠΊΠ° Π½Π΅ Π²ΡΠ΅ Π±ΠΈΠ»Π΄Ρ ΡΡΠΏΠ΅ΡΠ½ΡΠ΅, pull request ΡΠ»ΠΈΡΡ Π½Π΅Π»ΡΠ·Ρ.
- ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ pull request ΡΠ»ΠΈΡ ΠΈ ΠΊΠΎΠ΄ ΠΏΠΎΠΏΠ°Π» Π² develop, ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠ±ΡΠ°ΡΡ ΡΠ΄ΠΎΠ±Π½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ: Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π½ΠΎΡΡΡ, ΠΊΠΎΠ³Π΄Π° Π²ΡΠ΅ ΡΠ΅ΡΠ²Π΅ΡΡ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½Ρ, ΠΈ Π³ΠΎΠ½ΡΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²Π»Π΅Π·Π΅Ρ.
ΠΠ°ΠΏΡΡΠΊΠ°ΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π½Π° ΡΠ²ΠΎΠ΅ΠΌ Π½ΠΎΡΡΠ±ΡΠΊΠ΅ Π½ΠΈΠΊΠΎΠΌΡ Π½Π΅ ΠΏΠΎΠ½ΡΠ°Π²ΠΈΠ»ΠΎΡΡ. ΠΠΎΠ³Π΄Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ Π·Π°ΠΊΠΎΠ½ΡΠΈΠ» ΡΠΈΡΡ, ΠΎΠ½ Ρ ΠΎΡΠ΅Ρ ΠΏΠΎΠ±ΡΡΡΡΠ΅Π΅ Π΅Π΅ Π·Π°ΠΏΡΡΠΈΡΡ ΠΈ ΠΎΡΠΊΡΡΡΡ pull request. ΠΡΠ»ΠΈ Π² ΡΡΠΎΡ ΠΌΠΎΠΌΠ΅Π½Ρ Π·Π°ΠΏΡΡΠΊΠ°ΡΡΡΡ ΠΊΠ°ΠΊΠΈΠ΅-ΡΠΎ Π΄ΠΎΠ»Π³ΠΈΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ, ΡΡΠΎ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ Π½Π΅ ΠΎΡΠ΅Π½Ρ ΠΏΡΠΈΡΡΠ½ΠΎ, Π½ΠΎ ΠΈ Π·Π°ΠΌΠ΅Π΄Π»ΡΠ΅Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΡ: ΠΏΠΎΠΊΠ° Π½ΠΎΡΡΠ±ΡΠΊ ΡΡΠΎ-ΡΠΎ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ, Π½Π° Π½Π΅ΠΌ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡ.
ΠΠ°ΠΏΡΡΠΊΠ°ΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π½ΠΎΡΡΡ Π½Π°ΠΌ ΠΎΡΠ΅Π½Ρ ΠΏΠΎΠ½ΡΠ°Π²ΠΈΠ»ΠΎΡΡ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΈ ΡΠ΅ΡΠ²Π΅ΡΠΎΠ² ΠΌΠ½ΠΎΠ³ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°Π·Π³ΡΠ»ΡΡΡΡΡ. ΠΠΎ, ΠΊ ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ, ΠΊΠΎΠ³Π΄Π° ΠΊΠΎΠ΄ ΡΠΈΡΠΈ ΠΏΠΎΠΏΠ°Π» Π² develop, Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° ΡΠΆΠ΅ Π³ΠΎΡΠ°Π·Π΄ΠΎ ΠΌΠ΅Π½ΡΡΠ΅ ΠΌΠΎΡΠΈΠ²Π°ΡΠΈΠΈ ΡΠΈΠ½ΠΈΡΡ ΠΎΡΠΈΠ±ΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π°ΡΠ΅Π» CI. Π― ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ΅ΡΠΊΠΈ Π»ΠΎΠ²ΠΈΠ» ΡΠ΅Π±Ρ Π½Π° ΠΌΡΡΠ»ΠΈ, ΠΊΠΎΠ³Π΄Π° ΡΠΌΠΎΡΡΠ΅Π» Π² ΡΡΡΠ΅Π½Π½Π΅ΠΌ ΠΎΡΡΠ΅ΡΠ΅ Π½Π° Π²ΡΠ΅ Π½Π°ΠΉΠ΄Π΅Π½Π½ΡΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ, ΡΡΠΎ ΠΏΠΎΡΠΈΠ½Ρ ΠΈΡ ΠΊΠΎΠ³Π΄Π°-Π½ΠΈΠ±ΡΠ΄Ρ ΠΏΠΎΠΏΠΎΠ·ΠΆΠ΅, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΠ΅ΠΉΡΠ°Ρ Π² Jira Π»Π΅ΠΆΠΈΡ ΠΊΡΡΡΠ°Ρ Π½ΠΎΠ²Π°Ρ Π·Π°Π΄Π°ΡΠ°, ΠΊΠΎΡΠΎΡΡΡ ΡΠ°ΠΊ ΠΈ Ρ ΠΎΡΠ΅ΡΡΡ Π½Π°ΡΠ°ΡΡ Π΄Π΅Π»Π°ΡΡ.
ΠΡΠ»ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π±Π»ΠΎΠΊΠΈΡΡΡΡ pull request, ΡΠΎ ΠΌΠΎΡΠΈΠ²Π°ΡΠΈΠΈ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΏΠΎΠΊΠ° Π±ΠΈΠ»Π΄Ρ Π½Π΅ ΠΏΠΎΠ·Π΅Π»Π΅Π½Π΅ΡΡ, ΠΊΠΎΠ΄ Π½Π΅ ΠΏΠΎΠΏΠ°Π΄Π΅Ρ Π² develop, Π°, Π·Π½Π°ΡΠΈΡ, Π·Π°Π΄Π°ΡΠ° Π½Π΅ Π±ΡΠ΄Π΅Ρ Π·Π°Π²Π΅ΡΡΠ΅Π½Π°.
Π ΠΈΡΠΎΠ³Π΅ ΠΌΡ Π²ΡΠ±ΡΠ°Π»ΠΈ ΡΠ°ΠΊΡΡ ΡΡΡΠ°ΡΠ΅Π³ΠΈΡ: Π½ΠΎΡΡΡ Π³ΠΎΠ½ΡΠ΅ΠΌ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠΉ Π½Π°Π±ΠΎΡ ΠΏΡΠΎΠ²Π΅ΡΠΎΠΊ, Π° ΡΠ°ΠΌΡΠ΅ ΠΊΡΠΈΡΠΈΡΠ½ΡΠ΅ ΠΈΠ· Π½ΠΈΡ ΠΈ, ΡΠ°ΠΌΠΎΠ΅ Π³Π»Π°Π²Π½ΠΎΠ΅ Π±ΡΡΡΡΡΠ΅, Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌ Π½Π° pull request. ΠΠΎ Π½Π° ΡΡΠΎΠΌ Π½Π΅ ΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌΡΡ β ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΡΠ΅ΠΌ ΡΠΊΠΎΡΠΎΡΡΡ ΠΏΡΠΎΡ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΏΡΠΎΠ²Π΅ΡΠΎΠΊ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΠΏΠ΅ΡΠ΅Π²Π΅ΡΡΠΈ ΠΈΡ ΠΈΠ· Π½ΠΎΡΠ½ΠΎΠ³ΠΎ ΡΠ΅ΠΆΠΈΠΌΠ° Π² ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π½Π° pull request.
ΠΠ° ΡΠΎΡ ΠΌΠΎΠΌΠ΅Π½Ρ Π²ΡΠ΅ Π½Π°ΡΠΈ ΡΠ±ΠΎΡΠΊΠΈ ΠΏΡΠΎΡ ΠΎΠ΄ΠΈΠ»ΠΈ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π±ΡΡΡΡΠΎ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΌΡ ΠΏΡΠΎΡΡΠΎ Π²ΠΊΠ»ΡΡΠΈΠ»ΠΈ Π±Π»ΠΎΠΊΠ΅ΡΠΎΠΌ ΠΊ pull request ΡΠ±ΠΎΡΠΊΡ ΠΠ Π, Junit-ΡΠ΅ΡΡΡ ΠΈ ΡΠ°ΡΡΠ΅Ρ code coverage. ΠΠΊΠ»ΡΡΠΈΠ»ΠΈ, ΠΏΠΎΠ΄ΡΠΌΠ°Π»ΠΈ β ΠΈ ΠΎΡΠΊΠ°Π·Π°Π»ΠΈΡΡ ΠΎΡ code coverage, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΏΠΎΡΡΠΈΡΠ°Π»ΠΈ, ΡΡΠΎ ΠΎΠ½ Π½Π°ΠΌ Π½Π΅ Π½ΡΠΆΠ΅Π½.
ΠΠ° Π²ΡΡ Π½Π°ΡΡΡΠΎΠΉΠΊΡ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ CI Ρ Π½Π°Ρ ΡΡΠ»ΠΎ Π΄Π²Π° Π΄Π½Ρ (Π·Π΄Π΅ΡΡ ΠΈ Π΄Π°Π»Π΅Π΅ Π²ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΠΎΡΠ΅Π½ΠΊΠ° ΠΏΡΠΈΠΌΠ΅ΡΠ½Π°Ρ, Π½ΡΠΆΠ½Π° Π΄Π»Ρ ΠΌΠ°ΡΡΡΠ°Π±Π°).
ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΡΡΠ°Π»ΠΈ Π΄ΡΠΌΠ°ΡΡ Π΄Π°Π»ΡΡΠ΅ β Π° ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ Π»ΠΈ ΠΌΡ Π²ΠΎΠΎΠ±ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ? ΠΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ Π»ΠΈ ΠΌΡ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌ Π±ΠΈΠ»Π΄Ρ Π½Π° pull request?
ΠΡ Π·Π°ΠΏΡΡΠΊΠ°Π»ΠΈ ΡΠ±ΠΎΡΠΊΡ Π½Π° ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΌ ΠΊΠΎΠΌΠΌΠΈΡΠ΅ Π²Π΅ΡΠΊΠΈ, Ρ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΎΡΠΊΡΡΡ pull request. ΠΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΡΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΌΠΈΡΠ° ΠΌΠΎΠ³ΡΡ ΠΏΠΎΠΊΠ°Π·Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎ, ΡΡΠΎ ΡΠΎΡ ΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π°ΠΏΠΈΡΠ°Π» ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ, ΡΠ°Π±ΠΎΡΠ°Π΅Ρ. ΠΠΎ ΠΎΠ½ΠΈ Π½Π΅ Π΄ΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡ, ΡΡΠΎ ΠΎΠ½ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ ΡΠ»ΠΎΠΌΠ°Π». ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Π½ΡΠΆΠ½ΠΎ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ Π²Π΅ΡΠΊΠΈ develop ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π² Π½Π΅Π΅ Π±ΡΠ΄Π΅Ρ Π²Π»ΠΈΡΠ° ΡΠΈΡΠ°.
ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΠΌΡ Π½Π°ΠΏΠΈΡΠ°Π»ΠΈ ΠΏΡΠΎΡΡΠΎΠΉ bash-ΡΠΊΡΠΈΠΏΡ premerge.sh:
#!/usr/bin/env bash
set -e
git fetch origin develop
git merge origin/develop
ΠΠ΄Π΅ΡΡ ΠΏΡΠΎΡΡΠΎ ΠΏΠΎΠ΄ΡΡΠ³ΠΈΠ²Π°ΡΡΡΡ Π²ΡΠ΅ ΡΠ°ΠΌΡΠ΅ ΡΠ²Π΅ΠΆΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΈΠ· develop ΠΈ Π²Π»ΠΈΠ²Π°ΡΡΡΡ Π² ΡΠ΅ΠΊΡΡΡΡ Π²Π΅ΡΠΊΡ. ΠΡ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ ΡΠΊΡΠΈΠΏΡ premerge.sh ΠΏΠ΅ΡΠ²ΡΠΌ ΡΠ°Π³ΠΎΠΌ Π²ΡΠ΅Ρ Π±ΠΈΠ»Π΄ΠΎΠ² ΠΈ ΡΡΠ°Π»ΠΈ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΠΎ, ΡΡΠΎ ΠΌΡ Ρ ΠΎΡΠΈΠΌ, ΡΠΎ Π΅ΡΡΡ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ.
ΠΠ° Π»ΠΎΠΊΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, ΠΏΠΎΠΈΡΠΊ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΈ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΡΠΎΠ³ΠΎ ΡΠΊΡΠΈΠΏΡΠ° ΡΡΠ»ΠΎ ΡΡΠΈ Π΄Π½Ρ.
ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠ°Π·Π²ΠΈΠ²Π°Π»ΠΎΡΡ, Π·Π°Π΄Π°Ρ ΠΏΠΎΡΠ²Π»ΡΠ»ΠΎΡΡ Π²ΡΠ΅ Π±ΠΎΠ»ΡΡΠ΅, ΡΠΎΡΠ»Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°, ΠΈ premerge.sh ΠΈΠ½ΠΎΠ³Π΄Π° Π½Π°ΡΠ°Π» Π½Π°Ρ ΠΏΠΎΠ΄Π²ΠΎΠ΄ΠΈΡΡ. Π develop ΠΏΡΠΎΠ½ΠΈΠΊΠ°Π»ΠΈ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΡΡΡΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π»ΠΎΠΌΠ°Π»ΠΈ ΡΠ±ΠΎΡΠΊΡ.
ΠΡΠΈΠΌΠ΅Ρ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΡΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ:
ΠΠ²Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Π½Π°ΡΠΈΠ½Π°ΡΡ ΠΏΠΈΠ»ΠΈΡΡ ΡΠΈΡΠΈ A ΠΈ B. Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΡΠΈΡΠΈ A ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠ²Π°Π΅Ρ Π² ΠΏΡΠΎΠ΅ΠΊΡΠ΅ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΡΡΠ½ΠΊΡΠΈΡ answer()
ΠΈ, ΠΊΠ°ΠΊ Ρ
ΠΎΡΠΎΡΠΈΠΉ Π±ΠΎΠΉΡΠΊΠ°ΡΡ, ΡΠ΄Π°Π»ΡΠ΅Ρ Π΅Π΅. ΠΡΠΈ ΡΡΠΎΠΌ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΡΠΈΡΠΈ B Π² ΡΠ²ΠΎΠ΅ΠΉ Π²Π΅ΡΠΊΠ΅ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ Π½ΠΎΠ²ΡΠΉ Π²ΡΠ·ΠΎΠ² ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ.
Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°ΡΡ ΡΠ°Π±ΠΎΡΡ ΠΈ Π² ΠΎΠ΄Π½ΠΎ ΠΈ ΡΠΎ ΠΆΠ΅ Π²ΡΠ΅ΠΌΡ ΠΎΡΠΊΡΡΠ²Π°ΡΡ pull request. ΠΠ°ΠΏΡΡΠΊΠ°ΡΡΡΡ Π±ΠΈΠ»Π΄Ρ, premerge.sh ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ ΠΎΠ±Π° pull request ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠ²Π΅ΠΆΠ΅Π³ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ develop β Π²ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π·Π΅Π»Π΅Π½ΡΠ΅. ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΆΠΈΡΡΡ pull request ΡΠΈΡΠΈ A, ΠΌΠ΅ΡΠΆΠΈΡΡΡ pull request ΡΠΈΡΠΈ Bβ¦ ΠΡΠΌ! Develop Π»ΠΎΠΌΠ°Π΅ΡΡΡ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π² ΠΊΠΎΠ΄Π΅ develop Π΅ΡΡΡ Π²ΡΠ·ΠΎΠ² Π½Π΅ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅ΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ.
ΠΠΎΠ³Π΄Π° Π½Π΅ ΡΠΎΠ±ΠΈΡΠ°Π΅ΡΡΡ develop, ΡΡΠΎ Π»ΠΎΠΊΠ°Π»ΡΠ½Π°Ρ ΠΊΠ°ΡΠ°ΡΡΡΠΎΡΠ°. ΠΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π° Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ±ΡΠ°ΡΡ ΠΈ ΠΎΡΠ΄Π°ΡΡ Π½Π° ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅.
Π’Π°ΠΊ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΎΡΡ, ΡΡΠΎ Ρ ΡΠ°ΡΠ΅ Π²ΡΠ΅Π³ΠΎ Π·Π°Π½ΠΈΠΌΠ°Π»ΡΡ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ½ΡΠΌΠΈ Π·Π°Π΄Π°ΡΠ°ΠΌΠΈ: Π°Π½Π°Π»ΠΈΡΠΈΠΊΠ°, ΡΠ΅ΡΡ, Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ . Π’ΠΎ Π΅ΡΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ ΠΏΠΈΡΠ°Π» ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈ ΠΊΠ»Π°ΡΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ. ΠΠ·-Π·Π° ΡΡΠΎΠ³ΠΎ Ρ ΠΎΡΠ΅Π½Ρ ΡΠ°ΡΡΠΎ ΠΏΠΎΠΏΠ°Π΄Π°Π» Π² ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠ΅ ΡΠΈΡΡΠ°ΡΠΈΠΈ. Π£ ΠΌΠ΅Π½Ρ Π΄Π°ΠΆΠ΅ ΠΎΠ΄Π½ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΠΈΡΠ΅Π»Π° ΡΠ°ΠΊΠ°Ρ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠ°.
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΡΠΎ Π½Π°Ρ Π½Π΅ ΡΡΡΡΠ°ΠΈΠ²Π°Π»ΠΎ, ΠΌΡ Π½Π°ΡΠ°Π»ΠΈ ΠΏΡΠΎΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ Π²Π°ΡΠΈΠ°Π½ΡΡ, ΠΊΠ°ΠΊ ΡΡΠΎ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠΈΡΡ.
ΠΠ°ΠΊ Π½Π΅ Π»ΠΎΠΌΠ°ΡΡ develop
ΠΠ΅ΡΠ²ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ: ΠΏΠ΅ΡΠ΅ΡΠΎΠ±ΠΈΡΠ°ΡΡ Π²ΡΠ΅ pull request ΠΏΡΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ develop. ΠΡΠ»ΠΈ Π² Π½Π°ΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ pull request Ρ ΡΠΈΡΠ΅ΠΉ A ΠΏΠ΅ΡΠ²ΡΠΉ ΠΏΠΎΠΏΠ°Π΄Π΅Ρ Π² develop, pull request ΡΠΈΡΠΈ B ΠΏΠ΅ΡΠ΅ΡΠΎΠ±Π΅ΡΠ΅ΡΡΡ, ΠΈ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π½Π΅ ΠΏΡΠΎΠΉΠ΄ΡΡ ΠΈΠ·-Π·Π° ΠΎΡΠΈΠ±ΠΊΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ.
Π§ΡΠΎΠ±Ρ ΠΏΠΎΠ½ΡΡΡ, ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π½Π° ΡΡΠΎ ΡΠΉΠ΄Π΅Ρ, ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΡΠΈΠΌΠ΅Ρ Ρ Π΄Π²ΡΠΌΡ PR. ΠΡΠΊΡΡΠ²Π°Π΅ΠΌ Π΄Π²Π° PR: Π΄Π²Π° Π±ΠΈΠ»Π΄Π°, Π΄Π²Π° Π·Π°ΠΏΡΡΠΊΠ° ΠΏΡΠΎΠ²Π΅ΡΠΎΠΊ. ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΏΠ΅ΡΠ²ΡΠΉ PR Π²Π»ΠΈΡ Π² develop, Π²ΡΠΎΡΠΎΠΉ Π½Π°Π΄ΠΎ ΠΏΠ΅ΡΠ΅ΡΠΎΠ±ΡΠ°ΡΡ. ΠΡΠΎΠ³ΠΎ, Π½Π° Π΄Π²Π° PR ΡΡ ΠΎΠ΄ΠΈΡ ΡΡΠΈ Π·Π°ΠΏΡΡΠΊΠ° ΠΏΡΠΎΠ²Π΅ΡΠΎΠΊ: 2 + 1 = 3.
Π ΠΏΡΠΈΠ½ΡΠΈΠΏΠ΅, Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ. ΠΠΎ ΠΌΡ ΠΏΠΎΡΠΌΠΎΡΡΠ΅Π»ΠΈ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΡ, ΠΈ ΡΠΈΠΏΠΈΡΠ½ΠΎΠΉ ΡΠΈΡΡΠ°ΡΠΈΠ΅ΠΉ Π² Π½Π°ΡΠ΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ Π±ΡΠ»ΠΎ 10 ΠΎΡΠΊΡΡΡΡΡ PR, Π° ΡΠΎΠ³Π΄Π° ΡΠΈΡΠ»ΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΎΠΊ β ΡΡΠΎ ΡΡΠΌΠΌΠ° ΠΏΡΠΎΠ³ΡΠ΅ΡΡΠΈΠΈ: 10 + 9 +β¦ + 1 = 55. Π’ΠΎ Π΅ΡΡΡ ΡΡΠΎΠ±Ρ ΠΏΡΠΈΠ½ΡΡΡ 10 PR, Π½Π°Π΄ΠΎ ΠΏΠ΅ΡΠ΅ΡΠΎΠ±ΡΠ°ΡΡ 55 ΡΠ°Π·. Π ΡΡΠΎ Π² ΠΈΠ΄Π΅Π°Π»ΡΠ½ΠΎΠΉ ΡΠΈΡΡΠ°ΡΠΈΠΈ, ΠΊΠΎΠ³Π΄Π° Π²ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΏΡΠΎΡ ΠΎΠ΄ΡΡ Ρ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΡΠ°Π·Π°, ΠΊΠΎΠ³Π΄Π° Π½ΠΈΠΊΡΠΎ Π½Π΅ ΠΎΡΠΊΡΡΠ²Π°Π΅Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ pull request, ΠΏΠΎΠΊΠ° ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΡΡΡ ΡΡΠΎΡ Π΄Π΅ΡΡΡΠΎΠΊ.
ΠΡΠ΅Π΄ΡΡΠ°Π²ΡΡΠ΅ ΡΠ΅Π±Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠΌ, ΠΊΠΎΡΠΎΡΠΎΠΌΡ Π½ΡΠΆΠ½ΠΎ ΡΡΠΏΠ΅ΡΡ Π½Π°ΠΆΠ°ΡΡ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡ Β«mergeΒ» ΠΏΠ΅ΡΠ²ΡΠΌ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π΅ΡΠ»ΠΈ ΡΡΠΎ ΡΠ΄Π΅Π»Π°Π΅Ρ ΡΠΎΡΠ΅Π΄, ΡΠΎ ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΠΆΠ΄Π°ΡΡ, ΠΏΠΎΠΊΠ° Π²ΡΠ΅ ΡΠ±ΠΎΡΠΊΠΈ ΠΏΡΠΎΠΉΠ΄ΡΡ Π·Π°Π½ΠΎΠ²ΠΎβ¦ ΠΠ΅Ρ, ΡΠ°ΠΊ Π½Π΅ ΠΏΠΎΠΉΠ΄Π΅Ρ, ΡΡΠΎ Π²ΡΠ΅ΡΡΠ΅Π· Π·Π°ΠΌΠ΅Π΄Π»ΠΈΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΡ.
ΠΡΠΎΡΠΎΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠΉ ΡΠΏΠΎΡΠΎΠ±: ΡΠΎΠ±ΠΈΡΠ°ΡΡ pull request ΠΏΠΎΡΠ»Π΅ code review. Π’ΠΎ Π΅ΡΡΡ ΠΎΡΠΊΡΡΠ²Π°Π΅ΡΠ΅ pull request, ΡΠΎΠ±ΠΈΡΠ°Π΅ΡΠ΅ Π½ΡΠΆΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π°ΠΏΡΡΠ²ΠΎΠ² ΠΎΡ ΠΊΠΎΠ»Π»Π΅Π³, ΠΈΡΠΏΡΠ°Π²Π»ΡΠ΅ΡΠ΅ ΡΡΠΎ Π½ΡΠΆΠ½ΠΎ, ΠΏΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΠ΅ Π±ΠΈΠ»Π΄Ρ. ΠΡΠ»ΠΈ ΠΎΠ½ΠΈ ΡΡΠΏΠ΅ΡΠ½Ρ, pull request ΡΠ»ΠΈΠ²Π°Π΅ΡΡΡ Ρ develop. Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΠΊΠΎΠ² Π½Π΅Ρ, Π½ΠΎ ΡΠΈΠ»ΡΠ½ΠΎ Π·Π°ΠΌΠ΅Π΄Π»ΡΠ΅ΡΡΡ ΠΎΠ±ΡΠ°ΡΠ½Π°Ρ ΡΠ²ΡΠ·Ρ. Π―, ΠΊΠ°ΠΊ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ, ΠΎΡΠΊΡΡΠ²Π°Ρ pull request, ΡΡΠ°Π·Ρ Ρ ΠΎΡΡ Π²ΠΈΠ΄Π΅ΡΡ, ΡΠΎΠ±ΠΈΡΠ°Π΅ΡΡΡ Π»ΠΈ ΠΎΠ½. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ ΡΠΏΠ°Π» ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ ΡΠ΅ΡΡ, Π½ΡΠΆΠ½ΠΎ Π΅Π³ΠΎ Π±ΡΡΡΡΠΎ ΠΏΠΎΡΠΈΠ½ΠΈΡΡ. Π ΡΠ»ΡΡΠ°Π΅ ΠΎΡΠ»ΠΎΠΆΠ΅Π½Π½ΠΎΠΉ ΡΠ±ΠΎΡΠΊΠΈ Π·Π°ΠΌΠ΅Π΄Π»ΡΠ΅ΡΡΡ ΠΎΠ±ΡΠ°ΡΠ½Π°Ρ ΡΠ²ΡΠ·Ρ, Π° Π·Π½Π°ΡΠΈΡ ΠΈ Π²ΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°. ΠΠ°Ρ ΡΡΠΎ ΡΠΎΠΆΠ΅ Π½Π΅ ΡΡΡΡΠ°ΠΈΠ²Π°Π»ΠΎ.
Π ΠΈΡΠΎΠ³Π΅ ΠΎΡΡΠ°Π»ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠ΅ΡΠΈΠΉ Π²Π°ΡΠΈΠ°Π½Ρ β Π²Π΅Π»ΠΎΡΠΈΠΏΠ΅Π΄ΠΈΡΡ. ΠΠ΅ΡΡ Π½Π°Ρ ΠΊΠΎΠ΄, Π²ΡΠ΅ Π½Π°ΡΠΈ ΠΈΡΡ ΠΎΠ΄Π½ΠΈΠΊΠΈ Ρ ΡΠ°Π½ΡΡΡΡ Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ Π² Bitbucket-ΡΠ΅ΡΠ²Π΅ΡΠ΅. Π‘ΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, Π½Π°ΠΌ ΠΏΡΠΈΡΠ»ΠΎΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΏΠ»Π°Π³ΠΈΠ½ Π΄Π»Ρ Bitbucket.
ΠΡΠΎΡ ΠΏΠ»Π°Π³ΠΈΠ½ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌ ΡΠ»ΠΈΡΠ½ΠΈΡ pull request’ΠΎΠ². ΠΠ°ΡΠ°Π»ΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ΅: ΠΎΡΠΊΡΡΠ²Π°Π΅ΡΡΡ PR, Π·Π°ΠΏΡΡΠΊΠ°ΡΡΡΡ Π²ΡΠ΅ ΡΠ±ΠΎΡΠΊΠΈ, ΠΏΡΠΎΡ
ΠΎΠ΄ΠΈΡ code review. ΠΠΎ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ code review ΠΏΡΠΎΠΉΠ΄Π΅Π½, ΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΡΠ΅ΡΠ°Π΅Ρ Π½Π°ΠΆΠ°ΡΡ Π½Π° Β«mergeΒ», ΠΏΠ»Π°Π³ΠΈΠ½ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ, ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΊΠ°ΠΊΠΎΠ³ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ develop Π·Π°ΠΏΡΡΠΊΠ°Π»ΠΈΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ. ΠΡΠ»ΠΈ ΠΏΠΎΡΠ»Π΅ Π±ΠΈΠ»Π΄ΠΎΠ² develop ΡΡΠΏΠ΅Π» ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡΡΡ, ΠΏΠ»Π°Π³ΠΈΠ½ Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ Π²Π»ΠΈΡΡ ΡΠ°ΠΊΠΎΠΉ pull request Π² ΠΎΡΠ½ΠΎΠ²Π½ΡΡ Π²Π΅ΡΠΊΡ. ΠΠ½ ΠΏΡΠΎΡΡΠΎ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΡΠΈΡ Π±ΠΈΠ»Π΄Ρ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠ²Π΅ΠΆΠ΅Π³ΠΎ develop.
Π Π½Π°ΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Ρ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΡΡΡΠΈΠΌΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡΠΌΠΈ ΡΠ°ΠΊΠΈΠ΅ Π±ΠΈΠ»Π΄Ρ Π½Π΅ ΠΏΡΠΎΠΉΠ΄ΡΡ ΠΈΠ·-Π·Π° ΠΎΡΠΈΠ±ΠΊΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ. Π‘ΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΡ ΡΠΈΡΠΈ B ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΠΏΠΎΠΏΡΠ°Π²ΠΈΡΡ ΠΊΠΎΠ΄, ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ, ΡΠΎΠ³Π΄Π° ΠΏΠ»Π°Π³ΠΈΠ½ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡ pull request.
ΠΠΎ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΡ ΡΡΠΎΠ³ΠΎ ΠΏΠ»Π°Π³ΠΈΠ½Π° Ρ Π½Π°Ρ Π² ΡΡΠ΅Π΄Π½Π΅ΠΌ Π±ΡΠ»ΠΎ 2,7 Π·Π°ΠΏΡΡΠΊΠ° ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π½Π° ΠΎΠ΄ΠΈΠ½ pull request. Π‘Β ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠΌ ΡΡΠ°Π»ΠΎ 3,6 Π·Π°ΠΏΡΡΠΊΠ°. ΠΠ°Ρ ΡΡΠΎ ΡΡΡΡΠΎΠΈΠ»ΠΎ.
Π‘ΡΠΎΠΈΡ ΠΎΡΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ Ρ ΡΡΠΎΠ³ΠΎ ΠΏΠ»Π°Π³ΠΈΠ½Π° Π΅ΡΡΡ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΠΊ: ΠΎΠ½ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ Π±ΠΈΠ»Π΄ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π·. Π’ΠΎ Π΅ΡΡΡ Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ ΠΎΡΡΠ°Π΅ΡΡΡ ΠΌΠ°Π»Π΅Π½ΡΠΊΠΎΠ΅ ΠΎΠΊΠΎΡΠΊΠΎ, ΡΠ΅ΡΠ΅Π· ΠΊΠΎΡΠΎΡΠΎΠ΅ Π² develop ΠΌΠΎΠ³ΡΡ ΠΏΠΎΠΏΠ°ΡΡΡ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΡΡΡΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ. ΠΠΎ Π²Π΅ΡΠΎΡΡΠ½ΠΎΡΡΡ ΡΡΠΎΠ³ΠΎ Π½Π΅Π²ΡΡΠΎΠΊΠ°, ΠΈ ΠΌΡ ΠΏΠΎΡΠ»ΠΈ Π½Π° ΡΡΠΎΡ ΠΊΠΎΠΌΠΏΡΠΎΠΌΠΈΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎΠΌ Π·Π°ΠΏΡΡΠΊΠΎΠ² ΠΈ Π²Π΅ΡΠΎΡΡΠ½ΠΎΡΡΡΡ ΠΏΠΎΠ»ΠΎΠΌΠΊΠΈ. ΠΠ° Π΄Π²Π° Π³ΠΎΠ΄Π° Π²ΡΡΡΡΠ΅Π»ΠΈΠ»ΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π·, ΠΏΠΎΡΡΠΎΠΌΡ, Π½Π°Π²Π΅ΡΠ½ΠΎΠ΅, Π½Π΅ Π·ΡΡ.
ΠΠ° Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ²ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ ΠΏΠ»Π°Π³ΠΈΠ½Π° Π΄Π»Ρ Bitbucket Ρ Π½Π°Ρ ΡΡΠ»ΠΎ Π΄Π²Π΅ Π½Π΅Π΄Π΅Π»ΠΈ.
ΠΠΎΠ²ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ
Π’Π΅ΠΌ Π²ΡΠ΅ΠΌΠ΅Π½Π΅ΠΌ, Π½Π°ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π»Π° ΡΠ°ΡΡΠΈ. ΠΠΎΠ±Π°Π²Π»ΡΠ»ΠΈΡΡ Π½ΠΎΠ²ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ.
ΠΡ ΠΏΠΎΠ΄ΡΠΌΠ°Π»ΠΈ: Π·Π°ΡΠ΅ΠΌ ΡΠΈΠ½ΠΈΡΡ ΠΎΡΠΈΠ±ΠΊΠΈ, Π΅ΡΠ»ΠΈ ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠ°ΡΡ? Π ΠΏΠΎΡΡΠΎΠΌΡ Π²Π½Π΅Π΄ΡΠΈΠ»ΠΈ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π°Π½Π°Π»ΠΈΠ· ΠΊΠΎΠ΄Π°. ΠΠ°ΡΠ°Π»ΠΈ Ρ lint, ΠΊΠΎΡΠΎΡΡΠΉ Π²Ρ ΠΎΠ΄ΠΈΡ Π² Android SDK. ΠΠΎ ΠΎΠ½ Π² ΡΠΎ Π²ΡΠ΅ΠΌΡ ΡΠΎΠ²ΡΠ΅ΠΌ Π½Π΅ ΡΠΌΠ΅Π» ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ Kotlin-ΠΊΠΎΠ΄ΠΎΠΌ, Π° Ρ Π½Π°Ρ ΡΠΆΠ΅ 75% ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π±ΡΠ»ΠΎ Π½Π°ΠΏΠΈΡΠ°Π½ΠΎ Π½Π° Kotlin. ΠΠΎΡΡΠΎΠΌΡ ΠΊ lint Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈΡΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ Android Studio checks.
ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΠΏΡΠΈΡΠ»ΠΎΡΡ ΡΠΈΠ»ΡΠ½ΠΎ ΠΈΠ·Π²ΡΠ°ΡΠΈΡΡΡΡ: Π²Π·ΡΡΡ Android Studio, Π·Π°ΠΏΠ°ΠΊΠΎΠ²Π°ΡΡ Π΅Π΅ Π² Docker ΠΈ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ Π½Π° CI Ρ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΠΌ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΎΠΌ, ΡΡΠΎΠ±Ρ ΠΎΠ½Π° Π΄ΡΠΌΠ°Π»Π°, ΡΡΠΎ Π·Π°ΠΏΡΡΠ΅Π½Π° Π½Π° ΡΠ΅Π°Π»ΡΠ½ΠΎΠΌ Π½ΠΎΡΡΠ±ΡΠΊΠ΅. ΠΠΎ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π»ΠΎ.
Π’Π°ΠΊΠΆΠ΅ Π² ΡΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΌΡ Π½Π°ΡΠ°Π»ΠΈ ΠΏΠΈΡΠ°ΡΡ ΠΌΠ½ΠΎΠ³ΠΎ instrumentation ΡΠ΅ΡΡΠΎΠ² ΠΈ Π²Π½Π΅Π΄ΡΠΈΠ»ΠΈ ΡΠΊΡΠΈΠ½ΡΠΎΡΠ½ΠΎΠ΅ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅. ΠΡΠΎ ΠΊΠΎΠ³Π΄Π° Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΡΡΡ ΡΡΠ°Π»ΠΎΠ½Π½ΡΠΉ ΡΠΊΡΠΈΠ½ΡΠΎΡ Π΄Π»Ρ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΉ ΠΌΠ°Π»Π΅Π½ΡΠΊΠΎΠΉ Π²ΡΡΡΠΊΠΈ, Π° ΡΠ΅ΡΡ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Ρ Π²ΡΡΡΠΊΠΈ ΡΠ½ΠΈΠΌΠ°Π΅ΡΡΡ ΡΠΊΡΠΈΠ½ΡΠΎΡ ΠΈ ΡΡΠ°Π²Π½ΠΈΠ²Π°Π΅ΡΡΡ Ρ ΡΡΠ°Π»ΠΎΠ½ΠΎΠΌ ΠΏΡΡΠΌΠΎ ΠΏΠΎΠΏΠΈΠΊΡΠ΅Π»ΡΠ½ΠΎ. ΠΡΠ»ΠΈ Π΅ΡΡΡ ΡΠ°ΡΡ ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅, Π·Π½Π°ΡΠΈΡ, Π³Π΄Π΅-ΡΠΎ ΠΏΠΎΠ΅Ρ Π°Π»Π° Π²Π΅ΡΡΡΠΊΠ° ΠΈΠ»ΠΈ ΡΡΠΎ-ΡΠΎ Π½Π΅ ΡΠ°ΠΊ Π² ΡΡΠΈΠ»ΡΡ .
ΠΠΎ instrumentation ΡΠ΅ΡΡΡ ΠΈ ΡΠΊΡΠΈΠ½ΡΠΎΡΠ½ΡΠ΅ ΡΠ΅ΡΡΡ Π½ΡΠΆΠ½ΠΎ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ Π½Π° ΡΡΡΡΠΎΠΉΡΡΠ²Π°Ρ : Π½Π° ΡΠΌΡΠ»ΡΡΠΎΡΠ°Ρ ΠΈΠ»ΠΈ Π½Π° ΡΠ΅Π°Π»ΡΠ½ΡΡ Π΄Π΅Π²Π°ΠΉΡΠ°Ρ . Π£ΡΠΈΡΡΠ²Π°Ρ, ΡΡΠΎ ΡΠ΅ΡΡΠΎΠ² ΠΌΠ½ΠΎΠ³ΠΎ ΠΈ ΠΎΠ½ΠΈ Π³ΠΎΠ½ΡΡΡΡΡ ΡΠ°ΡΡΠΎ, Π½ΡΠΆΠ½Π° ΡΠ΅Π»Π°Ρ ΡΠ΅ΡΠΌΠ°. ΠΠ°Π²ΠΎΠ΄ΠΈΡΡ ΡΠ²ΠΎΡ ΡΠ΅ΡΠΌΡ ΡΠ»ΠΈΡΠΊΠΎΠΌ ΡΡΡΠ΄ΠΎΠ·Π°ΡΡΠ°ΡΠ½ΠΎ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΌΡ Π½Π°ΡΠ»ΠΈ Π³ΠΎΡΠΎΠ²ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ β Firebase Test Lab.
Firebase Test Lab
ΠΡΠ» Π²ΡΠ±ΡΠ°Π½, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Firebase β ΠΏΡΠΎΠ΄ΡΠΊΡ Google, ΡΠΎ Π΅ΡΡΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ Π½Π°Π΄Π΅ΠΆΠ½ΡΠΌ ΠΈ Π²ΡΡΠ΄ Π»ΠΈ ΠΊΠΎΠ³Π΄Π°-Π½ΠΈΠ±ΡΠ΄Ρ ΡΠΌΡΠ΅Ρ. Π¦Π΅Π½Ρ Π΄Π΅ΠΌΠΎΠΊΡΠ°ΡΠΈΡΠ½ΡΠ΅: 5$ Π·Π° ΡΠ°Ρ ΡΠ°Π±ΠΎΡΡ ΡΠ΅Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΡΡΡΠΎΠΉΡΡΠ²Π°, 1$ Π·Π° ΡΠ°Ρ ΡΠ°Π±ΠΎΡΡ ΡΠΌΡΠ»ΡΡΠΎΡΠ°.
ΠΠ° Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΠ΅ Firebase Test Lab Π² Π½Π°Ρ CI ΡΡΠ»ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΡΠΈ Π½Π΅Π΄Π΅Π»ΠΈ.
ΠΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π»Π° ΡΠ°ΡΡΠΈ, ΠΈ Firebase Π½Π°Ρ, ΠΊ ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ, Π½Π°ΡΠ°Π» ΠΏΠΎΠ΄Π²ΠΎΠ΄ΠΈΡΡ. ΠΠ° ΡΠΎΡ ΠΌΠΎΠΌΠ΅Π½Ρ Ρ Π½Π΅Π³ΠΎ Π½Π΅ Π±ΡΠ»ΠΎ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ SLA. ΠΠ½ΠΎΠ³Π΄Π° Firebase Π·Π°ΡΡΠ°Π²Π»ΡΠ» ΠΆΠ΄Π°ΡΡ, ΠΏΠΎΠΊΠ° ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡΡΡ Π½ΡΠΆΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π΄Π΅Π²Π°ΠΉΡΠΎΠ² Π΄Π»Ρ ΡΠ΅ΡΡΠΎΠ², Π° Π½Π΅ Π½Π°ΡΠΈΠ½Π°Π» ΠΈΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΡΡΡ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΌΡ ΡΡΠΎΠ³ΠΎ Ρ ΠΎΡΠ΅Π»ΠΈ. ΠΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ Π² ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ Π·Π°Π½ΠΈΠΌΠ°Π»ΠΎ Π΄ΠΎ ΠΏΠΎΠ»ΡΡΠ°ΡΠ°, Π° ΡΡΠΎ ΠΎΡΠ΅Π½Ρ Π΄ΠΎΠ»Π³ΠΎ. Instrumentation ΡΠ΅ΡΡΡ Π³ΠΎΠ½ΡΠ»ΠΈΡΡ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ PR, Π·Π°Π΄Π΅ΡΠΆΠΊΠΈ ΠΎΡΠ΅Π½Ρ Π·Π°ΠΌΠ΅Π΄Π»ΡΠ»ΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΡ, Π° ΠΏΠΎΡΠΎΠΌ Π΅ΡΠ΅ ΠΏΡΠΈΡΠ΅Π» ΡΡΠ΅Ρ Π·Π° ΠΌΠ΅ΡΡΡ Ρ ΠΊΡΡΠ³Π»ΠΎΠΉ ΡΡΠΌΠΌΠΎΠΉ. Π ΠΎΠ±ΡΠ΅ΠΌ, ΡΠ΅ΡΠ΅Π½ΠΎ Π±ΡΠ»ΠΎ ΠΎΡΠΊΠ°Π·Π°ΡΡΡΡ ΠΎΡ Firebase ΠΈ ΠΏΠΈΠ»ΠΈΡΡ in-house, ΡΠ°Π· ΡΠΆ ΠΊΠΎΠΌΠ°Π½Π΄Π° Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π²ΡΡΠΎΡΠ»Π°.
Docker + Python + bash
ΠΠ·ΡΠ»ΠΈ docker, Π·Π°ΠΏΠΈΡ Π½ΡΠ»ΠΈ Π² Π½Π΅Π³ΠΎ ΡΠΌΡΠ»ΡΡΠΎΡΡ, Π½Π°ΠΏΠΈΡΠ°Π»ΠΈ ΠΏΡΠΎΡΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΊΡ Π½Π° Python, ΠΊΠΎΡΠΎΡΠ°Ρ Π² Π½ΡΠΆΠ½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΠΏΠΎΠ΄Π½ΠΈΠΌΠ°Π΅Ρ Π½ΡΠΆΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠΌΡΠ»ΡΡΠΎΡΠΎΠ² Π² Π½ΡΠΆΠ½ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ Π° ΠΊΠΎΠ³Π΄Π° Π½Π°Π΄ΠΎ ΠΈΡ ΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ. Π, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ, ΠΏΠ°ΡΡ bash-ΡΠΊΡΠΈΠΏΡΠΎΠ² β ΠΊΡΠ΄Π° ΠΆΠ΅ Π±Π΅Π· Π½ΠΈΡ ?
ΠΠ° ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠΉ ΡΠ΅ΡΡΠΎΠ²ΠΎΠΉ ΡΡΠ΅Π΄Ρ ΡΡΠ»ΠΎ ΠΏΡΡΡ Π½Π΅Π΄Π΅Π»Ρ.
Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π½Π° ΠΊΠ°ΠΆΠ΄ΡΠΉ pull request ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΠ»ΡΡ ΠΎΠ±ΡΠΈΡΠ½ΡΠΉ, Π±Π»ΠΎΠΊΠΈΡΡΡΡΠΈΠΉ ΡΠ»ΠΈΡΠ½ΠΈΠ΅, ΡΠΏΠΈΡΠΎΠΊ ΠΏΡΠΎΠ²Π΅ΡΠΎΠΊ:
- Π‘Π±ΠΎΡΠΊΠ° ΠΠ Π;
- Junit-ΡΠ΅ΡΡΡ;
- Lint;
- Android Studio checks;
- Instrumentation ΡΠ΅ΡΡΡ;
- Screenshot ΡΠ΅ΡΡΡ.
ΠΡΠΎ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠ°Π»ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ ΠΏΠΎΠ»ΠΎΠΌΠΎΠΊ. Π’Π΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈ Π²ΡΠ΅ ΡΠ°Π±ΠΎΡΠ°Π»ΠΎ, Π½ΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΠΆΠ°Π»ΠΎΠ²Π°Π»ΠΈΡΡ, ΡΡΠΎ ΠΆΠ΄Π°ΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² ΡΠ»ΠΈΡΠΊΠΎΠΌ Π΄ΠΎΠ»Π³ΠΎ.
Π‘Π»ΠΈΡΠΊΠΎΠΌ Π΄ΠΎΠ»Π³ΠΎ β ΡΡΠΎ ΡΠΊΠΎΠ»ΡΠΊΠΎ? ΠΡ Π²ΡΠ³ΡΡΠ·ΠΈΠ»ΠΈ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ· Bitbucket ΠΈ TeamCity Π² ΡΠΈΡΡΠ΅ΠΌΡ Π°Π½Π°Π»ΠΈΠ·Π° ΠΈ ΠΏΠΎΠ½ΡΠ»ΠΈ, ΡΡΠΎ ΡΡΠ΅Π΄Π½Π΅Π΅ Π²ΡΠ΅ΠΌΡ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ 45 ΠΌΠΈΠ½ΡΡ. Π’ΠΎ Π΅ΡΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ, ΠΎΡΠΊΡΡΠ²Π°Ρ pull request Π² ΡΡΠ΅Π΄Π½Π΅ΠΌ ΠΆΠ΄Π΅Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ Π±ΠΈΠ»Π΄ΠΎΠ² 45 ΠΌΠΈΠ½ΡΡ. ΠΠ° ΠΌΠΎΠΉ Π²Π·Π³Π»ΡΠ΄, ΡΡΠΎ ΠΎΡΠ΅Π½Ρ ΠΌΠ½ΠΎΠ³ΠΎ, ΠΈ ΡΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π½Π΅Π»ΡΠ·Ρ.
ΠΠΎΠ½Π΅ΡΠ½ΠΎ, ΠΌΡ ΡΠ΅ΡΠΈΠ»ΠΈ ΡΡΠΊΠΎΡΠΈΡΡ Π²ΡΠ΅ Π½Π°ΡΠΈ Π±ΠΈΠ»Π΄Ρ.
Π£ΡΠΊΠΎΡΡΠ΅ΠΌΡΡ
Π£Π²ΠΈΠ΄Π΅Π², ΡΡΠΎ ΡΠ°ΡΡΠΎ Π±ΠΈΠ»Π΄Ρ ΡΡΠΎΡΡ Π² ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ, ΠΌΡ ΠΏΠ΅ΡΠ²ΡΠΌ Π΄Π΅Π»ΠΎΠΌ Π΄ΠΎΠΊΡΠΏΠΈΠ»ΠΈ ΠΆΠ΅Π»Π΅Π·Π° β ΡΠΊΡΡΠ΅Π½ΡΠΈΠ²Π½ΠΎΠ΅ ΡΠ°Π·Π²ΠΈΡΠΈΠ΅ ΡΠ°ΠΌΠΎΠ΅ ΠΏΡΠΎΡΡΠΎΠ΅. ΠΠΈΠ»Π΄Ρ ΠΏΠ΅ΡΠ΅ΡΡΠ°Π»ΠΈ ΡΡΠΎΡΡΡ Π² ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ, Π½ΠΎ Π²ΡΠ΅ΠΌΡ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ ΡΠ½ΠΈΠ·ΠΈΠ»ΠΎΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΡΡ-ΡΡΡΡ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠ°ΠΌΠΈ ΠΏΠΎ ΡΠ΅Π±Π΅ Π³ΠΎΠ½ΡΠ»ΠΈΡΡ ΠΎΡΠ΅Π½Ρ Π΄ΠΎΠ»Π³ΠΎ.
Π£Π±ΠΈΡΠ°Π΅ΠΌ ΡΠ»ΠΈΡΠΊΠΎΠΌ Π΄ΠΎΠ»Π³ΠΈΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ
ΠΠ°Ρ Continuous Integration ΠΌΠΎΠ³ ΠΎΡΠ»ΠΎΠ²ΠΈΡΡ ΡΠ°ΠΊΠΈΠ΅ ΡΠΈΠΏΡ ΠΎΡΠΈΠ±ΠΎΠΊ ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌ.
- ΠΠ΅ ΡΠΎΠ±ΠΈΡΠ°Π΅ΡΡΡ. CI ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠΉΠΌΠ°ΡΡ ΠΎΡΠΈΠ±ΠΊΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ, ΠΊΠΎΠ³Π΄Π° ΠΈΠ·-Π·Π° ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΡΡΡΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΡΡΠΎ-ΡΠΎ Π½Π΅ ΡΠΎΠ±ΠΈΡΠ°Π΅ΡΡΡ. ΠΠ°ΠΊ Ρ ΡΠΆΠ΅ Π³ΠΎΠ²ΠΎΡΠΈΠ», ΡΠΎΠ³Π΄Π° Π½ΠΈΠΊΡΠΎ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ±ΡΠ°ΡΡ, ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° Π²ΡΡΠ°Π΅Ρ, ΠΈ Π²ΡΠ΅ Π½Π΅ΡΠ²Π½ΠΈΡΠ°ΡΡ.
- ΠΠ°Π³ Π² ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠΎΠ³Π΄Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠΎΠ±ΠΈΡΠ°Π΅ΡΡΡ, Π½ΠΎ ΠΏΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡ ΠΏΠ°Π΄Π°Π΅Ρ, ΠΈΠ»ΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ° Π²ΠΎΠΎΠ±ΡΠ΅ Π½Π΅ Π½Π°ΠΆΠΈΠΌΠ°Π΅ΡΡΡ. ΠΡΠΎ ΠΏΠ»ΠΎΡ ΠΎ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΠ°ΠΊΠΎΠΉ Π±Π°Π³ ΠΌΠΎΠΆΠ΅Ρ Π΄ΠΎΠ±ΡΠ°ΡΡΡΡ Π΄ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ.
- ΠΠ°Π³ Π² Π²Π΅ΡΡΡΠΊΠ΅. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠ½ΠΎΠΏΠΊΠ° Π½Π°ΠΆΠΈΠΌΠ°Π΅ΡΡΡ, Π½ΠΎ ΡΡΠ΅Ρ Π°Π»Π° Π½Π° 10 ΠΏΠΈΠΊΡΠ΅Π»Π΅ΠΉ Π²Π»Π΅Π²ΠΎ.
- Π£Π²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠ΅ ΡΠ΅Ρ Π΄ΠΎΠ»Π³Π°.
ΠΠΎΡΠΌΠΎΡΡΠ΅Π² Π½Π° ΡΡΠΎΡ ΡΠΏΠΈΡΠΎΠΊ, ΠΌΡ ΠΏΠΎΠ½ΡΠ»ΠΈ, ΡΡΠΎ ΠΊΡΠΈΡΠΈΡΠ½ΡΠΌΠΈ ΡΠ²Π»ΡΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠ΅ΡΠ²ΡΠ΅ Π΄Π²Π° ΠΏΡΠ½ΠΊΡΠ°. Π’Π°ΠΊΠΈΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΌΡ Ρ ΠΎΡΠΈΠΌ ΠΎΡΠ»Π°Π²Π»ΠΈΠ²Π°ΡΡ Π² ΠΏΠ΅ΡΠ²ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ. ΠΠ°Π³ΠΈ Π² Π²Π΅ΡΡΡΠΊΠ΅ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠ²Π°ΡΡΡΡ Π½Π° ΡΡΠ°ΠΏΠ΅ design-review ΠΈ ΡΠΎΠ³Π΄Π° ΠΆΠ΅ Π»Π΅Π³ΠΊΠΎ ΠΈΡΠΏΡΠ°Π²Π»ΡΡΡΡΡ. Π Π°Π±ΠΎΡΠ° Ρ ΡΠ΅Ρ Π΄ΠΎΠ»Π³ΠΎΠΌ ΡΡΠ΅Π±ΡΠ΅Ρ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΠΈ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΌΡ ΡΠ΅ΡΠΈΠ»ΠΈ Π½Π΅ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ Π΅Π³ΠΎ Π½Π° pull request.
ΠΡΡ ΠΎΠ΄Ρ ΠΈΠ· ΡΡΠΎΠΉ ΠΊΠ»Π°ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ, ΠΌΡ ΠΏΠ΅ΡΠ΅ΡΡΡΡ Π½ΡΠ»ΠΈ Π²Π΅ΡΡ ΡΠΏΠΈΡΠΎΠΊ ΠΏΡΠΎΠ²Π΅ΡΠΎΠΊ. ΠΡΡΠ΅ΡΠΊΠ½ΡΠ»ΠΈ Lint ΠΈ ΠΏΠ΅ΡΠ΅Π½Π΅ΡΠ»ΠΈ Π΅Π³ΠΎ Π·Π°ΠΏΡΡΠΊ Π½Π° Π½ΠΎΡΡ: ΠΏΡΠΎΡΡΠΎ ΡΡΠΎΠ±Ρ ΠΎΠ½ Π²ΡΠ΄Π°Π²Π°Π» ΠΎΡΡΠ΅Ρ, ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Π² ΠΏΡΠΎΠ΅ΠΊΡΠ΅. Π‘ ΡΠ΅Ρ Π΄ΠΎΠ»Π³ΠΎΠΌ ΠΌΡ ΡΡΠ»ΠΎΠ²ΠΈΠ»ΠΈΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ, Π° ΠΎΡ Android Studio checks ΠΎΡΠΊΠ°Π·Π°Π»ΠΈΡΡ ΡΠΎΠ²ΡΠ΅ΠΌ. Android Studio Π² Docker Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° ΠΈΠ½ΡΠΏΠ΅ΠΊΡΠΈΠΉ Π·Π²ΡΡΠΈΡ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ, Π½ΠΎ Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΌΠ½ΠΎΠ³ΠΎ Π½Π΅ΠΏΡΠΈΡΡΠ½ΠΎΡΡΠ΅ΠΉ Π² ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ΅. ΠΡΠ±ΠΎΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π²Π΅ΡΡΠΈΠΉ Android Studio β ΡΡΠΎ Π±ΠΎΡΡΠ±Π° Ρ Π½Π΅ΠΏΠΎΠ½ΡΡΠ½ΡΠΌΠΈ Π±Π°Π³Π°ΠΌΠΈ. Π’Π°ΠΊ ΠΆΠ΅ ΡΠ»ΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΡΠΊΡΠΈΠ½ΡΠΎΡΠ½ΡΠ΅ ΡΠ΅ΡΡΡ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΡΠ°Π±ΠΎΡΠ°Π»Π° Π½Π΅ ΠΎΡΠ΅Π½Ρ ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΠΎ, Π±ΡΠ²Π°Π»ΠΈ Π»ΠΎΠΆΠ½ΡΠ΅ ΡΡΠ°Π±Π°ΡΡΠ²Π°Π½ΠΈΡ. Π‘ΠΊΡΠΈΠ½ΡΠΎΡΠ½ΡΠ΅ ΡΠ΅ΡΡΡ ΡΠ±ΡΠ°Π»ΠΈ ΠΈΠ· ΡΠΏΠΈΡΠΊΠ° ΠΏΡΠΎΠ²Π΅ΡΠΎΠΊ.
Π ΠΈΡΠΎΠ³Π΅ Ρ Π½Π°Ρ ΠΎΡΡΠ°Π»ΠΈΡΡ:
- Π‘Π±ΠΎΡΠΊΠ° ΠΠ Π;
- Junit-ΡΠ΅ΡΡΡ;
- Instrumentation tests.
Gradle remote cache
ΠΠ΅Π· ΡΡΠΆΡΠ»ΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΎΠΊ Π²ΡΡ ΡΡΠ°Π»ΠΎ Π»ΡΡΡΠ΅. ΠΠΎ Π½Π΅Ρ ΠΏΡΠ΅Π΄Π΅Π»Π° ΡΠΎΠ²Π΅ΡΡΠ΅Π½ΡΡΠ²Ρ!
ΠΠ°ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠΆΠ΅ Π±ΡΠ»ΠΎ ΡΠ°Π·Π±ΠΈΡΠΎ Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ 150 gradle ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ. ΠΠ±ΡΡΠ½ΠΎ Π² ΡΠ°ΠΊΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Ρ ΠΎΡΠΎΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Gradle remote cache, ΠΈ ΠΌΡ ΡΠ΅ΡΠΈΠ»ΠΈ Π΅Π³ΠΎ ΠΏΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°ΡΡ.
Gradle remote cache β ΡΡΠΎ ΡΠ΅ΡΠ²ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ΅Ρ ΠΊΡΡΠΈΡΠΎΠ²Π°ΡΡ Π°ΡΡΠ΅ΡΠ°ΠΊΡΡ ΡΠ±ΠΎΡΠΊΠΈ Π΄Π»Ρ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ Π·Π°Π΄Π°Ρ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΠΌΠΎΠ΄ΡΠ»ΡΡ . Gradle, Π²ΠΌΠ΅ΡΡΠΎ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ ΡΠ΅Π°Π»ΡΠ½ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄, ΠΏΠΎ HTTP ΡΡΡΡΠΈΡΡΡ Π² remote cache ΠΈ ΡΠΏΡΠ°ΡΠΈΠ²Π°Π΅Ρ, Π²ΡΠΏΠΎΠ»Π½ΡΠ» Π»ΠΈ ΠΊΡΠΎ-ΡΠΎ ΡΠΆΠ΅ ΡΡΡ ΡΠ°ΡΠΊΡ. ΠΡΠ»ΠΈ Π΄Π°, ΠΏΡΠΎΡΡΠΎ ΡΠΊΠ°ΡΠΈΠ²Π°Π΅Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ.
ΠΠ°ΠΏΡΡΡΠΈΡΡ Gradle remote cache Π»Π΅Π³ΠΊΠΎ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Gradle ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Docker-ΠΎΠ±ΡΠ°Π·. ΠΠ°ΠΌ ΡΠ΄Π°Π»ΠΎΡΡ ΡΡΠΎ ΡΠ΄Π΅Π»Π°ΡΡ Π·Π° ΡΡΠΈ ΡΠ°ΡΠ°.
ΠΡΠ΅Π³ΠΎ-ΡΠΎ Π½Π°Π΄ΠΎ Π±ΡΠ»ΠΎ Π·Π°ΠΏΡΡΡΠΈΡΡ Docker ΠΈ ΠΏΡΠΎΠΏΠΈΡΠ°ΡΡ ΠΎΠ΄Π½Ρ ΡΡΡΠΎΡΠΊΡ Π² ΠΏΡΠΎΠ΅ΠΊΡΠ΅. ΠΠΎ Ρ ΠΎΡΡ Π·Π°ΠΏΡΡΡΠΈΡΡ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΡΡΡΠΎ, ΡΡΠΎΠ±Ρ Π²ΡΠ΅ ΡΠ°Π±ΠΎΡΠ°Π»ΠΎ Ρ ΠΎΡΠΎΡΠΎ, ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ.
ΠΠΈΠΆΠ΅ Π³ΡΠ°ΡΠΈΠΊ cache misses.
Π ΡΠ°ΠΌΠΎΠΌ Π½Π°ΡΠ°Π»Π΅ ΠΏΡΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΠΌΠ°Ρ
ΠΎΠ² ΠΌΠΈΠΌΠΎ ΠΊΠ΅ΡΠ° Π±ΡΠ» ΠΎΠΊΠΎΠ»ΠΎ 65. Π§Π΅ΡΠ΅Π· ΡΡΠΈ Π½Π΅Π΄Π΅Π»ΠΈ ΡΠ΄Π°Π»ΠΎΡΡ Π΄ΠΎΠ²Π΅ΡΡΠΈ ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π΄ΠΎ 20%. ΠΠΊΠ°Π·Π°Π»ΠΎΡΡ, ΡΡΠΎ ΡΠ°ΡΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΎΠ±ΠΈΡΠ°Π΅Ρ Android ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΈΠΌΠ΅ΡΡ ΡΡΡΠ°Π½Π½ΡΠ΅ ΡΡΠ°Π½Π·ΠΈΡΠΈΠ²Π½ΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ, ΠΈΠ·-Π·Π° ΠΊΠΎΡΠΎΡΡΡ
Gradle ΠΏΡΠΎΠΌΠ°Ρ
ΠΈΠ²Π°Π»ΡΡ ΠΌΠΈΠΌΠΎ ΠΊΡΡΠ°.
ΠΠΎΠ΄ΠΊΠ»ΡΡΠΈΠ² ΠΊΡΡ, ΠΌΡ ΡΠΈΠ»ΡΠ½ΠΎ ΡΡΠΊΠΎΡΠΈΠ»ΠΈ ΡΠ±ΠΎΡΠΊΡ. ΠΠΎ ΠΊΡΠΎΠΌΠ΅ ΡΠ±ΠΎΡΠΊΠΈ Π΅ΡΠ΅ Π³ΠΎΠ½ΡΡΡΡΡ instrumentation ΡΠ΅ΡΡΡ, Π° Π³ΠΎΠ½ΡΡΡΡΡ ΠΎΠ½ΠΈ Π΄ΠΎΠ»Π³ΠΎ. ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½Π΅ Π²ΡΠ΅ ΡΠ΅ΡΡΡ Π½Π°Π΄ΠΎ Π³ΠΎΠ½ΡΡΡ Π½Π° ΠΊΠ°ΠΆΠ΄ΡΠΉ pull request. Π§ΡΠΎΠ±Ρ ΡΡΠΎ Π²ΡΡΡΠ½ΠΈΡΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΈΠΌΠΏΠ°ΠΊΡ Π°Π½Π°Π»ΠΈΠ·.
ΠΠΌΠΏΠ°ΠΊΡ Π°Π½Π°Π»ΠΈΠ·
ΠΠ° pull request ΠΌΡ ΡΠΎΠ±ΠΈΡΠ°Π΅ΠΌ git diff ΠΈ Π½Π°Ρ ΠΎΠ΄ΠΈΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½ΡΠ΅ Gradle ΠΌΠΎΠ΄ΡΠ»ΠΈ.
ΠΠΌΠ΅Π΅Ρ ΡΠΌΡΡΠ» Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ instrumentation ΡΠ΅ΡΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½ΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ ΠΈ Π²ΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΡ Π½ΠΈΡ
Π·Π°Π²ΠΈΡΡΡ. Π’Π΅ΡΡΡ Π΄Π»Ρ ΡΠΎΡΠ΅Π΄Π½ΠΈΡ
ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΡΠΌΡΡΠ»Π° Π½Π΅Ρ: ΡΠ°ΠΌ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΡΡ ΠΊΠΎΠ΄, ΠΈ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΡΠ»ΠΎΠΌΠ°ΡΡΡΡ.
Π‘ instrumentation ΡΠ΅ΡΡΠ°ΠΌΠΈ Π½Π΅ Π²ΡΡ ΡΠ°ΠΊ ΠΏΡΠΎΡΡΠΎ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΎΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡΡ Π² ΡΠ°ΠΌΠΎΠΌ Π²Π΅ΡΡ Π½Π΅ΡΡΠΎΠ²Π½Π΅Π²ΠΎΠΌ ΠΌΠΎΠ΄ΡΠ»Π΅ Application. ΠΡ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠ»ΠΈ ΡΠ²ΡΠΈΡΡΠΈΠΊΡ Ρ Π°Π½Π°Π»ΠΈΠ·ΠΎΠΌ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄Π°, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ½ΡΡΡ, ΠΊ ΠΊΠ°ΠΊΠΎΠΌΡ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ΅ΡΡ.
ΠΠΎΠ΄Π΅ΡΠ½ΠΈΠ·Π°ΡΠΈΡ ΡΠ°Π±ΠΎΡΡ instrumentation ΡΠ΅ΡΡΠΎΠ², ΡΡΠΎΠ±Ρ ΠΎΠ½ΠΈ ΠΏΡΠΎΠ²Π΅ΡΡΠ»ΠΈ ΡΠΎΠ»ΡΠΊΠΎ Π·Π°Π΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ, Π·Π°Π½ΡΠ»Π° ΠΎΠΊΠΎΠ»ΠΎ Π²ΠΎΡΡΠΌΠΈ Π½Π΅Π΄Π΅Π»Ρ.
ΠΠ΅ΡΡ ΠΏΠΎ ΡΡΠΊΠΎΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠ²Π΅ΡΠΎΠΊ ΡΡΠΏΠ΅ΡΠ½ΠΎ ΡΡΠ°Π±ΠΎΡΠ°Π»ΠΈ. Π‘ 45 ΠΌΠΈΠ½ΡΡ ΠΌΡ Π΄ΠΎΡΠ»ΠΈ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ Π΄ΠΎ 15. Π§Π΅ΡΠ²Π΅ΡΡΡ ΡΠ°ΡΠ° ΠΆΠ΄Π°ΡΡ Π±ΠΈΠ»Π΄ ΡΠΆΠ΅ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ.
ΠΠΎ ΡΠ΅ΠΏΠ΅ΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ Π½Π°ΡΠ°Π»ΠΈ ΠΆΠ°Π»ΠΎΠ²Π°ΡΡΡΡ, ΡΡΠΎ ΠΈΠΌ Π½Π΅ΠΏΠΎΠ½ΡΡΠ½ΠΎ, ΠΊΠ°ΠΊΠΈΠ΅ Π±ΠΈΠ»Π΄Ρ Π·Π°ΠΏΡΡΠΊΠ°ΡΡΡΡ, Π³Π΄Π΅ Π»ΠΎΠ³ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ, ΠΏΠΎΡΠ΅ΠΌΡ Π±ΠΈΠ»Π΄ ΠΊΡΠ°ΡΠ½ΡΠΉ, ΠΊΠ°ΠΊΠΎΠΉ ΡΠ΅ΡΡ ΡΠΏΠ°Π» ΠΈ Ρ.Π΄.
ΠΡΠΎΠ±Π»Π΅ΠΌΡ Ρ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΉ ΡΠ²ΡΠ·ΡΡ Π·Π°ΠΌΠ΅Π΄Π»ΡΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΡ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΌΡ ΠΏΠΎΡΡΠ°ΡΠ°Π»ΠΈΡΡ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ ΠΏΠΎΠ½ΡΡΠ½ΡΡ ΠΈ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ PR ΠΈ Π±ΠΈΠ»Π΄Π΅. ΠΠ°ΡΠ°Π»ΠΈ Ρ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠ΅Π² Π² Bitbucket ΠΊ PR Ρ ΡΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ, ΠΊΠ°ΠΊΠΎΠΉ Π±ΠΈΠ»Π΄ ΡΠΏΠ°Π» ΠΈ ΠΏΠΎΡΠ΅ΠΌΡ, ΠΏΠΈΡΠ°Π»ΠΈ Π°Π΄ΡΠ΅ΡΠ½ΡΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Π² Slack. Π ΠΊΠΎΠ½ΡΠ΅ ΠΊΠΎΠ½ΡΠΎΠ² ΡΠ΄Π΅Π»Π°Π»ΠΈ Π΄Π»Ρ ΡΡΡΠ°Π½ΠΈΡΡ PR dashboard ΡΠΎ ΡΠΏΠΈΡΠΊΠΎΠΌ Π²ΡΠ΅Ρ
Π±ΠΈΠ»Π΄ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ΅ΠΉΡΠ°Ρ Π·Π°ΠΏΡΡΠΊΠ°ΡΡΡΡ ΠΈ ΠΈΡ
ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ΠΌ: Π² ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ, Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ, ΡΠΏΠ°Π» ΠΈΠ»ΠΈ Π·Π°Π²Π΅ΡΡΠΈΠ»ΡΡ. ΠΠΎΠΆΠ½ΠΎ ΠΊΠ»ΠΈΠΊΠ½ΡΡΡ Π½Π° Π±ΠΈΠ»Π΄ ΠΈ ΠΏΠΎΠΏΠ°ΡΡΡ Π½Π° Π΅Π³ΠΎ Π»ΠΎΠ³.
ΠΠ° ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΡΡ ΠΎΠ±ΡΠ°ΡΠ½ΡΡ ΡΠ²ΡΠ·Ρ Π±ΡΠ»ΠΎ Π·Π°ΡΡΠ°ΡΠ΅Π½ΠΎ ΡΠ΅ΡΡΡ Π½Π΅Π΄Π΅Π»Ρ.
ΠΠ»Π°Π½Ρ
ΠΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΠΌ ΠΊ Π½ΠΎΠ²Π΅ΠΉΡΠ΅ΠΉ ΠΈΡΡΠΎΡΠΈΠΈ. Π Π΅ΡΠΈΠ² Π²ΠΎΠΏΡΠΎΡ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΉ ΡΠ²ΡΠ·ΠΈ, ΠΌΡ Π²ΡΡΠ»ΠΈ Π½Π° Π½ΠΎΠ²ΡΠΉ ΡΡΠΎΠ²Π΅Π½Ρ β ΡΠ΅ΡΠΈΠ»ΠΈ ΠΏΠΎΡΡΡΠΎΠΈΡΡ ΡΠ²ΠΎΡ ΡΠ΅ΡΠΌΡ ΡΠΌΡΠ»ΡΡΠΎΡΠΎΠ². ΠΠΎΠ³Π΄Π° ΡΠ΅ΡΡΠΎΠ² ΠΈ ΡΠΌΡΠ»ΡΡΠΎΡΠΎΠ² ΠΌΠ½ΠΎΠ³ΠΎ, ΠΈΠΌΠΈ ΡΠ»ΠΎΠΆΠ½ΠΎ ΡΠΏΡΠ°Π²Π»ΡΡΡ. Π ΠΈΡΠΎΠ³Π΅ Π²ΡΠ΅ Π½Π°ΡΠΈ ΡΠΌΡΠ»ΡΡΠΎΡΡ ΠΏΠ΅ΡΠ΅Π΅Ρ Π°Π»ΠΈ Π² k8s-ΠΊΠ»Π°ΡΡΠ΅Ρ Ρ Π³ΠΈΠ±ΠΊΠΈΠΌ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΡΠ΅ΡΡΡΡΠΎΠ².
ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Π΅ΡΡΡ ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΠ»Π°Π½Ρ.
- ΠΠ΅ΡΠ½ΡΡΡ Lint (ΠΈ Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π°Π½Π°Π»ΠΈΠ·). ΠΡ ΡΠΆΠ΅ ΡΠ°Π±ΠΎΡΠ°Π΅ΠΌ Π² ΡΡΠΎΠΌ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠΈ.
- ΠΠ°ΠΏΡΡΠΊΠ°ΡΡ Π½Π° PR Π±Π»ΠΎΠΊΠ΅ΡΠΎΠΌ Π²ΡΠ΅ end-to-end ΡΠ΅ΡΡΡ Π½Π° Π²ΡΠ΅Ρ Π²Π΅ΡΡΠΈΡΡ SDK.
ΠΡΠ°ΠΊ, ΠΌΡ ΠΏΡΠΎΡΠ»Π΅Π΄ΠΈΠ»ΠΈ ΠΈΡΡΠΎΡΠΈΡ ΡΠ°Π·Π²ΠΈΡΠΈΡ Continuous Integration Π² ΠΠ²ΠΈΡΠΎ. Π’Π΅ΠΏΠ΅ΡΡ Ρ ΠΎΡΡ Π΄Π°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΎΠ²Π΅ΡΠΎΠ² Ρ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ Π±ΡΠ²Π°Π»ΠΎΠ³ΠΎ.
Π‘ΠΎΠ²Π΅ΡΡ
ΠΡΠ»ΠΈ Π±Ρ Ρ ΠΌΠΎΠ³ Π΄Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΡΠΎΠ²Π΅Ρ, ΡΡΠΎ Π±ΡΠ» Π±Ρ ΡΡΠΎΡ:
ΠΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°, Π±ΡΠ΄ΡΡΠ΅ ΠΎΡΡΠΎΡΠΎΠΆΠ½Π΅Π΅ Ρ shell-ΡΠΊΡΠΈΠΏΡΠ°ΠΌΠΈ!
Bash β ΠΎΡΠ΅Π½Ρ Π³ΠΈΠ±ΠΊΠΈΠΉ ΠΈ ΠΌΠΎΡΠ½ΡΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ, Π½Π° Π½Π΅ΠΌ ΠΎΡΠ΅Π½Ρ ΡΠ΄ΠΎΠ±Π½ΠΎ ΠΈ Π±ΡΡΡΡΠΎ ΠΏΠΈΡΠ°ΡΡ ΡΠΊΡΠΈΠΏΡΡ. ΠΠΎ Ρ Π½ΠΈΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΏΠ°ΡΡΡ Π² Π»ΠΎΠ²ΡΡΠΊΡ, ΠΈ ΠΌΡ, ΠΊ ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ, Π² Π½Π΅Π΅ ΠΏΠΎΠΏΠ°Π»ΠΈ.
ΠΠ°ΡΠΈΠ½Π°Π»ΠΎΡΡ Π²ΡΠ΅ Ρ ΠΏΡΠΎΡΡΡΡ ΡΠΊΡΠΈΠΏΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π·Π°ΠΏΡΡΠΊΠ°Π»ΠΈΡΡ Π½Π° Π½Π°ΡΠΈΡ Π±ΠΈΠ»Π΄-ΠΌΠ°ΡΠΈΠ½Π°Ρ :
#!/usr/bin/env bash
./gradlew assembleDebug
ΠΠΎ, ΠΊΠ°ΠΊ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ, Π²ΡΠ΅ ΡΠΎ Π²ΡΠ΅ΠΌΠ΅Π½Π΅ΠΌ ΡΠ°Π·Π²ΠΈΠ²Π°Π΅ΡΡΡ ΠΈ ΡΡΠ»ΠΎΠΆΠ½ΡΠ΅ΡΡΡ β Π΄Π°Π²Π°ΠΉΡΠ΅ Π·Π°ΠΏΡΡΡΠΈΠΌ ΠΎΠ΄ΠΈΠ½ ΡΠΊΡΠΈΠΏΡ ΠΈΠ· Π΄ΡΡΠ³ΠΎΠ³ΠΎ, Π΄Π°Π²Π°ΠΉΡΠ΅ ΠΏΠ΅ΡΠ΅Π΄Π°Π΄ΠΈΠΌ ΡΡΠ΄Π° ΠΊΠ°ΠΊΠΈΠ΅-ΡΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ β Π² ΠΈΡΠΎΠ³Π΅ ΠΏΡΠΈΡΠ»ΠΎΡΡ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ, Π½Π° ΠΊΠ°ΠΊΠΎΠΌ ΡΡΠΎΠ²Π½Π΅ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΡΡΠΈ bash ΠΌΡ ΡΠ΅ΠΉΡΠ°Ρ Π½Π°Ρ ΠΎΠ΄ΠΈΠΌΡΡ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ΄ΡΡΠ°Π²ΠΈΡΡ Π½ΡΠΆΠ½ΡΠ΅ ΠΊΠ°Π²ΡΡΠΊΠΈ, ΡΡΠΎΠ±Ρ ΡΡΠΎ Π²ΡΠ΅ Π·Π°ΠΏΡΡΡΠΈΠ»ΠΎΡΡ.
ΠΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΡΡ ΡΠ΅Π±Π΅ ΡΡΡΠ΄ΠΎΠ·Π°ΡΡΠ°ΡΡ Π½Π° ΡΠ°Π·Π²ΠΈΡΠΈΠ΅ ΡΠ°ΠΊΠΈΡ
ΡΠΊΡΠΈΠΏΡΠΎΠ². Π‘ΠΎΠ²Π΅ΡΡΡ Π½Π΅ ΠΏΠΎΠΏΠ°Π΄Π°ΡΡ Π² ΡΡΡ Π»ΠΎΠ²ΡΡΠΊΡ.
Π§Π΅ΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ?
- ΠΡΠ±ΡΠΌ ΡΠΊΡΠΈΠΏΡΠΎΠ²ΡΠΌ ΡΠ·ΡΠΊΠΎΠΌ. ΠΠΈΡΠ°ΡΡ Π½Π° Python ΠΈΠ»ΠΈ Kotlin Script ΡΠ΄ΠΎΠ±Π½Π΅Π΅, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅, Π° Π½Π΅ ΡΠΊΡΠΈΠΏΡΡ.
- ΠΠ»ΠΈ ΠΎΠΏΠΈΡΠ°ΡΡ Π²ΡΡ Π»ΠΎΠ³ΠΈΠΊΡ Π±ΠΈΠ»Π΄ΠΎΠ² Π² Π²ΠΈΠ΄Π΅ Custom gradle tasks Π΄Π»Ρ Π²Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ°.
ΠΡ ΡΠ΅ΡΠΈΠ»ΠΈ Π²ΡΠ±ΡΠ°ΡΡ Π²ΡΠΎΡΠΎΠΉ Π²Π°ΡΠΈΠ°Π½Ρ, ΠΈ ΡΠ΅ΠΉΡΠ°Ρ ΠΏΠ»Π°Π½ΠΎΠΌΠ΅ΡΠ½ΠΎ ΡΠ΄Π°Π»ΡΠ΅ΠΌ Π²ΡΠ΅ bash-ΡΠΊΡΠΈΠΏΡΡ ΠΈ ΠΏΠΈΡΠ΅ΠΌ ΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠ°ΡΡΠΎΠΌΠ½ΡΡ gradle-ΡΠ°ΡΠΎΠΊ.
Π‘ΠΎΠ²Π΅Ρ β2: Ρ ΡΠ°Π½ΠΈΡΡ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ Π² ΠΊΠΎΠ΄Π΅.
Π£Π΄ΠΎΠ±Π½ΠΎ, ΠΊΠΎΠ³Π΄Π° Π½Π°ΡΡΡΠΎΠΉΠΊΠ° Continuous Integration Ρ ΡΠ°Π½ΠΈΡΡΡ Π½Π΅ Π² UI-ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ΅ Jenkins ΠΈΠ»ΠΈ TeamCity ΠΈ Ρ.ΠΏ., Π° Π² Π²ΠΈΠ΄Π΅ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΏΡΡΠΌΠΎ Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠ°. ΠΡΠΎ Π΄Π°Π΅Ρ Π²Π΅ΡΡΠΈΠΎΠ½ΠΈΡΡΠ΅ΠΌΠΎΡΡΡ. ΠΡΠ΄Π΅Ρ Π½Π΅ ΡΡΡΠ΄Π½ΠΎ ΠΎΡΠΊΠ°ΡΠΈΡΡΡΡ ΠΈΠ»ΠΈ ΡΠΎΠ±ΡΠ°ΡΡ ΠΊΠΎΠ΄ Π½Π° Π΄ΡΡΠ³ΠΎΠΉ Π²Π΅ΡΠΊΠ΅.
Π‘ΠΊΡΠΈΠΏΡΡ ΠΌΠΎΠΆΠ½ΠΎ Ρ ΡΠ°Π½ΠΈΡΡ Π² ΠΏΡΠΎΠ΅ΠΊΡΠ΅. Π ΡΡΠΎ Π΄Π΅Π»Π°ΡΡ Ρ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠ΅ΠΌ?
Π‘ΠΎΠ²Π΅Ρ β3: Ρ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠΌΠΎΡΡ Docker.
Android-ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌ ΠΎΠ½ ΡΠΎΡΠ½ΠΎ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ, iOS ΠΏΠΎΠΊΠ° Π½Π΅Ρ, ΠΊ ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ.
ΠΡΠΎ ΠΏΡΠΈΠΌΠ΅Ρ ΠΏΡΠΎΡΡΠΎΠ³ΠΎ docker-ΡΠ°ΠΉΠ»Π°, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π² ΡΠ΅Π±Π΅ jdk ΠΈ android-sdk:
FROM openjdk:8
ENV SDK_URL="https://dl.google.com/android/repository/sdk-tools-linux-3859397.zip"
ANDROID_HOME="/usr/local/android-sdk"
ANDROID_VERSION=26
ANDROID_BUILD_TOOLS_VERSION=26.0.2
# Download Android SDK
RUN mkdir "$ANDROID_HOME" .android
&& cd "$ANDROID_HOME"
&& curl -o sdk.zip $SDK_URL
&& unzip sdk.zip
&& rm sdk.zip
&& yes | $ANDROID_HOME/tools/bin/sdkmanager --licenses
# Install Android Build Tool and Libraries
RUN $ANDROID_HOME/tools/bin/sdkmanager --update
RUN $ANDROID_HOME/tools/bin/sdkmanager "build-tools;${ANDROID_BUILD_TOOLS_VERSION}"
"platforms;android-${ANDROID_VERSION}"
"platform-tools"
RUN mkdir /application
WORKDIR /application
ΠΠ°ΠΏΠΈΡΠ°Π² ΡΡΠΎΡ docker-ΡΠ°ΠΉΠ» (ΡΠΊΠ°ΠΆΡ ΠΏΠΎ ΡΠ΅ΠΊΡΠ΅ΡΡ, Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ ΠΏΠΈΡΠ°ΡΡ, Π° ΡΡΡΠ½ΡΡΡ Π³ΠΎΡΠΎΠ²ΡΠΉ Ρ GitHub) ΠΈ ΡΠΎΠ±ΡΠ°Π² ΠΎΠ±ΡΠ°Π·, Π²Ρ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΠ΅ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΠΌΠ°ΡΠΈΠ½Ρ, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠΉ cΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΎΠ±ΠΈΡΠ°ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ Junit-ΡΠ΅ΡΡΡ.
ΠΠ²Π° Π³Π»Π°Π²Π½ΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°, ΠΏΠΎΡΠ΅ΠΌΡ ΡΡΠΎ ΠΈΠΌΠ΅Π΅Ρ ΡΠΌΡΡΠ»: ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΡΠ΅ΠΌΠΎΡΡΡ ΠΈ ΠΏΠΎΠ²ΡΠΎΡΡΠ΅ΠΌΠΎΡΡΡ. Π‘ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ docker ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΡΡΡΠΎ ΠΏΠΎΠ΄Π½ΡΡΡ Π΄Π΅ΡΡΡΠΎΠΊ Π±ΠΈΠ»Π΄-Π°Π³Π΅Π½ΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ΄ΡΡ ΠΈΠΌΠ΅ΡΡ ΡΠΎΡΠ½ΠΎ ΡΠ°ΠΊΠΎΠ΅ ΠΆΠ΅ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠ°ΠΊ ΠΈ ΠΏΡΠ΅ΠΆΠ½ΠΈΠΉ. ΠΡΠΎ ΠΎΡΠ΅Π½Ρ ΠΎΠ±Π»Π΅Π³ΡΠ°Π΅Ρ ΠΆΠΈΠ·Π½Ρ CI-ΠΈΠ½ΠΆΠ΅Π½Π΅ΡΠΎΠ². ΠΠ°ΠΏΠΈΡ Π½ΡΡΡ android-sdk Π² docker ΡΠΎΠ²ΡΠ΅ΠΌ ΠΏΡΠΎΡΡΠΎ, Ρ ΡΠΌΡΠ»ΡΡΠΎΡΠ°ΠΌΠΈ ΡΡΡΡ-ΡΡΡΡ ΡΠ»ΠΎΠΆΠ½Π΅Π΅: ΠΏΡΠΈΠ΄Π΅ΡΡΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Π½Π°ΠΏΡΡΡΡΡΡ (Π½Ρ, ΠΈΠ»ΠΈ ΠΎΠΏΡΡΡ Ρ GitHub ΡΠΊΠ°ΡΠ°ΡΡ Π³ΠΎΡΠΎΠ²ΠΎΠ΅).
Π‘ΠΎΠ²Π΅Ρ β4: Π½Π΅ Π·Π°Π±ΡΠ²Π°ΡΡ, ΡΡΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π΄Π΅Π»Π°ΡΡΡΡ Π½Π΅ ΡΠ°Π΄ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΎΠΊ, Π° Π΄Π»Ρ Π»ΡΠ΄Π΅ΠΉ.
Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌ ΠΎΡΠ΅Π½Ρ Π²Π°ΠΆΠ½Π° Π±ΡΡΡΡΠ°Ρ ΠΈ, ΡΠ°ΠΌΠΎΠ΅ Π³Π»Π°Π²Π½ΠΎΠ΅, ΠΏΠΎΠ½ΡΡΠ½Π°Ρ ΠΎΠ±ΡΠ°ΡΠ½Π°Ρ ΡΠ²ΡΠ·Ρ: ΡΡΠΎ Ρ Π½ΠΈΡ ΡΠ»ΠΎΠΌΠ°Π»ΠΎΡΡ, ΠΊΠ°ΠΊΠΎΠΉ ΡΠ΅ΡΡ ΡΠΏΠ°Π», Π³Π΄Π΅ Π±ΠΈΠ»Π΄Π»ΠΎΠ³ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ.
Π‘ΠΎΠ²Π΅Ρ β5: Π±ΡΠ΄ΡΡΠ΅ ΠΏΡΠ°Π³ΠΌΠ°ΡΠΈΡΠ½Ρ ΠΏΡΠΈ ΡΠ°Π·Π²ΠΈΡΠΈΠΈ Continuous Integration.
Π§Π΅ΡΠΊΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°ΠΉΡΠ΅, ΠΊΠ°ΠΊΠΈΠ΅ ΡΠΈΠΏΡ ΠΎΡΠΈΠ±ΠΎΠΊ Ρ ΠΎΡΠΈΡΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠΈΡΡ, ΡΠΊΠΎΠ»ΡΠΊΠΎ Π³ΠΎΡΠΎΠ²Ρ ΠΏΠΎΡΡΠ°ΡΠΈΡΡ ΡΠ΅ΡΡΡΡΠΎΠ², Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, ΠΌΠ°ΡΠΈΠ½Π½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ. Π‘Π»ΠΈΡΠΊΠΎΠΌ Π΄ΠΎΠ»Π³ΠΈΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠ΅ΡΠ΅Π½Π΅ΡΡΠΈ Π½Π° Π½ΠΎΡΡ. Π ΠΎΡ ΡΠ΅Ρ ΠΈΠ· Π½ΠΈΡ , ΠΊΠΎΡΠΎΡΡΠ΅ Π»ΠΎΠ²ΡΡ Π½Π΅ ΠΎΡΠ΅Π½Ρ Π²Π°ΠΆΠ½ΡΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ, ΡΠΎΠ²ΡΠ΅ΠΌ ΠΎΡΠΊΠ°Π·Π°ΡΡΡΡ.
Π‘ΠΎΠ²Π΅Ρ β6: ΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ΡΡ Π³ΠΎΡΠΎΠ²ΡΠΌΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ.
Π‘Π΅ΠΉΡΠ°Ρ Π΅ΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ ΠΎΠ±Π»Π°ΡΠ½ΡΠΉ CI.
ΠΠ»Ρ ΠΌΠ°Π»Π΅Π½ΡΠΊΠΈΡ
ΠΊΠΎΠΌΠ°Π½Π΄ ΡΡΠΎ Ρ
ΠΎΡΠΎΡΠΈΠΉ Π²ΡΡ
ΠΎΠ΄. ΠΠ΅ Π½ΡΠΆΠ½ΠΎ Π½ΠΈΡΠ΅Π³ΠΎ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ, ΠΏΡΠΎΡΡΠΎ ΠΏΠ»Π°ΡΠΈΡΠ΅ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π΄Π΅Π½Π΅Π³, ΡΠΎΠ±ΠΈΡΠ°Π΅ΡΠ΅ ΡΠ²ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ Π΄Π°ΠΆΠ΅ Π³ΠΎΠ½ΡΠ΅ΡΠ΅ instrumentation tests.
Π‘ΠΎΠ²Π΅Ρ β7: Π² Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ Π²ΡΠ³ΠΎΠ΄Π½Π΅Π΅ in-house ΡΠ΅ΡΠ΅Π½ΠΈΡ.
ΠΠΎ ΡΠ°Π½ΠΎ ΠΈΠ»ΠΈ ΠΏΠΎΠ·Π΄Π½ΠΎ, Ρ ΡΠΎΡΡΠΎΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΡΡΠ°Π½ΡΡ Π²ΡΠ³ΠΎΠ΄Π½Π΅Π΅ in-house ΡΠ΅ΡΠ΅Π½ΠΈΡ. C ΡΡΠΈΠΌΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΡΠΌΠΈ Π΅ΡΡΡ ΠΎΠ΄ΠΈΠ½ ΠΌΠΎΠΌΠ΅Π½Ρ. Π ΡΠΊΠΎΠ½ΠΎΠΌΠΈΠΊΠ΅ Π΅ΡΡΡ Π·Π°ΠΊΠΎΠ½ ΡΠ±ΡΠ²Π°ΡΡΠ΅ΠΉ ΠΎΡΠ΄Π°ΡΠΈ: Π² Π»ΡΠ±ΠΎΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅ ΡΠ»ΡΡΡΠ΅Π½ΠΈΠ΅ Π΄Π°Π΅ΡΡΡ Π²ΡΠ΅ ΡΡΡΠ΄Π½Π΅Π΅, ΡΡΠ΅Π±ΡΠ΅Ρ Π²ΡΠ΅ Π±ΠΎΠ»ΡΡΠ΅ ΠΈ Π±ΠΎΠ»ΡΡΠ΅ ΠΈΠ½Π²Π΅ΡΡΠΈΡΠΈΠΉ.
ΠΠΊΠΎΠ½ΠΎΠΌΠΈΠΊΠ° ΠΎΠΏΠΈΡΡΠ²Π°Π΅Ρ Π²ΡΡ Π½Π°ΡΡ ΠΆΠΈΠ·Π½Ρ, Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ Continuous Integration. Π― ΠΏΠΎΡΡΡΠΎΠΈΠ» Π³ΡΠ°ΡΠΈΠΊ ΡΡΡΠ΄ΠΎΠ·Π°ΡΡΠ°Ρ Π½Π° ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΡΠ°ΠΏ ΡΠ°Π·Π²ΠΈΡΠΈΡ Π½Π°ΡΠ΅Π³ΠΎ Continuous Integration.
ΠΠΈΠ΄Π½ΠΎ, ΡΡΠΎ Π»ΡΠ±ΠΎΠ΅ ΡΠ»ΡΡΡΠ΅Π½ΠΈΠ΅ Π΄Π°Π΅ΡΡΡ Π²ΡΠ΅ ΡΡΡΠ΄Π½Π΅Π΅ ΠΈ ΡΡΡΠ΄Π½Π΅Π΅. ΠΠ»ΡΠ΄Ρ Π½Π° ΡΡΠΎΡ Π³ΡΠ°ΡΠΈΠΊ, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡΡ, ΡΡΠΎ ΡΠ°Π·Π²ΠΈΠ²Π°ΡΡ Continuous Integration Π½ΡΠΆΠ½ΠΎ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎ Ρ ΡΠΎΡΡΠΎΠΌ ΡΠ°Π·ΠΌΠ΅ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Ρ. ΠΠ»Ρ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΈΠ· Π΄Π²ΡΡ
ΡΠ΅Π»ΠΎΠ²Π΅ΠΊ ΡΡΠ°ΡΠΈΡΡ 50 Π΄Π½Π΅ΠΉ Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΡ Π²Π½ΡΡΡΠ΅Π½Π½Π΅ΠΉ ΡΠ΅ΡΠΌΡ ΡΠΌΡΠ»ΡΡΠΎΡΠΎΠ² β ΡΠ°ΠΊ ΡΠ΅Π±Π΅ ΠΈΠ΄Π΅Ρ. ΠΠΎ ΠΏΡΠΈ ΡΡΠΎΠΌ Π΄Π»Ρ Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΡΠΎΠ²ΡΠ΅ΠΌ Π½Π΅ Π·Π°Π½ΠΈΠΌΠ°ΡΡΡΡ Continuous Integration β ΡΠΎΠΆΠ΅ ΠΏΠ»ΠΎΡ
Π°Ρ ΠΈΠ΄Π΅Ρ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π½Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ, ΠΏΠΎΡΠΈΠ½ΠΊΡ ΠΊΠΎΠΌΠΌΡΠ½ΠΈΠΊΠ°ΡΠΈΠΈ ΠΈ Ρ.ΠΏ. ΡΠΉΠ΄Π΅Ρ Π΅ΡΠ΅ Π±ΠΎΠ»ΡΡΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ.
ΠΡ Π½Π°ΡΠ°Π»ΠΈ Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΡ Π½ΡΠΆΠ½Π°, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π»ΡΠ΄ΠΈ Π΄ΠΎΡΠΎΠ³ΠΈΠ΅, ΠΎΠ½ΠΈ ΠΎΡΠΈΠ±Π°ΡΡΡΡ ΠΈ Π»Π΅Π½ΡΡΡΡ. ΠΠΎ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΡΡΡ ΡΠΎΠΆΠ΅ Π»ΡΠ΄ΠΈ. ΠΠΎΡΡΠΎΠΌΡ Π²ΡΠ΅ ΡΡΠΈ ΠΆΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΎΡΠ½ΠΎΡΡΡΡΡ ΠΈ ΠΊ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΠΈ.
- ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ Π΄ΠΎΡΠΎΠ³ΠΎ. ΠΡΠΏΠΎΠΌΠ½ΠΈΡΠ΅ Π³ΡΠ°ΡΠΈΠΊ ΡΡΡΠ΄ΠΎΠ·Π°ΡΡΠ°Ρ.
- ΠΡΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΠΈ Π»ΡΠ΄ΠΈ ΠΎΡΠΈΠ±Π°ΡΡΡΡ.
- ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΈΠ½ΠΎΠ³Π΄Π° ΠΎΡΠ΅Π½Ρ Π»Π΅Π½Ρ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΈ ΡΠ°ΠΊ Π²ΡΠ΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ. ΠΠ°ΡΠ΅ΠΌ Π΅ΡΠ΅ ΡΡΠΎ-ΡΠΎ ΡΠ»ΡΡΡΠ°ΡΡ, Π·Π°ΡΠ΅ΠΌ Π²Π΅ΡΡ ΡΡΠΎΡ Continuous Integration?
ΠΠΎ Ρ ΠΌΠ΅Π½Ρ Π΅ΡΡΡ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ°: Π² 20% ΡΠ±ΠΎΡΠΎΠΊ Π»ΠΎΠ²ΡΡΡΡ ΠΎΡΠΈΠ±ΠΊΠΈ. Π ΡΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π½Π΅ ΠΏΠΎΡΠΎΠΌΡ, ΡΡΠΎ Π½Π°ΡΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΠΏΠ»ΠΎΡ ΠΎ ΠΏΠΈΡΡΡ ΠΊΠΎΠ΄. ΠΡΠΎ ΠΏΠΎΡΠΎΠΌΡ, ΡΡΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΡΠ²Π΅ΡΠ΅Π½Ρ, ΡΡΠΎ, Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΈ Π΄ΠΎΠΏΡΡΡΡΡ ΠΊΠ°ΠΊΡΡ-ΡΠΎ ΠΎΡΠΈΠ±ΠΊΡ, ΠΎΠ½Π° Π½Π΅ ΠΏΠΎΠΏΠ°Π΄Π΅Ρ Π² develop, Π΅Π΅ ΠΏΠΎΠΉΠΌΠ°ΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ. Π‘ΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΠΌΠΎΠ³ΡΡ ΡΡΠ°ΡΠΈΡΡ Π±ΠΎΠ»ΡΡΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π½Π° Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° ΠΈ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΠ΅ ΡΡΡΠΊΠΈ, Π° Π½Π΅ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎ ΡΡΠΎ-ΡΠΎ Π³ΠΎΠ½ΡΡΡ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ.
ΠΠ°Π½ΠΈΠΌΠ°ΠΉΡΠ΅ΡΡ Continuous Integration. ΠΠΎ Π² ΠΌΠ΅ΡΡ.
ΠΡΡΠ°ΡΠΈ, ΠΠΈΠΊΠΎΠ»Π°ΠΉ ΠΠ΅ΡΡΠ΅ΡΠΎΠ² Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ°ΠΌ Π΄Π΅Π»Π°Π΅Ρ ΠΊΠ»Π°ΡΡΠ½ΡΠ΅ Π΄ΠΎΠΊΠ»Π°Π΄Ρ, Π° Π΅ΡΠ΅ Π²Ρ ΠΎΠ΄ΠΈΡ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠΉ ΠΊΠΎΠΌΠΈΡΠ΅Ρ
AppsConf ΠΈ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ Π΄ΡΡΠ³ΠΈΠΌ Π³ΠΎΡΠΎΠ²ΠΈΡΡ Π΄Π»Ρ Π²Π°Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ΅Π»ΡΠ½ΡΠ΅ Π²ΡΡΡΡΠΏΠ»Π΅Π½ΠΈΡ. ΠΠΎΠ»Π½ΠΎΡΡ ΠΈ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π±Π»ΠΈΠΆΠ°ΠΉΡΠ΅ΠΉ ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠ΅Π½ΠΈΡΡ ΠΏΠΎ ΡΠ΅ΠΌΠ°ΠΌ Π²ΡΠ°ΡΠΏΠΈΡΠ°Π½ΠΈΠΈ . Π Π·Π° ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΡΠΌΠΈ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΠ΅ 22-23 Π°ΠΏΡΠ΅Π»Ρ Π² ΠΠ½ΡΠΎΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ.
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com