Π­Π²ΠΎΠ»ΡŽΡ†ΠΈΡ CI Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅ мобильной Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ

БСгодня Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠ² Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ…. Условия успСха ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π² Π²ΠΈΠ΄Π΅ простой схСмы.

Π­Π²ΠΎΠ»ΡŽΡ†ΠΈΡ CI Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅ мобильной Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ

Написав ΠΊΠΎΠ΄, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΎΠ½:

  1. Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚.
  2. НичСго Π½Π΅ Π»ΠΎΠΌΠ°Π΅Ρ‚, Π² Ρ‚ΠΎΠΌ числС ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ написали ваши ΠΊΠΎΠ»Π»Π΅Π³ΠΈ.

Если ΠΎΠ±Π° условия Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ, Ρ‚ΠΎ Π²Ρ‹ Π½Π° ΠΏΡƒΡ‚ΠΈ ΠΊ успСху. Π§Ρ‚ΠΎΠ±Ρ‹ Π»Π΅Π³ΠΊΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ эти условия ΠΈ Π½Π΅ ΡΠ²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ с Π²Ρ‹Π³ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡƒΡ‚ΠΈ, ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Π»ΠΈ Continuous Integration.

CI β€” это Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ процСсс, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π²Ρ‹ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Ρ‡Π°Ρ‰Π΅ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ свой ΠΊΠΎΠ΄ Π² ΠΎΠ±Ρ‰ΠΈΠΉ ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°. И Π½Π΅ просто ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚Π΅, Π° Π΅Ρ‰Π΅ ΠΈ постоянно провСряСтС, Ρ‡Ρ‚ΠΎ всС Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ Π½ΡƒΠΆΠ½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ ΠΈ часто, стоит Π·Π°Π΄ΡƒΠΌΠ°Ρ‚ΡŒΡΡ ΠΎΠ± Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ. МоТно всС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ Π½Π° Ρ€ΡƒΡ‡Π½ΠΎΠΉ тягС, Π½ΠΎ Π½Π΅ стоит, ΠΈ Π²ΠΎΡ‚ ΠΏΠΎΡ‡Π΅ΠΌΡƒ.

  • Π›ΡŽΠ΄ΠΈ Π΄ΠΎΡ€ΠΎΠ³ΠΈΠ΅. Час Ρ€Π°Π±ΠΎΡ‚Ρ‹ любого программиста стоит Π΄ΠΎΡ€ΠΎΠΆΠ΅, Ρ‡Π΅ΠΌ час Ρ€Π°Π±ΠΎΡ‚Ρ‹ любого сСрвСра.
  • Π›ΡŽΠ΄ΠΈ ΠΎΡˆΠΈΠ±Π°ΡŽΡ‚ΡΡ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ ситуации, ΠΊΠΎΠ³Π΄Π° запустили тСсты Π½Π΅ Π½Π° Ρ‚ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠ΅ ΠΈΠ»ΠΈ собрали Π½Π΅ Ρ‚ΠΎΡ‚ ΠΊΠΎΠΌΠΌΠΈΡ‚ для тСстировщиков.
  • Π›ΡŽΠ΄ΠΈ лСнятся. ΠŸΠ΅Ρ€ΠΈΠΎΠ΄ΠΈΡ‡Π΅ΡΠΊΠΈ, ΠΊΠΎΠ³Π΄Π° я Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°ΡŽ ΠΊΠ°ΠΊΡƒΡŽ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π·Π°Π΄Π°Ρ‡Ρƒ, Ρƒ мСня Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΌΡ‹ΡΠ»ΡŒ: Β«Π”Π° Ρ‡Ρ‚ΠΎ Ρ‚ΡƒΡ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ? Π― написал Π΄Π²Π΅ строчки β€” стопудово всС Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚!Β» Π”ΡƒΠΌΠ°ΡŽ, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΈΠ· вас Ρ‚Π°ΠΊΠΈΠ΅ мысли Ρ‚ΠΎΠΆΠ΅ ΠΈΠ½ΠΎΠ³Π΄Π° приходят Π² Π³ΠΎΠ»ΠΎΠ²Ρƒ. Но ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ Π½ΡƒΠΆΠ½ΠΎ всСгда.

Как внСдряли ΠΈ Ρ€Π°Π·Π²ΠΈΠ²Π°Π»ΠΈ Continuous Integration Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅ мобильной Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Авито, ΠΊΠ°ΠΊ дошли ΠΎΡ‚ 0 Π΄ΠΎ 450 сборок Π² дСнь, ΠΈ Ρ‡Ρ‚ΠΎ Π±ΠΈΠ»Π΄-ΠΌΠ°ΡˆΠΈΠ½Ρ‹ ΡΠΎΠ±ΠΈΡ€Π°ΡŽΡ‚ 200 часов Π² дСнь, рассказываСт Николай НСстСров (nnesterov) β€” участник всСх ΡΠ²ΠΎΠ»ΡŽΡ†ΠΈΠΎΠ½Π½Ρ‹Ρ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ CI/CD Android-прилоТСния.

Рассказ построСн Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Android-ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, Π½ΠΎ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠ² ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΡ‹ ΠΈ Π½Π° iOS Ρ‚ΠΎΠΆΠ΅.


Когда-Ρ‚ΠΎ Π΄Π°Π²Π½ΠΎ Π² Android-ΠΊΠΎΠΌΠ°Π½Π΄Π΅ Авито Ρ€Π°Π±ΠΎΡ‚Π°Π» ΠΎΠ΄ΠΈΠ½ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ. Π•ΠΌΡƒ ΠΏΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡŽ Π½ΠΈΡ‡Π΅Π³ΠΎ ΠΈΠ· Continuous Integration Π±Ρ‹Π»ΠΎ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ: ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π½Π΅ с ΠΊΠ΅ΠΌ.

Но ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ росло, появлялось всС большС ΠΈ большС Π½ΠΎΠ²Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡, соотвСтствСнно, росла ΠΊΠΎΠΌΠ°Π½Π΄Π°. Π’ ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΏΡ€ΠΈΡˆΠ»ΠΎ врСмя Π±ΠΎΠ»Π΅Π΅ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ Π½Π°Π»Π°Π΄ΠΈΡ‚ΡŒ процСсс ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π°. Π‘Ρ‹Π»ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Git flow.

Π­Π²ΠΎΠ»ΡŽΡ†ΠΈΡ CI Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅ мобильной Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ

ΠšΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡ 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 послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π² Π½Π΅Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Π»ΠΈΡ‚Π° Ρ„ΠΈΡ‡Π°.

Π­Π²ΠΎΠ»ΡŽΡ†ΠΈΡ CI Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅ мобильной Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ

Для этого ΠΌΡ‹ написали простой bash-скрипт premerge.sh:

#!/usr/bin/env bash

set -e

git fetch origin develop

git merge origin/develop

Π—Π΄Π΅ΡΡŒ просто ΠΏΠΎΠ΄Ρ‚ΡΠ³ΠΈΠ²Π°ΡŽΡ‚ΡΡ всС самыС свСТиС измСнСния ΠΈΠ· develop ΠΈ Π²Π»ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ. ΠœΡ‹ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ скрипт premerge.sh ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ шагом всСх Π±ΠΈΠ»Π΄ΠΎΠ² ΠΈ стали ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡŽ.

На Π»ΠΎΠΊΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, поиск Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΈ написаниС этого скрипта ΡƒΡˆΠ»ΠΎ Ρ‚Ρ€ΠΈ дня.

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π·Π²ΠΈΠ²Π°Π»ΠΎΡΡŒ, Π·Π°Π΄Π°Ρ‡ появлялось всС большС, росла ΠΊΠΎΠΌΠ°Π½Π΄Π°, ΠΈ premerge.sh ΠΈΠ½ΠΎΠ³Π΄Π° Π½Π°Ρ‡Π°Π» нас ΠΏΠΎΠ΄Π²ΠΎΠ΄ΠΈΡ‚ΡŒ. Π’ develop ΠΏΡ€ΠΎΠ½ΠΈΠΊΠ°Π»ΠΈ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΡƒΡŽΡ‰ΠΈΠ΅ измСнСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π»ΠΎΠΌΠ°Π»ΠΈ сборку.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ это происходит:

Π­Π²ΠΎΠ»ΡŽΡ†ΠΈΡ CI Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅ мобильной Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ

Π”Π²Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ ΠΏΠΈΠ»ΠΈΡ‚ΡŒ Ρ„ΠΈΡ‡ΠΈ A ΠΈ B. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Ρ„ΠΈΡ‡ΠΈ A ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Π΅Ρ‚ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ answer() ΠΈ, ΠΊΠ°ΠΊ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ бойскаут, удаляСт Π΅Π΅. ΠŸΡ€ΠΈ этом Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Ρ„ΠΈΡ‡ΠΈ B Π² своСй Π²Π΅Ρ‚ΠΊΠ΅ добавляСт Π½ΠΎΠ²Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°ΡŽΡ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΈ Π² ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅ врСмя ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‚ pull request. Π—Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ Π±ΠΈΠ»Π΄Ρ‹, premerge.sh провСряСт ΠΎΠ±Π° pull request ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ свСТСго состояния develop β€” всС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π·Π΅Π»Π΅Π½Ρ‹Π΅. ПослС этого мСрТится pull request Ρ„ΠΈΡ‡ΠΈ A, мСрТится pull request Ρ„ΠΈΡ‡ΠΈ B… Π‘ΡƒΠΌ! Develop ломаСтся, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π² ΠΊΠΎΠ΄Π΅ develop Π΅ΡΡ‚ΡŒ Π²Ρ‹Π·ΠΎΠ² Π½Π΅ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Π­Π²ΠΎΠ»ΡŽΡ†ΠΈΡ CI Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅ мобильной Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ

Когда Π½Π΅ собираСтся develop, это локальная катастрофа. Вся ΠΊΠΎΠΌΠ°Π½Π΄Π° Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ ΠΈ ΠΎΡ‚Π΄Π°Ρ‚ΡŒ Π½Π° тСстированиС.

Π’Π°ΠΊ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ, Ρ‡Ρ‚ΠΎ я Ρ‡Π°Ρ‰Π΅ всСго занимался инфраструктурными Π·Π°Π΄Π°Ρ‡Π°ΠΌΠΈ: Π°Π½Π°Π»ΠΈΡ‚ΠΈΠΊΠ°, ΡΠ΅Ρ‚ΡŒ, Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…. Π’ΠΎ Π΅ΡΡ‚ΡŒ ΠΈΠΌΠ΅Π½Π½ΠΎ я писал Ρ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ классы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ. Из-Π·Π° этого я ΠΎΡ‡Π΅Π½ΡŒ часто ΠΏΠΎΠΏΠ°Π΄Π°Π» Π² ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ ситуации. Π£ мСня Π΄Π°ΠΆΠ΅ ΠΎΠ΄Π½ΠΎ врСмя висСла такая ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ°.

Π­Π²ΠΎΠ»ΡŽΡ†ΠΈΡ CI Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅ мобильной Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ это нас Π½Π΅ устраивало, ΠΌΡ‹ Π½Π°Ρ‡Π°Π»ΠΈ ΠΏΡ€ΠΎΡ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹, ΠΊΠ°ΠΊ это ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ.

Как Π½Π΅ Π»ΠΎΠΌΠ°Ρ‚ΡŒ 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.

Π­Π²ΠΎΠ»ΡŽΡ†ΠΈΡ CI Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅ мобильной Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ

Π­Ρ‚ΠΎΡ‚ ΠΏΠ»Π°Π³ΠΈΠ½ пСрСопрСдСляСт ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ слияния pull request’ΠΎΠ². Начало стандартноС: открываСтся PR, Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ всС сборки, ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ code review. Но послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ code review ΠΏΡ€ΠΎΠΉΠ΄Π΅Π½, ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ Π½Π°ΠΆΠ°Ρ‚ΡŒ Π½Π° Β«mergeΒ», ΠΏΠ»Π°Π³ΠΈΠ½ провСряСт, ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΊΠ°ΠΊΠΎΠ³ΠΎ состояния develop Π·Π°ΠΏΡƒΡΠΊΠ°Π»ΠΈΡΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ. Если послС Π±ΠΈΠ»Π΄ΠΎΠ² develop успСл ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒΡΡ, ΠΏΠ»Π°Π³ΠΈΠ½ Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π²Π»ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ pull request Π² ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ. Он просто пСрСзапустит Π±ΠΈΠ»Π΄Ρ‹ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ свСТСго develop.

Π­Π²ΠΎΠ»ΡŽΡ†ΠΈΡ CI Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅ мобильной Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ

Π’ нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ с ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΡƒΡŽΡ‰ΠΈΠΌΠΈ измСнСниями Ρ‚Π°ΠΊΠΈΠ΅ Π±ΠΈΠ»Π΄Ρ‹ Π½Π΅ ΠΏΡ€ΠΎΠΉΠ΄ΡƒΡ‚ ΠΈΠ·-Π·Π° ошибки компиляции. БоотвСтствСнно, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡƒ Ρ„ΠΈΡ‡ΠΈ 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.

Π­Π²ΠΎΠ»ΡŽΡ†ΠΈΡ CI Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅ мобильной Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ

Π’ самом Π½Π°Ρ‡Π°Π»Π΅ ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚ ΠΏΡ€ΠΎΠΌΠ°Ρ…ΠΎΠ² ΠΌΠΈΠΌΠΎ кСша Π±Ρ‹Π» ΠΎΠΊΠΎΠ»ΠΎ 65. Π§Π΅Ρ€Π΅Π· Ρ‚Ρ€ΠΈ Π½Π΅Π΄Π΅Π»ΠΈ ΡƒΠ΄Π°Π»ΠΎΡΡŒ довСсти это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π΄ΠΎ 20%. Оказалось, Ρ‡Ρ‚ΠΎ таски, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ собираСт Android ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΈΠΌΠ΅ΡŽΡ‚ странныС Ρ‚Ρ€Π°Π½Π·ΠΈΡ‚ΠΈΠ²Π½Ρ‹Π΅ зависимости, ΠΈΠ·-Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Gradle промахивался ΠΌΠΈΠΌΠΎ кэша.

ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΠ² кэш, ΠΌΡ‹ сильно ускорили сборку. Но ΠΊΡ€ΠΎΠΌΠ΅ сборки Π΅Ρ‰Π΅ Π³ΠΎΠ½ΡΡŽΡ‚ΡΡ instrumentation тСсты, Π° Π³ΠΎΠ½ΡΡŽΡ‚ΡΡ ΠΎΠ½ΠΈ Π΄ΠΎΠ»Π³ΠΎ. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½Π΅ всС тСсты Π½Π°Π΄ΠΎ Π³ΠΎΠ½ΡΡ‚ΡŒ Π½Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ pull request. Π§Ρ‚ΠΎΠ±Ρ‹ это Π²Ρ‹ΡΡΠ½ΠΈΡ‚ΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΈΠΌΠΏΠ°ΠΊΡ‚ Π°Π½Π°Π»ΠΈΠ·.

Π˜ΠΌΠΏΠ°ΠΊΡ‚ Π°Π½Π°Π»ΠΈΠ·

На pull request ΠΌΡ‹ собираСм git diff ΠΈ Π½Π°Ρ…ΠΎΠ΄ΠΈΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½Ρ‹Π΅ Gradle ΠΌΠΎΠ΄ΡƒΠ»ΠΈ.

Π­Π²ΠΎΠ»ΡŽΡ†ΠΈΡ CI Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅ мобильной Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ

Π˜ΠΌΠ΅Π΅Ρ‚ смысл Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ instrumentation тСсты, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½Ρ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ ΠΈ всС ΠΌΠΎΠ΄ΡƒΠ»ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΡ‚ Π½ΠΈΡ… зависят. ВСсты для сосСдних ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ смысла Π½Π΅Ρ‚: Ρ‚Π°ΠΌ Π½Π΅ измСнился ΠΊΠΎΠ΄, ΠΈ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ»ΠΎΠΌΠ°Ρ‚ΡŒΡΡ.

Π‘ instrumentation тСстами Π½Π΅ всё Ρ‚Π°ΠΊ просто, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² самом Π²Π΅Ρ€Ρ…Π½Π΅ΡƒΡ€ΠΎΠ²Π½Π΅Π²ΠΎΠΌ ΠΌΠΎΠ΄ΡƒΠ»Π΅ Application. ΠœΡ‹ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠ»ΠΈ эвристику с Π°Π½Π°Π»ΠΈΠ·ΠΎΠΌ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊ ΠΊΠ°ΠΊΠΎΠΌΡƒ ΠΌΠΎΠ΄ΡƒΠ»ΡŽ относится ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ тСст.

ΠœΠΎΠ΄Π΅Ρ€Π½ΠΈΠ·Π°Ρ†ΠΈΡ Ρ€Π°Π±ΠΎΡ‚Ρ‹ instrumentation тСстов, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ΠΈ провСряли Ρ‚ΠΎΠ»ΡŒΠΊΠΎ задСйствованныС ΠΌΠΎΠ΄ΡƒΠ»ΠΈ, заняла ΠΎΠΊΠΎΠ»ΠΎ восьми нСдСль.

ΠœΠ΅Ρ€Ρ‹ ΠΏΠΎ ΡƒΡΠΊΠΎΡ€Π΅Π½ΠΈΡŽ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ сработали. Π‘ 45 ΠΌΠΈΠ½ΡƒΡ‚ ΠΌΡ‹ дошли ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Π΄ΠΎ 15. Π§Π΅Ρ‚Π²Π΅Ρ€Ρ‚ΡŒ часа ΠΆΠ΄Π°Ρ‚ΡŒ Π±ΠΈΠ»Π΄ ΡƒΠΆΠ΅ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ.

Но Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Π½Π°Ρ‡Π°Π»ΠΈ ΠΆΠ°Π»ΠΎΠ²Π°Ρ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΈΠΌ нСпонятно, ΠΊΠ°ΠΊΠΈΠ΅ Π±ΠΈΠ»Π΄Ρ‹ Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ, Π³Π΄Π΅ Π»ΠΎΠ³ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π±ΠΈΠ»Π΄ красный, ΠΊΠ°ΠΊΠΎΠΉ тСст ΡƒΠΏΠ°Π» ΠΈ Ρ‚.Π΄.

Π­Π²ΠΎΠ»ΡŽΡ†ΠΈΡ CI Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅ мобильной Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ связью Π·Π°ΠΌΠ΅Π΄Π»ΡΡŽΡ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ, поэтому ΠΌΡ‹ ΠΏΠΎΡΡ‚Π°Ρ€Π°Π»ΠΈΡΡŒ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ максимально ΠΏΠΎΠ½ΡΡ‚Π½ΡƒΡŽ ΠΈ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ PR ΠΈ Π±ΠΈΠ»Π΄Π΅. Начали с ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π² Π² Bitbucket ΠΊ PR с ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ, ΠΊΠ°ΠΊΠΎΠΉ Π±ΠΈΠ»Π΄ ΡƒΠΏΠ°Π» ΠΈ ΠΏΠΎΡ‡Π΅ΠΌΡƒ, писали адрСсныС сообщСния Π² Slack. Π’ ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠΎΠ½Ρ†ΠΎΠ² сдСлали для страницы PR dashboard со списком всСх Π±ΠΈΠ»Π΄ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ сСйчас Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ ΠΈ ΠΈΡ… состояниСм: Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ, запускаСтся, ΡƒΠΏΠ°Π» ΠΈΠ»ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠΈΠ»ΡΡ. МоТно ΠΊΠ»ΠΈΠΊΠ½ΡƒΡ‚ΡŒ Π½Π° Π±ΠΈΠ»Π΄ ΠΈ ΠΏΠΎΠΏΠ°ΡΡ‚ΡŒ Π½Π° Π΅Π³ΠΎ Π»ΠΎΠ³.

Π­Π²ΠΎΠ»ΡŽΡ†ΠΈΡ CI Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅ мобильной Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ

На ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΡƒΡŽ ΠΎΠ±Ρ€Π°Ρ‚Π½ΡƒΡŽ связь Π±Ρ‹Π»ΠΎ Π·Π°Ρ‚Ρ€Π°Ρ‡Π΅Π½ΠΎ ΡˆΠ΅ΡΡ‚ΡŒ нСдСль.

ΠŸΠ»Π°Π½Ρ‹

ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ ΠΊ новСйшСй истории. РСшив вопрос ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ связи, ΠΌΡ‹ Π²Ρ‹ΡˆΠ»ΠΈ Π½Π° Π½ΠΎΠ²Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ β€” Ρ€Π΅ΡˆΠΈΠ»ΠΈ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ свою Ρ„Π΅Ρ€ΠΌΡƒ эмуляторов. Когда тСстов ΠΈ эмуляторов ΠΌΠ½ΠΎΠ³ΠΎ, ΠΈΠΌΠΈ слоТно ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ. Π’ ΠΈΡ‚ΠΎΠ³Π΅ всС наши эмуляторы ΠΏΠ΅Ρ€Π΅Π΅Ρ…Π°Π»ΠΈ Π² k8s-кластСр с Π³ΠΈΠ±ΠΊΠΈΠΌ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ рСсурсов.

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π΅ΡΡ‚ΡŒ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠ»Π°Π½Ρ‹.

  • Π’Π΅Ρ€Π½ΡƒΡ‚ΡŒ Lint (ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ статичСский Π°Π½Π°Π»ΠΈΠ·). ΠœΡ‹ ΡƒΠΆΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ Π² этом Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ.
  • Π—Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Π½Π° PR Π±Π»ΠΎΠΊΠ΅Ρ€ΠΎΠΌ всС end-to-end тСсты Π½Π° всСх вСрсиях SDK.

Π˜Ρ‚Π°ΠΊ, ΠΌΡ‹ прослСдили ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ развития Continuous Integration Π² Авито. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ρ…ΠΎΡ‡Ρƒ Π΄Π°Ρ‚ΡŒ нСсколько совСтов с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния Π±Ρ‹Π²Π°Π»ΠΎΠ³ΠΎ.

Π‘ΠΎΠ²Π΅Ρ‚Ρ‹

Если Π±Ρ‹ я ΠΌΠΎΠ³ Π΄Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ совСт, это Π±Ρ‹Π» Π±Ρ‹ этот:

ΠŸΠΎΠΆΠ°Π»ΡƒΠΉΡΡ‚Π°, Π±ΡƒΠ΄ΡŒΡ‚Π΅ остороТнСС с shell-скриптами!

Bash β€” ΠΎΡ‡Π΅Π½ΡŒ Π³ΠΈΠ±ΠΊΠΈΠΉ ΠΈ ΠΌΠΎΡ‰Π½Ρ‹ΠΉ инструмСнт, Π½Π° Π½Π΅ΠΌ ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΈ быстро ΠΏΠΈΡΠ°Ρ‚ΡŒ скрипты. Но с Π½ΠΈΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΏΠ°ΡΡ‚ΡŒ Π² Π»ΠΎΠ²ΡƒΡˆΠΊΡƒ, ΠΈ ΠΌΡ‹, ΠΊ соТалСнию, Π² Π½Π΅Π΅ ΠΏΠΎΠΏΠ°Π»ΠΈ.

ΠΠ°Ρ‡ΠΈΠ½Π°Π»ΠΎΡΡŒ всС с простых скриптов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π·Π°ΠΏΡƒΡΠΊΠ°Π»ΠΈΡΡŒ Π½Π° Π½Π°ΡˆΠΈΡ… Π±ΠΈΠ»Π΄-ΠΌΠ°ΡˆΠΈΠ½Π°Ρ…:

#!/usr/bin/env bash
./gradlew assembleDebug

Но, ΠΊΠ°ΠΊ извСстно, всС со Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ развиваСтся ΠΈ услоТняСтся β€” Π΄Π°Π²Π°ΠΉΡ‚Π΅ запустим ΠΎΠ΄ΠΈΠ½ скрипт ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΄ΠΈΠΌ Ρ‚ΡƒΠ΄Π° ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ β€” Π² ΠΈΡ‚ΠΎΠ³Π΅ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, которая опрСдСляСт, Π½Π° ΠΊΠ°ΠΊΠΎΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ влоТСнности bash ΠΌΡ‹ сСйчас находимся, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π½ΡƒΠΆΠ½Ρ‹Π΅ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ это всС Π·Π°ΠΏΡƒΡΡ‚ΠΈΠ»ΠΎΡΡŒ.

Π­Π²ΠΎΠ»ΡŽΡ†ΠΈΡ CI Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅ мобильной Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ

ΠœΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ сСбС Ρ‚Ρ€ΡƒΠ΄ΠΎΠ·Π°Ρ‚Ρ€Π°Ρ‚Ρ‹ Π½Π° Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ Ρ‚Π°ΠΊΠΈΡ… скриптов. Π‘ΠΎΠ²Π΅Ρ‚ΡƒΡŽ Π½Π΅ ΠΏΠΎΠΏΠ°Π΄Π°Ρ‚ΡŒ Π² эту Π»ΠΎΠ²ΡƒΡˆΠΊΡƒ.

Π§Π΅ΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ?

  • Π›ΡŽΠ±Ρ‹ΠΌ скриптовым языком. ΠŸΠΈΡΠ°Ρ‚ΡŒ Π½Π° 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.

Π­Π²ΠΎΠ»ΡŽΡ†ΠΈΡ CI Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅ мобильной Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ

Для ΠΌΠ°Π»Π΅Π½ΡŒΠΊΠΈΡ… ΠΊΠΎΠΌΠ°Π½Π΄ это Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ Π²Ρ‹Ρ…ΠΎΠ΄. НС Π½ΡƒΠΆΠ½ΠΎ Π½ΠΈΡ‡Π΅Π³ΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ, просто ΠΏΠ»Π°Ρ‚ΠΈΡ‚Π΅ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π΄Π΅Π½Π΅Π³, собираСтС своС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ Π΄Π°ΠΆΠ΅ гоняСтС instrumentation tests.

Π‘ΠΎΠ²Π΅Ρ‚ β„–7: Π² большой ΠΊΠΎΠΌΠ°Π½Π΄Π΅ Π²Ρ‹Π³ΠΎΠ΄Π½Π΅Π΅ in-house Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ.

Но Ρ€Π°Π½ΠΎ ΠΈΠ»ΠΈ ΠΏΠΎΠ·Π΄Π½ΠΎ, с ростом ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ станут Π²Ρ‹Π³ΠΎΠ΄Π½Π΅Π΅ in-house Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ. C этими Ρ€Π΅ΡˆΠ΅Π½ΠΈΡΠΌΠΈ Π΅ΡΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΌΠΎΠΌΠ΅Π½Ρ‚. Π’ экономикС Π΅ΡΡ‚ΡŒ Π·Π°ΠΊΠΎΠ½ ΡƒΠ±Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ ΠΎΡ‚Π΄Π°Ρ‡ΠΈ: Π² любом ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΠ΅ даСтся всС Ρ‚Ρ€ΡƒΠ΄Π½Π΅Π΅, Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ всС большС ΠΈ большС инвСстиций.

Π­ΠΊΠΎΠ½ΠΎΠΌΠΈΠΊΠ° описываСт всю Π½Π°ΡˆΡƒ Тизнь, Π² Ρ‚ΠΎΠΌ числС Continuous Integration. Π― построил Π³Ρ€Π°Ρ„ΠΈΠΊ Ρ‚Ρ€ΡƒΠ΄ΠΎΠ·Π°Ρ‚Ρ€Π°Ρ‚ Π½Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ этап развития нашСго Continuous Integration.

Π­Π²ΠΎΠ»ΡŽΡ†ΠΈΡ CI Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅ мобильной Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ

Π’ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ любоС ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΠ΅ даСтся всС Ρ‚Ρ€ΡƒΠ΄Π½Π΅Π΅ ΠΈ Ρ‚Ρ€ΡƒΠ΄Π½Π΅Π΅. Глядя Π½Π° этот Π³Ρ€Π°Ρ„ΠΈΠΊ, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·Π²ΠΈΠ²Π°Ρ‚ΡŒ Continuous Integration Π½ΡƒΠΆΠ½ΠΎ согласованно с ростом Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹. Для ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈΠ· Π΄Π²ΡƒΡ… Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ Ρ‚Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ 50 Π΄Π½Π΅ΠΉ Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ Ρ„Π΅Ρ€ΠΌΡ‹ эмуляторов β€” Ρ‚Π°ΠΊ сСбС идСя. Но ΠΏΡ€ΠΈ этом для большой ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ совсСм Π½Π΅ Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒΡΡ Continuous Integration β€” Ρ‚ΠΎΠΆΠ΅ плохая идСя, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ, ΠΏΠΎΡ‡ΠΈΠ½ΠΊΡƒ ΠΊΠΎΠΌΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΈ Ρ‚.ΠΏ. ΡƒΠΉΠ΄Π΅Ρ‚ Π΅Ρ‰Π΅ большС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

ΠœΡ‹ Π½Π°Ρ‡Π°Π»ΠΈ с Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ автоматизация Π½ΡƒΠΆΠ½Π°, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ люди Π΄ΠΎΡ€ΠΎΠ³ΠΈΠ΅, ΠΎΠ½ΠΈ ΠΎΡˆΠΈΠ±Π°ΡŽΡ‚ΡΡ ΠΈ лСнятся. Но Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ Ρ‚ΠΎΠΆΠ΅ люди. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ всС эти ΠΆΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ относятся ΠΈ ΠΊ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ.

  • ΠΠ²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄ΠΎΡ€ΠΎΠ³ΠΎ. ВспомнитС Π³Ρ€Π°Ρ„ΠΈΠΊ Ρ‚Ρ€ΡƒΠ΄ΠΎΠ·Π°Ρ‚Ρ€Π°Ρ‚.
  • ΠŸΡ€ΠΈ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ люди ΠΎΡˆΠΈΠ±Π°ΡŽΡ‚ΡΡ.
  • ΠΠ²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ½ΠΎΠ³Π΄Π° ΠΎΡ‡Π΅Π½ΡŒ лСнь, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΈ Ρ‚Π°ΠΊ всС Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚. Π—Π°Ρ‡Π΅ΠΌ Π΅Ρ‰Π΅ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΡƒΠ»ΡƒΡ‡ΡˆΠ°Ρ‚ΡŒ, Π·Π°Ρ‡Π΅ΠΌ вСсь этот Continuous Integration?

Но Ρƒ мСня Π΅ΡΡ‚ΡŒ статистика: Π² 20% сборок ловятся ошибки. И это происходит Π½Π΅ ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ наши Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΏΠ»ΠΎΡ…ΠΎ ΠΏΠΈΡˆΡƒΡ‚ ΠΊΠΎΠ΄. Π­Ρ‚ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΡƒΠ²Π΅Ρ€Π΅Π½Ρ‹, Ρ‡Ρ‚ΠΎ, Ссли ΠΎΠ½ΠΈ допустят ΠΊΠ°ΠΊΡƒΡŽ-Ρ‚ΠΎ ΠΎΡˆΠΈΠ±ΠΊΡƒ, ΠΎΠ½Π° Π½Π΅ ΠΏΠΎΠΏΠ°Π΄Π΅Ρ‚ Π² develop, Π΅Π΅ ΠΏΠΎΠΉΠΌΠ°ΡŽΡ‚ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ. БоотвСтствСнно, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Ρ‚Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ большС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π° написаниС ΠΊΠΎΠ΄Π° ΠΈ интСрСсныС ΡˆΡ‚ΡƒΠΊΠΈ, Π° Π½Π΅ локально Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π³ΠΎΠ½ΡΡ‚ΡŒ ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ.

Π—Π°Π½ΠΈΠΌΠ°ΠΉΡ‚Π΅ΡΡŒ Continuous Integration. Но Π² ΠΌΠ΅Ρ€Ρƒ.

ΠšΡΡ‚Π°Ρ‚ΠΈ, Николай НСстСров Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ сам Π΄Π΅Π»Π°Π΅Ρ‚ классныС Π΄ΠΎΠΊΠ»Π°Π΄Ρ‹, Π° Π΅Ρ‰Π΅ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΊΠΎΠΌΠΈΡ‚Π΅Ρ‚ AppsConf ΠΈ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Π΄Ρ€ΡƒΠ³ΠΈΠΌ Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚ΡŒ для вас ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ выступлСния. ΠŸΠΎΠ»Π½ΠΎΡ‚Ρƒ ΠΈ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ блиТайшСй ΠΊΠΎΠ½Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ†Π΅Π½ΠΈΡ‚ΡŒ ΠΏΠΎ Ρ‚Π΅ΠΌΠ°ΠΌ Π² расписании. А Π·Π° подробностями ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚Π΅ 22-23 апрСля Π² Π˜Π½Ρ„ΠΎΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡ‚Π²ΠΎ.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com