Continuous Delivery is a key enabler of fast release cycles, fast feedback and high performance. Most of what we know on how to do CD is mainly oriented towards server software, where we control the environment. For desktop applications, distributed to uncontrolled environments things can get a little tricky, and the application size can be a problem.
Enabling CD for our desktop applications has changed the way we develop software in many aspects. In this presentation, we’ll talk about how we implemented CD to distribute our applications in an incremental manner and talk about many of the discoveries we made along the way.
7. O CONTEXTO FARO
▪ Até 2018 ..
2 releases por ano
Releases intermédios de manutenção
Lead Time e MTTR bastante longos
▪ Observabilidade Nula
Só obtemos o feedback de clientes depois de passar pelo suporte ao cliente
Crashes frequentes => má reputação
8. O CONTEXTO FARO
▪ Grandes aplicações
CAM2 – 600MB
CAD Translator – 1,4GB
Device Center – 300MB
▪ Clientes com más ligações
▪ Aplicações que funcionam como sistemas
Dependentes de SDKs que também precisam de ser instalados
Aplicações independentes que interagem entre si
9. O CONTEXTO FARO
▪ O que mudar no processo de desenvolvimento para suportar a entrega contínua de
valor?
Análise de erros
Dinâmicas das equipas
Alterações ao nível do CI
▪ Como implementar a operação de atualização das aplicações?
Rápida entrega de novas funcionalidades
Rápida correção de erros
Teste e validação de provas de conceito de funcionalidades.
13. CHAVES DO CONTINUOUS DELIVERY
▪ Continuous Integration
▪ Suite de testes rápido
▪ Versionamento claro
▪ Imutabilidade da release
▪ Armazenamento de artefactos para distribuição
Descrição da composição da release
▪ Deployment automatizado
17. SOURCE CONTROL
•Mudança para GIT
•Tendência para o “Trunk-based
development”
Projetos novos => GitHubFlow
Projetos com release-cycle => GitFlow
CD CD
CD
20. AUTOMATIZAÇÃO DE BUILDS
•Todas as aplicações tem build job
associado
Team-City
Build para pull-requests
Build para master
•Build scripts = Gulp
Consistente
Repetível
Fácil de automatizar
CD CD
CD
21. PASSOS DE BUILD
•Veto
•Restore de packages
NPM + NuGet
•Versionamento
•Compilação
•Execução de testes
•Empacotamento
•Publicação de artefactos
CD CD
CD
22. OBSERVABILIDADE
•Deteção e recolha de info de crash
•Logging remoto
Dados ofuscados
Log de erros
Log de tipos de operações
Métricas de utilização
Dashboards e alertas
CD CD
CD
23. INTOUCH ANALYSER
•Analisa os ficheiros resultantes da build
•Upload de ficheiros alterados
Para DLLs e EXEs gerados
=> Hash “Funcional”
Restantes ficheiros
=> Hash dos bytes do ficheiro
CD CD
CD
25. DETEÇÃO DE ALTERAÇÕES – REMOÇÃO
•AssemblyVersion fixa
Major.0.0.0
•Decompilação e remoção de info auto-
gerado do IL
AssemblyFileVersion
AssemblyInformationalVersion
MVID
Timestamp
Checksum
ImageBase
26. DETEÇÃO DE ALTERAÇÕES – INCLUSÃO
•Resources => extração e hash dos
ficheiros concatenados
•XAML => Comparação de BAML
27. INTOUCH DATA SERVICES
•WebApi para metadados
Armazenamento de definição de release
Imutável
Commit-level traceability
Relações entre aplicações
Armazenamento de pré-requisitos das
aplicações
Autenticação para clientes
•Armazenamento para os ficheiros
CD CD
CD
28. INTOUCH CLIENT
•Windows Service
Polling aos Data Services
Download de incremento
Orchestração de instalação e atualização
•Autohealing incorporado
Validação de ficheiros (hash)
Recuperação de instalação
Remoção de lixo
CD CD
CD
40. LIÇÕES DA EXPERIÊNCIA
▪ Validar com spikes e dados as assunções
▪ Planear a história da distribuição em escala e globalização
▪ Requer alteração de hábitos e mindset
▪ Atenção à qualidade e infrastrutura de testes
▪ Definição de linguagem ubíqua
41. Q & A
Obrigado !
WE’RE HIRING!
jose.pereira@faro.com
miguel.alho@faro.com
SW DEV
QA
SW RESEARCH
WWW.FARO.COM > CAREERS