Intercon Android - Integração e entrega contínua para Android

Preview:

DESCRIPTION

Palestra apresentada por Victor Nascimento durante o Intercon Android, no dia 20/09/2014.

Citation preview

Desenvolvemos produtos digitais

Continuous Mobile: Entrega e Integração Contínuas em Android

Integração Contínua (IC)?

Temas

Deployment Continuo(DC)?

Topologia IC/DC Mobile

Desafios Mobile

QA & comentários

Um projeto qualquer...

O problema...

Como detectar o problema antes? Automatização!

Git Server

CI Server

CI faz um polling do git

Emulador 1 Emulador n

...Relatórios

Mobiledev - CD Server(Concrete Solutions)

Benefícios IC/DC

● Aumento da inspeção e consequente aumento da transparência● Garantia de execução de testes a cada commit (polling do SIC)● Dar mais confiança para o time em atualizações de versões● Repetibilidade da verificação de erros reais● One click Deploy (até produção se quiser!)● Scare Friday ? Deploys de sexta-feira

Automatização = !ADT && !Studio

Build automatizado - Android

Provavelmente será depreciado logo…

Opção para quem já está acostumado com Java e Eclipse. Comunidade altamente ativa!

Muito bom se você não usa o Eclipse, maaaas ainda não está completo…

● Famoso no Java Backend● Suporte a AAR está em beta (para o Eclipse não é

possível por enquanto)● Suporte ruim a bibliotecas fechadas (bem melhor no

4.x-rc1● Zilhões de plugins (Checkstyle, PMD, JaCoCo, Emma,

Sonar, etc)

● Sistema que o Google escolheu● Estrutura do pojeto mais simples (BuildVariants +

Project Flavors)● Maiores facilidades (ManifestMerger, controle da

versão e etc)● Ainda está em beta!

● Matriz de problemas: vértice A (versões do Android) x vértice B (densidades de telas) x vértice C (hardware? 3g?) x ...

● http://square.github.io/spoon/ execução do projeto em todos os devices que o adb encontrar

● Jenkins Matrix Parameter Job● Android Maven Plugin RC | Gradle

Emuladores - Android

Android Jenkins Plugin

● Emuladores por meio do plugin Android Emulator Plugin

Android Jenkins Plugin

Android Jenkins Plugin | Problemas?

● Startup de emuladores● Imprevisível em ambientes virtualizados (AWS)● Como fazer com devices físicos?

● Master: na núvem (o mesmo para iOS, Android e etc)

● Slaves: máquinas físicas Podem ter vários devices

conectados Podem ter os emuladores já

inicializados Podem ser otimizados (placa

gráfica, usar KVM, etc)

Jenkins - Master -> Slave

Jenkins - Master -> Slave

● Pode-se publicar relatórios da branch remota

● Para os builds de Maven com o plugin 3.9.0-rcX e Gradle recentes, executar em tudo que estiver disponível para o ADB

Jenkins - Master -> Slave | Problemas?

● Se puder, faça o setup com um DevOps!● Conheça os comandos mais avançados do ADB (port

forwarding para devices sem cabos USBs, AAPT para descobrir a versão do manifest, etc)

● Pré & Post build actions com scripts (por exemplo para guardar os logcats de cada device na workspace do seu job)

Jenkins - Branching & Fluxo de jobs

● Não tem um único modelo correto● Faça como achar melhor, apenas

não complique muito. Exemplo: desenvolvimento na branch MASTER, e todos os releases na branch RELEASE com versões TAGGEADAS

● Testes Unitários: faça-os serem unitários mesmo! (faça um mock da API, por exemplo…)

● Testes Integrados: use ferramentas como Calabash ou Selendroid

Testes

Testes - Problemas?

● Desliguem as animações dos targets!● Use um outro InstrumentationRunner (ver

documentação do Espresso)● Procure a implementação das bibliotecas que usa

para mockar. Exemplo: retrofit -> retrofit-mock

Soluções Deployment Continuo

● Solução Interna MobRelease● Appaloosa (https://www.appaloosa-store.com/)● Appblade (https://appblade.com/)● Google Play Native App Beta Testing Alternativas

blog.concretesolutions.com.br@ConcreteS

facebook.com/ConcreteS

victor.nascimento@concretesolutions.com.br