• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Palestra Hudson Jugday 2009
 

Palestra Hudson Jugday 2009

on

  • 5,633 views

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

Statistics

Views

Total Views
5,633
Views on SlideShare
3,580
Embed Views
2,053

Actions

Likes
7
Downloads
158
Comments
0

11 Embeds 2,053

http://leandron.wordpress.com 1116
http://leandronunes.org 650
http://www.jornaljava.com 205
http://busk.com 56
http://www.slideshare.net 12
url_unknown 7
http://webcache.googleusercontent.com 2
http://www.linkedin.com 2
http://feeds.feedburner.com 1
http://127.0.0.1 1
http://web.archive.org 1
More...

Accessibility

Categories

Upload Details

Uploaded via as OpenOffice

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel

Palestra Hudson Jugday 2009 Palestra Hudson Jugday 2009 Presentation Transcript

  • Integração Contínua com Hudson Leandro de Morais Nunes [email_address] Tutorial apresentado no JUGDay 2009 – Porto Alegre/RS http://jugday.rsjug.org
  • Tópicos
    • Introdução
    • Boas práticas da Integração Contínua (IC)
    • Ferramentas
    • Desenvolvimento do projeto prático
    • Considerações finais
  • #whoami
    • Leandro Nunes
      • Coordenador RSJUG
      • Programador Java (SCJP 5)
      • Formado em Ciência da Computação (PUCRS)
      • Mestrando em Microeletrônica (UFRGS)
      • Blog
        • http://leandron.wordpress.com
  • Introdução
  • 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
    • Tenta assegurar que teremos sempre uma versão consolidada e compilável de nosso código, preferencialmente, em um repositório
  • Introdução
    • Imagine um grupo de desenvolvedores...
  • 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
  • Introdução
    • Essa situação lhe é familiar ??
    • Como assegurar que em um determinado momento o código do repositório...
      • É confiável ?
      • Compila ?
      • Está testado ?
  • Boas práticas da Integração Contínua
  • 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)
      • Tudo que você precisa para ter um produto a partir de seu código deve estar no repositório!
  • 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
      • É 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”
  • Boas práticas da IC
    • Faça seu build ser auto-testável
      • Testes automáticos são legais e podem pegar muitos bugs
      • 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
  • Boas práticas da IC
    • Cada um lança suas modificações, todos os dias
      • 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”
  • 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
      • Faz chackout dos fontes atualizados do repositório
      • Efetua o processo de build
  • Boas práticas da IC
    • Mantenha um build rápido
      • 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
        • 1: Compila, executa testes simples e avisa o desenvolvedor do resultado
        • 2: Executa testes demorados e reporta os resultados
  • 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
      • Esses ambientes podem ser caros!
      • Uma tendência é o uso de sistemas virtualizados para testes automatizados
  • Boas práticas da IC
    • Facilite o acesso ao último executável
      • Para demonstrações
      • Para testes exploratórios
      • Esse executável deve ter passados nos testes unitários para ser considerado um produto válido
      • Defina um lugar comum, que todos possam acessar
      • Automatize a substituição do executável mais atual
  • 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
      • Podem ser utilizado sistema visuais externos (luzes, displays, …)
      • Informação mais comum que é propagada entre os desenvolvedores:
        • Estado do build da versão principal
  • 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
        • Em produção
      • Reduz o impacto (custo e tempo) da troca de versão em ambientes de produção
      • Aproxima os usuários da equipe de desenvolvimento
      • Considere um rollback automático
  • Ferramentas
  • Ferramentas para IC
    • Automatização de ciclo de vida do projeto
      • Maven 2
        • Gerencia e automatiza projetos Java
        • Baseada em um modelo de convenção sobre configuração
        • Utiliza repositórios para download de ferramentas e plugins comuns
        • Easy-to-use
        • Facilita a tarefa de configuração de ferramentas pois sabe de antemão a localização de seus requisitos
  • Ferramentas para IC
    • Análise estática de código
      • FindBugs
        • Ferramenta open source
        • Busca por padrões de código que sejam potenciais erros
        • Possui centenas de padrões conhecidos
        • Trabalha tanto com o byte code quanto com código-fonte
  • 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
        • Blocos vazios
        • Variáveis não usadas
        • Uso indevido de String em detrimento ao uso de StringBuffer
        • Códigos com alta Complexidade Ciclomática
  • Ferramentas para IC
    • Análise estática de código
      • CPD
        • É outro software do pacote do PMD
        • Busca por código duplicado (é o acrônimo para Copy and Paste Detector )
        • Pode utilizar uma linguagem intermediária para que a simples troca de nomes de variáveis não o engane
        • Possui algumas alternativas pagas como o Simian (Similarity Analyser)
  • Ferramentas para IC
    • Análise estática de código
      • Checkstyle
        • Verifica padrões de codificação diretamente no código fonte
        • Gera um relatório com todas as violações encontradas
  • Ferramentas para IC
    • Métricas de projeto
      • JavaNCSS
        • Conta o número de classes, métodos, variáveis não comentadas
        • Contabiliza métodos com JavaDoc ( importantíssimo! )
        • Calcula a Complexidade Ciclomática dos métodos
  • Ferramentas para IC
    • Métricas de projeto
      • StatSVN
        • Fornece um Raio-X de toda a evolução de commits em seu repositório
        • Oferece gráficos
        • Desenvolvedor do mês (???), é aquele cara que enviou maior número de linhas para o repositório
  • Ferramentas para IC
    • Testes
      • JUnit Report
        • Apresenta um relatório com todos os testes executados
        • Tempo de execução
        • Resultado da execução dos testes
        • “ Keep the bar green to keep the code clean”
  • Ferramentas para IC
    • Testes
      • Cobertura
        • Responde a pergunta: “Quanto % de meu código é coberto pelos meus testes unitários ?”
        • Ótimo indicador de qualidade
        • Utiliza o JavaNCSS
  • Ferramentas para IC
    • Testes
      • Emma
        • É uma alternativa de ferramenta para cobertura de código fonte através de testes unitários
        • Detecta coberturas parciais de uma linha
        • O usuário pode informar um nível mínimo de cobertura para e será alertado quando esse nível não for atingido
        • Possibilita merge de relatórios de instrumentação
  • 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
      • Recursos básicos
        • Checkout de sistemas de versionamento (SVN, CVS, Git)
        • Execução de taks de ferramentas de automação de projetos (ANT, Maven)
        • Execução de ferramentas de teste, métricas, verificação estática
        • Ações pós-build (publicação de relatórios, envio de e-mail)
  • Ferramentas para IC
    • Hudson
      • Sistema automatizado para suporte à integração contínua
      • Fácil instalação
      • Integrado às principais ferramentas de IC
      • Integrado aos principais sistemas de versionamento
      • Não utiliza banco de dados
      • Extensível
  • Ferramentas de IC
  • Tópicos
    • Introdução
    • Boas práticas da Integração Contínua (IC)
    • Ferramentas
    • Desenvolvimento do projeto prático
    • Considerações finais
  • Parte 2 Desenvolvimento do Projeto Prático
  • Projeto Prático
    • Objetivo
      • Criar uma aplicação Java e empregar técnicas de integração contínua.
    • Ingredientes
      • 01 SVN
      • 01 Hudson
      • 01 Maven
      • 01 NetBeans
      • Plugins à gosto
  • Projeto Prático
    • Algumas considerações
      • A criação do repositório SVN em Windows e/ou Linux está no material de apoio
      • Links para downloads das ferramentas também
      • Não fique com dúvidas, pergunte!
  • 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
      • Execute
      • #java -jar hudson.war
  • Projeto Prático
    • Possível passo extra
      • Configurando proxy no Maven
      • Fonte
        • http://maven.apache.org/guides/mini/guide-proxies.html
  • <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
  • Projeto Prático
    • Criando nosso projeto maven com NetBeans
    • Configurando o repositório
    • Implementando algum código
    • Adicionando suporte à integração contínua
    • Instalando plugins
    • Publicando os resultados
    • Fazendo poll periódico no SVN
  • Considerações Finais
  • 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
    • Não nos livra do surgimento de bugs mas reduz consideravelmente o tempo gasto para encontrá-los e corrigí-los
  • Considerações Finais
    • Os processos de Integração Contínua são completamente independentes de linguagem
    • Implantar integração contínua em um projeto não ocorre da noite para o dia.
      • Consiste também em uma mudança cultural
      • Considere ir mudando gradativamente a forma como as coisas são feitas no seu projeto
  • Onde buscar mais informações ?
    • Mailing lists usuários Hudson
      • [email_address]
    • Lista do RSJUG
      • Vamos discutir integração contínua!
      • [email_address]
  • 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
  • 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