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
410
«CI процессы в Android разработке Avito», Сергей Пинчук, Avito
AvitoTech
March 20, 2018
Tweet
Share
More Decks by AvitoTech
See All by AvitoTech
Один кликстрим на все бэкенды. Дмитрий Хасанов (Авито)
avitotech
0
750
«Масштабируемая архитектура фронтенда» — Роман Дворнов, Avito
avitotech
0
1.1k
Атомарные SPA — Александр Китов, Альфа-Банк
avitotech
0
1.6k
Моделирование пользовательских предпочтений в мультимодальных данных. Hady W. Lauw, Максим Ткаченко (Singapore Management University)
avitotech
0
360
Кластеризация волатильных объявлений с помощью EM-алгоритма — Василий Лексин (Avito)
avitotech
0
370
«(Не)Безопасность 101» — Григорий Джанелидзе, Mosdroid
avitotech
0
450
Кластеризация волатильных объявлений с помощью EM-алгоритма — Василий Лексин (Avito)
avitotech
0
96
Аналитическое хранилище Avito.ru — от больших к очень большим данным — Артем Данилов (Avito)
avitotech
1
4.7k
Кросс-продуктовые эффекты, или как мы оценивали вклад «Электричек» — Екатерина Лосева (Туту.ру)
avitotech
0
4.5k
Other Decks in Programming
See All in Programming
SQLアンチパターン第2版 データベースプログラミングで陥りがちな失敗とその対策 / Intro to SQL Antipatterns 2nd
twada
PRO
16
2.3k
テスト駆動Kaggle
isax1015
1
630
状態遷移図を書こう / Sequence Chart vs State Diagram
orgachem
PRO
2
210
オンコール⼊⾨〜ページャーが鳴る前に、あなたが備えられること〜 / Before The Pager Rings
yktakaha4
2
1k
CDK引数設計道場100本ノック
badmintoncryer
2
480
PipeCDのプラグイン化で目指すところ
warashi
1
310
Azure AI Foundryではじめてのマルチエージェントワークフロー
seosoft
0
200
ソフトウェア品質を数字で捉える技術。事業成長を支えるシステム品質の マネジメント
takuya542
2
15k
What's new in AppKit on macOS 26
1024jp
0
150
ご注文の差分はこちらですか? 〜 AWS CDK のいろいろな差分検出と安全なデプロイ
konokenj
3
580
初学者でも今すぐできる、Claude Codeの生産性を10倍上げるTips
s4yuba
16
13k
Goで作る、開発・CI環境
sin392
0
260
Featured
See All Featured
YesSQL, Process and Tooling at Scale
rocio
173
14k
Optimizing for Happiness
mojombo
379
70k
GraphQLの誤解/rethinking-graphql
sonatard
71
11k
The Art of Programming - Codeland 2020
erikaheidi
54
13k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
8
830
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
A designer walks into a library…
pauljervisheath
207
24k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
35
2.4k
Done Done
chrislema
184
16k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
181
54k
Raft: Consensus for Rubyists
vanstee
140
7k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
126
53k
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