Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
«CI процессы в Android разработке Avito», Серге...
Search
AvitoTech
March 20, 2018
Programming
0
430
«CI процессы в Android разработке Avito», Сергей Пинчук, Avito
AvitoTech
March 20, 2018
Tweet
Share
More Decks by AvitoTech
See All by AvitoTech
Один кликстрим на все бэкенды. Дмитрий Хасанов (Авито)
avitotech
0
770
«Масштабируемая архитектура фронтенда» — Роман Дворнов, Avito
avitotech
0
1.2k
Атомарные SPA — Александр Китов, Альфа-Банк
avitotech
0
1.6k
Моделирование пользовательских предпочтений в мультимодальных данных. Hady W. Lauw, Максим Ткаченко (Singapore Management University)
avitotech
0
370
Кластеризация волатильных объявлений с помощью EM-алгоритма — Василий Лексин (Avito)
avitotech
0
390
«(Не)Безопасность 101» — Григорий Джанелидзе, Mosdroid
avitotech
0
480
Кластеризация волатильных объявлений с помощью EM-алгоритма — Василий Лексин (Avito)
avitotech
0
110
Аналитическое хранилище Avito.ru — от больших к очень большим данным — Артем Данилов (Avito)
avitotech
1
4.7k
Кросс-продуктовые эффекты, или как мы оценивали вклад «Электричек» — Екатерина Лосева (Туту.ру)
avitotech
0
4.5k
Other Decks in Programming
See All in Programming
Inside of Swift Export
giginet
PRO
1
520
問題の見方を変える「システム思考」超入門
panda_program
0
170
ネストしたdata classの面倒な更新にさようなら!Lensを作って理解するArrowのOpticsの世界
shiita0903
1
290
coconala_slide_pop.pdf
yukihito13
0
270
AI駆動開発ライフサイクル(AI-DLC)のホワイトペーパーを解説
swxhariu5
0
260
AIを駆使して新しい技術を効率的に理解する方法
nogu66
0
330
CSC305 Lecture 13
javiergs
PRO
0
400
Amazon Bedrock Knowledge Bases Hands-on
konny0311
0
130
エンジニアに事業やプロダクトを理解してもらうためにやってること
murabayashi
0
140
r2-image-worker
yusukebe
1
150
Node-REDのノードの開発・活用事例とコミュニティとの関わり(Node-RED Con Nagoya 2025)
404background
0
120
「10分以内に機能を消せる状態」 の実現のためにやっていること
togishima
1
250
Featured
See All Featured
GraphQLとの向き合い方2022年版
quramy
49
14k
Git: the NoSQL Database
bkeepers
PRO
431
66k
How to Think Like a Performance Engineer
csswizardry
28
2.3k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3.1k
Build your cross-platform service in a week with App Engine
jlugia
234
18k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
54k
Designing for Performance
lara
610
69k
Docker and Python
trallard
46
3.6k
Rails Girls Zürich Keynote
gr2m
95
14k
How GitHub (no longer) Works
holman
315
140k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
660
Transcript
CI процессы в Android разработке Avito Пинчук Сергей 1
План • Общие сведения о Avito Android • Интеграция проверок
на CI • Обзор набора тестов и их оптимизации • Планы на будущее • Итоги • Вопросы 2
Avito Android CI это • Более 11,000 unit-тестов • Более
800 компонентных тестов • Более 300 функциональных end-to-end тестов • Порядка 50 прогонов в день • Продолжительность 100 часов ежедневно 3
Время выполнения unit-тестов 4
Время выполнения unit-тестов 5
Стек технологий 6
Git flow 7
Git flow 8
Git flow 9
Git flow 10
Интеграция тестов на CI ?????? 11
Интеграция тестов на CI Tests 12
Интеграция тестов на CI 13
Интеграция тестов на CI Tests Tests 14
Интеграция тестов на CI 15
git merge origin/develop Tests 16
git merge origin/develop Tests 17
git merge origin/develop Tests 18
Pull request flow в Avito • Билды запускаются при открытии
Pull Request и каждом последующем коммите • Перед каждым тестом git merge origin/develop • “Контрольный” запуск тестов перед merge в develop 19
Причины хранить CI скрипты в VCS • Версионирование • Синхронизация
изменений • Тестирование изменений на ветке • Локальная воспроизводимость 20
Настройка окружения 21 VS
Плюсы использования Docker • Стабильность и повторяемость окружения • Локальный
запуск CI билдов • Централизованное и контролируемое обновление • Версионирование 22
Docker образы • Builder • Emulator • DevOps 23
Builder Dockerfile RUN wget https://dl.google.com/android/repository/sdk- tools-linux-3859397.zip -O android-sdk.zip RUN unzip
android-sdk.zip -d /opt/android-sdk COPY android-sdk-packages /android-sdk-packages RUN yes | sdkmanager —package_file=/android-sdk-packages RUN yes | sdkmanager —licenses 24
Builder Dockerfile RUN wget https://dl.google.com/android/repository/sdk- tools-linux-3859397.zip -O android-sdk.zip RUN unzip
android-sdk.zip -d /opt/android-sdk COPY android-sdk-packages /android-sdk-packages RUN yes | sdkmanager —package_file=/android-sdk-packages RUN yes | sdkmanager —licenses 25
Builder Dockerfile RUN wget https://dl.google.com/android/repository/sdk- tools-linux-3859397.zip -O android-sdk.zip RUN unzip
android-sdk.zip -d /opt/android-sdk COPY android-sdk-packages /android-sdk-packages RUN yes | sdkmanager —package_file=/android-sdk-packages RUN yes | sdkmanager —licenses 26
Builder Dockerfile RUN wget https://dl.google.com/android/repository/sdk- tools-linux-3859397.zip -O android-sdk.zip RUN unzip
android-sdk.zip -d /opt/android-sdk COPY android-sdk-packages /android-sdk-packages RUN yes | sdkmanager —package_file=/android-sdk-packages RUN yes | sdkmanager —licenses 27
Emulator Dockerfile RUN echo "no" | \ avdmanager create avd
\ —name emulator_19 \ —package "system-images;android-19;google_apis;x86" \ —abi google_apis/x86 RUN mksdcard -l e 512M /sdcard.img COPY hardware/config_19.ini \ $HOME/.android/avd/emulator_19.avd/config.ini 28
Emulator Dockerfile RUN echo "no" | \ avdmanager create avd
\ —name emulator_19 \ —package "system-images;android-19;google_apis;x86" \ —abi google_apis/x86 RUN mksdcard -l e 512M /sdcard.img COPY hardware/config_19.ini \ $HOME/.android/avd/emulator_19.avd/config.ini 29
Emulator Dockerfile RUN echo "no" | \ avdmanager create avd
\ —name emulator_19 \ —package "system-images;android-19;google_apis;x86" \ —abi google_apis/x86 RUN mksdcard -l e 512M /sdcard.img COPY hardware/config_19.ini \ $HOME/.android/avd/emulator_19.avd/config.ini 30
gradle.properties org.gradle.jvmargs=-Xmx8192m org.gradle.daemon=false org.gradle.caching=true org.gradle.parallel=true* org.gradle.workers.max=8 *broken in Kotlin 1.2.20
issue KT-22513 31
Билды на PR • Lint • Build release • Unit
tests • UI tests 32
Android lint • он есть (: 33
Build release 34 Gradle build durason sme, minutes 0 5,5
11 16,5 22 default build cache build cache + parallel *KT-22513
Unit tests 35
Unit tests 36
UI tests • Не запускаем автотесты на железных устройствах •
Отказались от Firebase • Тестируем на AVD эмуляторах 37
Цели на будущее • impact-анализ в UI тестах • gradle
remote cache 38
Итоги • Тестирование на CI это всегда компромисс между полнотой
проверок и затрачиваемыми ресурсами • Не делать карго-культ из CI/CD практик • Пробовать что-то новое 39
Спасибо! sapinchuk 40