Integração Contínua com  Hudson Leandro de Morais Nunes [email_address] Tutorial apresentado no JUGDay 2009 – Porto Alegre...
Tópicos <ul><li>Introdução
Boas práticas da Integração Contínua (IC)
Ferramentas
Desenvolvimento do projeto prático
Considerações finais </li></ul>
#whoami <ul><li>Leandro Nunes </li><ul><li>Coordenador RSJUG
Programador Java (SCJP 5)
Formado em Ciência da Computação (PUCRS)
Mestrando em Microeletrônica (UFRGS)
Blog </li><ul><li>http://leandron.wordpress.com   </li></ul></ul></ul>
Introdução
Introdução <ul><li>A Integração Contínua compreende um conjunto de  boas práticas  para manter a equipe atualizada sobre o...
Tenta assegurar que teremos sempre uma versão consolidada e compilável de nosso código, preferencialmente, em um  repositó...
Introdução <ul><li>Imagine um grupo de desenvolvedores... </li></ul>
Introdução <ul><li>Imagine também que todos eles estão realizando suas atividades em um repositório de código em comum </l...
Introdução <ul><li>Essa situação lhe é familiar ??
Como assegurar que em um determinado momento o código do repositório... </li><ul><li>É confiável ?
Compila ?
Está testado ? </li></ul></ul>
Boas práticas da Integração Contínua
Boas práticas da IC <ul><li>Mantenha um único repositório de código </li><ul><li>Soluções caseiras devem ser evitadas (e.g...
Tudo que você precisa para ter um produto a partir de seu código deve estar no repositório! </li></ul></ul>
Boas práticas da IC <ul><li>Automatize o build </li><ul><li>A geração de um produto pode envolver além da compilação, movi...
É importante facilitar e tornar essas tarefas automatizadas e de fácil acesso aos interessados
Martin Fowler afirma:  “se essas tarefas  podem  ser automatizadas... então  devem  ser automatizadas” </li></ul></ul>
Boas práticas da IC <ul><li>Faça seu build ser  auto-testável </li><ul><li>Testes automáticos são legais e podem pegar mui...
A execução de testes automatizados no processo de build é um passo fortemente recomendado para IC
Ferramenta *Unit são ideais para esse tipo de teste </li></ul></ul>
Boas práticas da IC <ul><li>Cada um lança suas modificações,  todos os dias </li><ul><li>Desde que elas sejam compiláveis!
Objetiva reduzir o tempo entre o desenvolvimento e o teste
Reduz o número de pontos a serem revistos na ocorrência de uma falha de build
Martin Fowler diz:  “O segredo para  solucionar  um problema de conflito rapidamente, é  encontrá-lo  rapidamente” </li></...
Boas práticas da IC <ul><li>Cada commit atualiza o repositório principal, no servidor de integração </li><ul><li>Sempre qu...
Faz chackout dos fontes atualizados do repositório
Efetua o processo de build </li></ul></ul>
Boas práticas da IC <ul><li>Mantenha um build rápido </li><ul><li>Um dos focos da IC é fornecer um feedback rápido
De que adianta realizar a integração a cada commit se o build levar 2h para terminar ?
Tempo  máximo  de build recomendado:  10 minutos
Build de 2 estágios </li><ul><li>1: Compila, executa testes simples e avisa o desenvolvedor do resultado
2: Executa testes demorados e reporta os resultados </li></ul></ul></ul>
Boas práticas da IC <ul><li>Tenha uma cópia do ambiente de produção para testes </li><ul><li>Executar os testes em um ambi...
Esses ambientes podem ser caros!
Uma tendência é o uso de sistemas virtualizados para testes automatizados </li></ul></ul>
Boas práticas da IC <ul><li>Facilite o acesso ao último executável </li><ul><li>Para demonstrações
Para testes exploratórios
Esse executável deve ter passados nos testes unitários para ser considerado um produto válido
Upcoming SlideShare
Loading in...5
×

Palestra Hudson Jugday 2009

4,260

Published on

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

Palestra Hudson Jugday 2009

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

    Clipping is a handy way to collect important slides you want to go back to later.

×