Integração	
  Con-nua	
  
    SAPO Session 2010.09.15
       Desenvolvimento
Desenvolvimento	
  
O processo de desenvolvimento

•  1 developer              •  + developers e/
   – Develop                   ou + módulos
   – Compile                    – Develop
   – Test                       – Integrate
   – Deploy                     – Compile
                                – Test
                                – Deploy
Desenvolvimento	
  
Aumento da complexidade e riscos associados

•    Ausência de uma versão deployable
•    Descoberta tardia de problemas
•    Pouca transparência
•    Código de má qualidade
Desenvolvimento	
  
O que é Qualidade?

•  Característica de superioridade
•  Percepção
•  Subjectivo

•  Nope! É mensurável!!!
   –  Legibilidade
   –  Segurança
   –  Performance
   –  …
Desenvolvimento	
  
Mitigação de riscos




             What if ?...
Desenvolvimento	
  
Automatização
Integração	
  Con-nua	
  
It’s a good thing…


       Qualidade


                                com CI




                                sem CI

                     Complexidade
Integração	
  Con-nua	
  
O Tao de CI!

•    Commits frequentes
•    Não submeter código “partido”
•    Builds “partidos” são prioritários
•    Test-driven development
•    100% sucesso em todos os testes
Integração	
  Con-nua	
  
Modelo

                                   user	
  1	
                user	
  2	
              user	
  n	
  

                                        Feedback	
  
 dev	
  1	
  


                                                   Poll	
  
 dev	
  2	
  
                Commits	
     SCM	
                                    CI	
  Server	
  


 dev	
  n	
                                                     Build	
  
                                                                	
  .	
  Tests	
  
                                                                	
  .	
  Package	
  
                                                                	
  .	
  Deploy	
  
Integração	
  Con-nua	
  
Vantagens

•  Reduz risco
  –  early detection
  –  mensurabilidade de software health
  –  redução de assunções
•  Automatiza processos
  –  sempre executado
  –  nenhum passo é esquecido
•  Deployable software
Integração	
  Con-nua	
  
Vantagens

•  Visão clara do projecto
  –  métricas
  –  suporte à decisão
•  Confiança
  –  Build de integração
  –  Menor resistência à mudança
  –  A more confident programmer
     == a happier programmer
        == a better product
Integração	
  Con-nua	
  
Desvantagens (alegadamente…)

•    Overhead para manter o sistema
•    Demasiadas mudanças iniciais
•    Custos adicionais
•    Test-driven development
     –  Esta é compreensível… 
Integração	
  Con-nua	
  
Continuous Compilation vs. Continuous Integration

•  Compilação Contínua
   –  Polling SCM
   –  Compila código
   –  Resultados
Integração	
  Con-nua	
  
Continuous Compilation vs. Continuous Integration

•  Integração Contínua
   –  Polling SCM               –  Métricas relacionadas
   –  Compila código               com as builds
   –  Executa testes            –  Gera deployable
                                   packages
   –  Resultados de
      •    Code duplication     –  etc…
      •    Coding standards
      •    Code coverage
      •    etc…
   –  Gera documentação
Ferramentas	
  
Continuous Integration e PHP
Ferramentas	
  
Continuous Integration e PHP
Ferramentas	
  
Continuous Integration e PHP
Ferramentas	
  
Continuous Integration e PHP
Ferramentas	
  
Continuous Integration e PHP
Ferramentas	
  
Continuous Integration e PHP
Ferramentas	
  
Continuous Integration e PHP
Ferramentas	
  
Continuous Integration e PHP
Ferramentas	
  
Continuous Integration e PHP
Ferramentas	
  
Continuous Integration e PHP
Ferramentas	
  
Continuous Integration e PHP
Ferramentas	
  
Apache Ant

•    Build tool
•    OS agnostic
•    Tabs e espaços não são problema… 
•    Utiliza classes Java – facilmente extensível
•    Configuração XML
Ferramentas	
  
Apache Ant

•    Targets
•    Tasks
•    Dependências
•    Camada de abstracção
     –  <exec>
Ferramentas	
  
Apache Ant - exemplos
Ferramentas	
  
Apache Ant - exemplos
Ferramentas	
  
Apache Ant - exemplos
Ferramentas	
  
Apache Ant - exemplos
Ferramentas	
  
Outras ferramentas essenciais

•  PHPUnit (com PMD – Project Mess
   Detector)
•  PEAR::PHP_CodeSniffer
   –  Utilizando o [adaptado] Zend Coding
      Standard… 
•  Xdebug
•  phpDocumentor
Ferramentas	
  
Deployment no SAPO Fotos

•  Dois níveis de integração no servidor CI
  –  1º nível: desenvolvimento diário
  –  2º nível: integração de desenvolvimentos
     maduros
•  Geração de release packages (2º nível)
  –  sapofotos-release-build.168.tar.gz
•  Colocação manual nas várias máquinas
  –  scp
Ferramentas	
  
Deployment no SAPO Fotos

•  Quatro comandos apenas:
  –  # tar -xzf sapofotos-release-build.168.tar.gz
  –  # cd sapofotos-release-build.168
  –  # ant build
  –  # ant rollout
Ferramentas	
  
Deployment no SAPO Fotos

•  Para versão debug (antes de fazer rollout)
  –  # ant build-debug
•  Após rollout, if sh*t happens…
  –  # ant rollback
Ferramentas	
  
Deployment no SAPO Fotos
Fim	
  
      Questões?
Pedro Mata-Mouros Fonseca
    twitter.com/matamouros
    matamouros@co.sapo.pt

SAPO Session: Continuous Integration