CONTINUOUS DELIVERY PARA
APLICAÇÕES DESKTOP
O case-study FARO
jose.pereira@faro.com
miguel.alho@faro.com
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
O CONTEXTO FARO
O CONTEXTO FARO
O CONTEXTO FARO
O CONTEXTO FARO
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
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
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.
CONTINUOUS DELIVERY 101
Clientes
Repositório Servidor CI Servidor
distribuição
Servidor
Artefactos
Backlog
Logs e Métricas
Crashes
Customer Support
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
O CAMINHO PARA CONTINUOUS
DELIVERY
Clientes
Repositório Servidor CI Servidor
distribuição
Servidor
Artefactos
Backlog
Logs e Métricas
Crashes
Customer Support
CD
CD CD
SOURCE CONTROL
•Mudança para GIT
•Tendência para o “Trunk-based
development”
 Projetos novos => GitHubFlow
 Projetos com release-cycle => GitFlow
CD CD
CD
GITFLOW
GITHUBFLOW
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
PASSOS DE BUILD
•Veto
•Restore de packages
 NPM + NuGet
•Versionamento
•Compilação
•Execução de testes
•Empacotamento
•Publicação de artefactos
CD CD
CD
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
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
DETEÇÃO DE ALTERAÇÕES – HASH “FUNCIONAL”
HASH( cleanILDASM(dll) + getResources(dll) )
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
DETEÇÃO DE ALTERAÇÕES – INCLUSÃO
•Resources => extração e hash dos
ficheiros concatenados
•XAML => Comparação de BAML
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
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
DESAFIOS ENCONTRADOS Continuous Delivery à escala
global
DEPLOYMENT – IMPLEMENTAÇÃO NAÍVE
CD
CD File Storage
CD
push
pull
manifest files
build files
DEPLOYMENT - IMPLEMENTAÇÃO ESCALÁVEL-
NAÍVE
CD
CD
Blob Storage
CD
push
pull
CDN POP
build files
manifest files
PRÓXIMAS ITERAÇÕES Deployments com confiança
DEPLOYMENT – CDN WARMUP
CD
CD
Blob Storage
CD
CDN POP
build files
manifest files
Warmup
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
CONCLUSÕES
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
Q & A
Obrigado !
WE’RE HIRING!
jose.pereira@faro.com
miguel.alho@faro.com
SW DEV
QA
SW RESEARCH
WWW.FARO.COM > CAREERS

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

  • 1.
    CONTINUOUS DELIVERY PARA APLICAÇÕESDESKTOP O case-study FARO jose.pereira@faro.com miguel.alho@faro.com
  • 2.
    AGENDA ▪ O contextoFARO ▪ Revisão de Continuous Delivery (CD) ▪ O caminho para Continuous Delivery ▪ Desafios encontrados ▪ Próximas iterações ▪ Conclusões ▪ Q&A
  • 3.
  • 4.
  • 5.
  • 6.
  • 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.
  • 10.
  • 12.
    Clientes Repositório Servidor CIServidor distribuição Servidor Artefactos Backlog Logs e Métricas Crashes Customer Support
  • 13.
    CHAVES DO CONTINUOUSDELIVERY ▪ 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
  • 14.
    O CAMINHO PARACONTINUOUS DELIVERY
  • 15.
    Clientes Repositório Servidor CIServidor distribuição Servidor Artefactos Backlog Logs e Métricas Crashes Customer Support
  • 16.
  • 17.
    SOURCE CONTROL •Mudança paraGIT •Tendência para o “Trunk-based development”  Projetos novos => GitHubFlow  Projetos com release-cycle => GitFlow CD CD CD
  • 18.
  • 19.
  • 20.
    AUTOMATIZAÇÃO DE BUILDS •Todasas 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 •Restorede packages  NPM + NuGet •Versionamento •Compilação •Execução de testes •Empacotamento •Publicação de artefactos CD CD CD
  • 22.
    OBSERVABILIDADE •Deteção e recolhade 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 osficheiros resultantes da build •Upload de ficheiros alterados  Para DLLs e EXEs gerados => Hash “Funcional”  Restantes ficheiros => Hash dos bytes do ficheiro CD CD CD
  • 24.
    DETEÇÃO DE ALTERAÇÕES– HASH “FUNCIONAL” HASH( cleanILDASM(dll) + getResources(dll) )
  • 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 •WebApipara 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
  • 29.
    DESAFIOS ENCONTRADOS ContinuousDelivery à escala global
  • 30.
    DEPLOYMENT – IMPLEMENTAÇÃONAÍVE CD CD File Storage CD push pull manifest files build files
  • 33.
    DEPLOYMENT - IMPLEMENTAÇÃOESCALÁVEL- NAÍVE CD CD Blob Storage CD push pull CDN POP build files manifest files
  • 35.
  • 37.
    DEPLOYMENT – CDNWARMUP CD CD Blob Storage CD CDN POP build files manifest files Warmup
  • 38.
    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
  • 39.
  • 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