Successfully reported this slideshow.

Continuous Delivery for Desktop Applications: a case study - Miguel Alho & José Pereira Carvalho

1

Share

1 of 41
1 of 41

Continuous Delivery for Desktop Applications: a case study - Miguel Alho & José Pereira Carvalho

1

Share

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.

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.

More Related Content

Related Books

Free with a 14 day trial from Scribd

See all

Related Audiobooks

Free with a 14 day trial from Scribd

See all

Continuous Delivery for Desktop Applications: a case study - Miguel Alho & José Pereira Carvalho

  1. 1. CONTINUOUS DELIVERY PARA APLICAÇÕES DESKTOP O case-study FARO jose.pereira@faro.com miguel.alho@faro.com
  2. 2. AGENDA ▪ O contexto FARO ▪ Revisão de Continuous Delivery (CD) ▪ O caminho para Continuous Delivery ▪ Desafios encontrados ▪ Próximas iterações ▪ Conclusões ▪ Q&A
  3. 3. O CONTEXTO FARO
  4. 4. O CONTEXTO FARO
  5. 5. O CONTEXTO FARO
  6. 6. O CONTEXTO FARO
  7. 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. 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. 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.
  10. 10. CONTINUOUS DELIVERY 101
  11. 11. Clientes Repositório Servidor CI Servidor distribuição Servidor Artefactos Backlog Logs e Métricas Crashes Customer Support
  12. 12. 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
  13. 13. O CAMINHO PARA CONTINUOUS DELIVERY
  14. 14. Clientes Repositório Servidor CI Servidor distribuição Servidor Artefactos Backlog Logs e Métricas Crashes Customer Support
  15. 15. CD CD CD
  16. 16. SOURCE CONTROL •Mudança para GIT •Tendência para o “Trunk-based development”  Projetos novos => GitHubFlow  Projetos com release-cycle => GitFlow CD CD CD
  17. 17. GITFLOW
  18. 18. GITHUBFLOW
  19. 19. 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
  20. 20. PASSOS DE BUILD •Veto •Restore de packages  NPM + NuGet •Versionamento •Compilação •Execução de testes •Empacotamento •Publicação de artefactos CD CD CD
  21. 21. 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
  22. 22. 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
  23. 23. DETEÇÃO DE ALTERAÇÕES – HASH “FUNCIONAL” HASH( cleanILDASM(dll) + getResources(dll) )
  24. 24. 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
  25. 25. DETEÇÃO DE ALTERAÇÕES – INCLUSÃO •Resources => extração e hash dos ficheiros concatenados •XAML => Comparação de BAML
  26. 26. 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
  27. 27. 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
  28. 28. DESAFIOS ENCONTRADOS Continuous Delivery à escala global
  29. 29. DEPLOYMENT – IMPLEMENTAÇÃO NAÍVE CD CD File Storage CD push pull manifest files build files
  30. 30. DEPLOYMENT - IMPLEMENTAÇÃO ESCALÁVEL- NAÍVE CD CD Blob Storage CD push pull CDN POP build files manifest files
  31. 31. PRÓXIMAS ITERAÇÕES Deployments com confiança
  32. 32. DEPLOYMENT – CDN WARMUP CD CD Blob Storage CD CDN POP build files manifest files Warmup
  33. 33. CONTINUOUS DEPLOYMENT •Deployment ≠ Release •Feature Toggles controlam disponibilização •Canarying permite ativar gradualmente funcionalidades •Rollback automático  Baseado em métricas  Blue/green deployment no cliente CD CDCD
  34. 34. CONCLUSÕES
  35. 35. 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
  36. 36. Q & A Obrigado ! WE’RE HIRING! jose.pereira@faro.com miguel.alho@faro.com SW DEV QA SW RESEARCH WWW.FARO.COM > CAREERS

×