Palestra Hudson Jugday 2009

  • 4,188 views
Uploaded on

Tutorial ministrado por Leandro de Morais Nunes, no JUGDay 2009, promovido pelo RSJUG. Evento realizados em 24/10/2009 em Porto Alegre/RS. …

Tutorial ministrado por Leandro de Morais Nunes, no JUGDay 2009, promovido pelo RSJUG. Evento realizados em 24/10/2009 em Porto Alegre/RS.

http://leandron.wordpress.com

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
4,188
On Slideshare
0
From Embeds
0
Number of Embeds
2

Actions

Shares
Downloads
160
Comments
0
Likes
7

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Integração Contínua com Hudson Leandro de Morais Nunes [email_address] Tutorial apresentado no JUGDay 2009 – Porto Alegre/RS http://jugday.rsjug.org
  • 2. Tópicos
    • Introdução
    • 3. Boas práticas da Integração Contínua (IC)
    • 4. Ferramentas
    • 5. Desenvolvimento do projeto prático
    • 6. Considerações finais
  • 7. #whoami
    • Leandro Nunes
      • Coordenador RSJUG
      • 8. Programador Java (SCJP 5)
      • 9. Formado em Ciência da Computação (PUCRS)
      • 10. Mestrando em Microeletrônica (UFRGS)
      • 11. Blog
        • http://leandron.wordpress.com
  • 12. Introdução
  • 13. Introdução
    • A Integração Contínua compreende um conjunto de boas práticas para manter a equipe atualizada sobre o estado atual do projeto
    • 14. Tenta assegurar que teremos sempre uma versão consolidada e compilável de nosso código, preferencialmente, em um repositório
  • 15. Introdução
    • Imagine um grupo de desenvolvedores...
  • 16. Introdução
    • Imagine também que todos eles estão realizando suas atividades em um repositório de código em comum
    Repositório CVS SVN Mercurial Git ... commits checkouts, updates
  • 17. Introdução
    • Essa situação lhe é familiar ??
    • 18. Como assegurar que em um determinado momento o código do repositório...
      • É confiável ?
      • 19. Compila ?
      • 20. Está testado ?
  • 21. Boas práticas da Integração Contínua
  • 22. Boas práticas da IC
    • Mantenha um único repositório de código
      • Soluções caseiras devem ser evitadas (e.g. Drives de rede compartilhados)
      • 23. Tudo que você precisa para ter um produto a partir de seu código deve estar no repositório!
  • 24. Boas práticas da IC
    • Automatize o build
      • A geração de um produto pode envolver além da compilação, movimentação de arquivos e BDs
      • 25. É importante facilitar e tornar essas tarefas automatizadas e de fácil acesso aos interessados
      • 26. Martin Fowler afirma: “se essas tarefas podem ser automatizadas... então devem ser automatizadas”
  • 27. Boas práticas da IC
    • Faça seu build ser auto-testável
      • Testes automáticos são legais e podem pegar muitos bugs
      • 28. A execução de testes automatizados no processo de build é um passo fortemente recomendado para IC
      • 29. Ferramenta *Unit são ideais para esse tipo de teste
  • 30. Boas práticas da IC
    • Cada um lança suas modificações, todos os dias
      • Desde que elas sejam compiláveis!
      • 31. Objetiva reduzir o tempo entre o desenvolvimento e o teste
      • 32. Reduz o número de pontos a serem revistos na ocorrência de uma falha de build
      • 33. Martin Fowler diz: “O segredo para solucionar um problema de conflito rapidamente, é encontrá-lo rapidamente”
  • 34. Boas práticas da IC
    • Cada commit atualiza o repositório principal, no servidor de integração
      • Sempre que algo é enviado para o repositório, o servidor de integração dispara um processo de build
      • 35. Faz chackout dos fontes atualizados do repositório
      • 36. Efetua o processo de build
  • 37. Boas práticas da IC
    • Mantenha um build rápido
      • Um dos focos da IC é fornecer um feedback rápido
      • 38. De que adianta realizar a integração a cada commit se o build levar 2h para terminar ?
      • 39. Tempo máximo de build recomendado: 10 minutos
      • 40. Build de 2 estágios
        • 1: Compila, executa testes simples e avisa o desenvolvedor do resultado
        • 41. 2: Executa testes demorados e reporta os resultados
  • 42. Boas práticas da IC
    • Tenha uma cópia do ambiente de produção para testes
      • Executar os testes em um ambiente semelhante ao de produção é uma garantia a mais de fidelidade na execução dos testes
      • 43. Esses ambientes podem ser caros!
      • 44. Uma tendência é o uso de sistemas virtualizados para testes automatizados
  • 45. Boas práticas da IC
    • Facilite o acesso ao último executável
      • Para demonstrações
      • 46. Para testes exploratórios
      • 47. Esse executável deve ter passados nos testes unitários para ser considerado um produto válido
      • 48. Defina um lugar comum, que todos possam acessar
      • 49. Automatize a substituição do executável mais atual
  • 50. Boas práticas da IC
    • Todos podem ver o que está acontecendo
      • Integração contínua, acima de tudo, é um exercício de comunicação
      • 51. Podem ser utilizado sistema visuais externos (luzes, displays, …)
      • 52. Informação mais comum que é propagada entre os desenvolvedores:
        • Estado do build da versão principal
  • 53. Boas práticas da IC
    • Automatize a implantação do sistema
      • Consiste na criação de mecanismos automatizados para troca/atualização de versão
        • Em servidores de teste
        • 54. Em produção
      • Reduz o impacto (custo e tempo) da troca de versão em ambientes de produção
      • 55. Aproxima os usuários da equipe de desenvolvimento
      • 56. Considere um rollback automático
  • 57. Ferramentas
  • 58. Ferramentas para IC
    • Automatização de ciclo de vida do projeto
      • Maven 2
        • Gerencia e automatiza projetos Java
        • 59. Baseada em um modelo de convenção sobre configuração
        • 60. Utiliza repositórios para download de ferramentas e plugins comuns
        • 61. Easy-to-use
        • 62. Facilita a tarefa de configuração de ferramentas pois sabe de antemão a localização de seus requisitos
  • 63. Ferramentas para IC
    • Análise estática de código
      • FindBugs
        • Ferramenta open source
        • 64. Busca por padrões de código que sejam potenciais erros
        • 65. Possui centenas de padrões conhecidos
        • 66. Trabalha tanto com o byte code quanto com código-fonte
  • 67. Ferramentas para IC
    • Análise estática de código
      • PMD
        • Semelhante ao FindBugs, procura po padrões de código que potencialmente são falhas de codificação
        • 68. Blocos vazios
        • 69. Variáveis não usadas
        • 70. Uso indevido de String em detrimento ao uso de StringBuffer
        • 71. Códigos com alta Complexidade Ciclomática
  • 72. Ferramentas para IC
    • Análise estática de código
      • CPD
        • É outro software do pacote do PMD
        • 73. Busca por código duplicado (é o acrônimo para Copy and Paste Detector )
        • 74. Pode utilizar uma linguagem intermediária para que a simples troca de nomes de variáveis não o engane
        • 75. Possui algumas alternativas pagas como o Simian (Similarity Analyser)
  • 76. Ferramentas para IC
    • Análise estática de código
      • Checkstyle
        • Verifica padrões de codificação diretamente no código fonte
        • 77. Gera um relatório com todas as violações encontradas
  • 78. Ferramentas para IC
    • Métricas de projeto
      • JavaNCSS
        • Conta o número de classes, métodos, variáveis não comentadas
        • 79. Contabiliza métodos com JavaDoc ( importantíssimo! )
        • 80. Calcula a Complexidade Ciclomática dos métodos
  • 81. Ferramentas para IC
    • Métricas de projeto
      • StatSVN
        • Fornece um Raio-X de toda a evolução de commits em seu repositório
        • 82. Oferece gráficos
        • 83. Desenvolvedor do mês (???), é aquele cara que enviou maior número de linhas para o repositório
  • 84. Ferramentas para IC
    • Testes
      • JUnit Report
        • Apresenta um relatório com todos os testes executados
        • 85. Tempo de execução
        • 86. Resultado da execução dos testes
        • 87. “ Keep the bar green to keep the code clean”
  • 88. Ferramentas para IC
    • Testes
      • Cobertura
        • Responde a pergunta: “Quanto % de meu código é coberto pelos meus testes unitários ?”
        • 89. Ótimo indicador de qualidade
        • 90. Utiliza o JavaNCSS
  • 91. Ferramentas para IC
    • Testes
      • Emma
        • É uma alternativa de ferramenta para cobertura de código fonte através de testes unitários
        • 92. Detecta coberturas parciais de uma linha
        • 93. O usuário pode informar um nível mínimo de cobertura para e será alertado quando esse nível não for atingido
        • 94. Possibilita merge de relatórios de instrumentação
  • 95. Ferramentas para IC
    • Integração Contínua
      • São softwares que automatizam tarefas comuns para realização das disciplinas da Integração Contínua de forma mais amigável
      • 96. Recursos básicos
        • Checkout de sistemas de versionamento (SVN, CVS, Git)
        • 97. Execução de taks de ferramentas de automação de projetos (ANT, Maven)
        • 98. Execução de ferramentas de teste, métricas, verificação estática
        • 99. Ações pós-build (publicação de relatórios, envio de e-mail)
  • 100. Ferramentas para IC
    • Hudson
      • Sistema automatizado para suporte à integração contínua
      • 101. Fácil instalação
      • 102. Integrado às principais ferramentas de IC
      • 103. Integrado aos principais sistemas de versionamento
      • 104. Não utiliza banco de dados
      • 105. Extensível
  • 106. Ferramentas de IC
  • 107. Tópicos
    • Introdução
    • 108. Boas práticas da Integração Contínua (IC)
    • 109. Ferramentas
    • 110. Desenvolvimento do projeto prático
    • 111. Considerações finais
  • 112. Parte 2 Desenvolvimento do Projeto Prático
  • 113. Projeto Prático
    • Objetivo
      • Criar uma aplicação Java e empregar técnicas de integração contínua.
    • Ingredientes
  • 118. Projeto Prático
    • Algumas considerações
      • A criação do repositório SVN em Windows e/ou Linux está no material de apoio
      • 119. Links para downloads das ferramentas também
      • 120. Não fique com dúvidas, pergunte!
  • 121. Projeto Prático
    • Fazendo o download de instalando o Hudson
      • Acesse o site oficial
        • http://hudson.dev.java.net/
      • Faça o download do hudson.war
      • 122. Execute
      • 123. #java -jar hudson.war
  • 124. Projeto Prático
    • Possível passo extra
      • Configurando proxy no Maven
      • 125. Fonte
        • http://maven.apache.org/guides/mini/guide-proxies.html
  • 126. <settings> . <proxies> <proxy> <active> true </active> <protocol> http </protocol> <host> proxy.somewhere.com </host> <port> 8080 </port> <username> proxyuser </username> <password> somepassword </password> <nonProxyHosts> www.google.com </nonProxyHosts> </proxy> </proxies> . </settings> ~/.m2/settings.xml
  • 127. Projeto Prático
    • Criando nosso projeto maven com NetBeans
    • 128. Configurando o repositório
    • 129. Implementando algum código
    • 130. Adicionando suporte à integração contínua
    • 131. Instalando plugins
    • 132. Publicando os resultados
    • 133. Fazendo poll periódico no SVN
  • 134. Considerações Finais
  • 135. Considerações Finais
    • Adotar Integração Contínua pode trazer muitos benefícios à seu projeto
      • Consequentemente à sua equipe
    • Sua equipe estará constantemente atualizada sobre o estado do projeto
    • 136. Não nos livra do surgimento de bugs mas reduz consideravelmente o tempo gasto para encontrá-los e corrigí-los
  • 137. Considerações Finais
    • Os processos de Integração Contínua são completamente independentes de linguagem
    • 138. Implantar integração contínua em um projeto não ocorre da noite para o dia.
      • Consiste também em uma mudança cultural
      • 139. Considere ir mudando gradativamente a forma como as coisas são feitas no seu projeto
  • 140. Onde buscar mais informações ?
    • Mailing lists usuários Hudson
      • [email_address]
    • Lista do RSJUG
      • Vamos discutir integração contínua!
      • 141. [email_address]
  • 142. Links Interessantes
    • Artigo de Referência
      • http://martinfowler.com/articles/continuousIntegration.html
    • Material de Apoio desse tutorial
      • http://bit.ly/4rANk4
    • Hudson
      • http://hudson.dev.java.net/
    • Meu Blog
      • http://leandron.wordpress.com
  • 143. Integração Contínua com Hudson Obrigado! Leandro de Morais Nunes [email_address] Tutorial apresentado no JUGDay 2009 – Porto Alegre/RS http://jugday.rsjug.org