SlideShare ist ein Scribd-Unternehmen logo
1 von 22
Downloaden Sie, um offline zu lesen
J820

Integração Contínua
com CVS, CruiseControl,

AntHill e Gump

Cruise
Control
Helder da Rocha (helder@acm.org)

argonavis.com.br
Integração contínua
Um dos requisitos para implementar a integração contínua é
ter um sistema onde se possa obter as fontes mais recentes
Ferramentas SCM (Software Configuration Management)

argonavis.com.br

Essenciais em qualquer projeto sério (grande ou pequeno)
No mínimo, mantêm histórico do processo de desenvolvimento
Existem soluções comerciais e open-source: CVS, Perforce,
ClearCase, SourceSafe, StarTeam, Merant PVCS, Continuus, etc.

Esta seção apresentará um breve tutorial da mais popular
ferramenta SCM open-source: CVS
Serão apresentadas três ferramentas de integração contínua,
que combinam o Ant, JUnit e um SCM

ThoughtWorks CruiseControl (suporta Ant, JUnit, vários SCM)
UrbanCode AntHill (suporta Ant, JUnit, CVS*)
Jakarta Gump (suporta Ant, JUnit, CVS)

* Oferece interface para suporte de outros SCM

2
CVS: o que é?
Concurrent Versions System
Sistema de controle de versões open-source
Baseado em um repositório central onde usuários podem fazer
atualizações (commit) e downloads (checkout)

Repositório CVS

argonavis.com.br

Mantém uma cópia de todos os arquivos e diretórios sob controle
de versões (usa formato RCS* - arquivo com extensão ",v" guarda
todo histórico de modificações
Permite a recuperação de quaisquer versões anteriormente
armazenadas de arquivos texto

Diretório de trabalho (cópia de trabalho)
Criado por cada desenvolvedor
Contém cópia local dos arquivos baixados do repositório através de
uma operação de checkout
Cada pasta e subpasta contém uma pasta especial "CVS"
* Revision Control System

3
CVS: como funciona
Desenvolvedores baixam última versão do repositório
Trabalham em cópia local de módulo. Ao terminar, fazem upload
(commit) e alterações são mescladas em nova revisão
Cópia de trabalho
Commit só é possível se não houver conflito
Cópia de trabalho
do Desenvolvedor A

A

do Desenvolvedor B

módulo

B
2. checkout

1. checkout

1.1

4. alteração

argonavis.com.br

A

3. alteração

1.2

5. commit

Cenário sem
conflitos

6. commit
1.3

repositório em
três instantes

B

revisão
tempo

4
CVS: repositório e operações
Repositório CVS é acessado por um cliente que precisa saber
Caminho ou endereço da raiz do repositório
Método de acesso que será utilizado
Dados para autenticação no servidor

Essas informações podem ser guardadas em uma variável de
ambiente do sistema CVSROOT
set CVSROOT=:local:/usr/cvs/root
set CVSROOT=:pserver:helder:pz@192.168.1.1:/usr/cvs/root

Uma vez definido o CVSROOT, pode-se
criar uma cópia de trabalho de um módulo do repositório :
argonavis.com.br

> cvs checkout hellocvs

sincronizar a cópia local com o repositório:
> cd hellocvs
> cvs update

gravar alterações feitas localmente no repositório
> cvs commit -m "Novo método sayBye() em Hello.java"

5
Revisão, tag e branch
Número de revisão (controle por arquivo)
Número gerado pelo sistema para identificar cada
modificação feita em um arquivo
Começa em 1.1.1.1, seguido por 1.2. Depois tem o segundo
número incrementado a cada commit

Tag (controle por módulo)
Usado para rotular uma versão do módulo com um nome
Comando: cvs tag nome_do_release
argonavis.com.br

Branch (abre sub-projeto)

Comando: cvs tag -b nome_do_branch
1.2.1.1
Usam dígitos extras no número de revisão
Podem depois ser incorporados
1.1
1.2
1.3
ao projeto principal: cvs update -r nome_do_branch

1.4

6
Desenvolvimento típico com CVS
A. Inicialização do ambiente
Fazer checkout de módulo em diretório de trabalho

argonavis.com.br

B. Um ciclo de desenvolvimento (geralmente curto)
Fazer alterações em código-fonte, criar novos arquivos e
adicioná-los ao CVS, remover arquivos
Compilar, montar localmente e rodar testes
Fazer update para incorporar eventuais mudanças feitas
por outros desenvolvedores
Resolver eventuais conflitos
Compilar, montar e rodar testes de novo
Cometer todas as mudanças: commit

C. Lançamento: após vários ciclos
Rotular o lançamento com um tag

7
Adição e remoção de arquivos
Principais comandos usados para adicionar e remover
arquivos do repositório

argonavis.com.br

> cvs add nome_do_arquivo
> cvs remove nome_do_arquivo
Adiciona ou remove um novo arquivo ao repositório (a mudança só
será efetivada após um commit)
> cvs import contexto/modulo identif start
Importa uma árvore de arquivos e diretórios para o repositório
Semelhante a checkout mas não cria diretórios CVS (ou seja, não
cria cópia de trabalho, apenas versão para distribuição)

Arquivos binários
É preciso rotular arquivos binários com um flag especial antes de
importar arquivos ou adicioná-lo ao repositório
> cvs add -kb imagem.gif
Se isto não for feito, dados serão perdidos!

8
Conflitos
Ocorrem quando dois usuários alteram mesma área do código
Primeiro que fizer commit grava as alterações
Outro usuário só pode cometer suas mudanças depois que atualizar
sua cópia de trabalho e resolver o conflito
B
2. checkout
A

1. checkout

1.1

4. alteração

argonavis.com.br

A

3. alteração

6. commit
falhou!

1.2

5. commit

B

B

7. update

Cenário com
conflito

repositório em
três instantes

1.3

8. alteração
9. commit

B

9
Resolução de conflitos
Revisão 1.27 do repositório contém:
public class HelloWorld {
public String sayHello() {
return "Hello world...";
}
}

Cópia de trabalho (não sincronizada) contém:
public class HelloWorld {
public String sayHello() {
return "Hello, world!";
}
}

argonavis.com.br

Depois do update, cópia de trabalho contém merge:
public class HelloWorld {
public String sayHello() {
<<<<<<< HelloWorld.java
return "Hello, world!";
=======
return "Hello world...";
>>>>>>> 1.27
}
}

É preciso fazer as alterações e
remover os <<< === >>> antes
de tentar novo commit

10
Cliente gráfico: WinCVS

argonavis.com.br

Interface gráfica para uso de CVS em ambiente Windows
Projeto open-source: www.cvsgui.org

11
CVS com Ant
Ant suporta CVS através do elemento <cvs>
Ant também suporta outros sistemas de controle de versões
Deve haver um cliente CVS acessível por linha de comando

Exemplos

argonavis.com.br

<target name="cvs-commit" depends="build" >
<cvs command="commit" />
<cvs command="tag ${cvs.release.tag}" />
</target>
<target name="cvs-export" depends="build" >
<cvs command="export -d ${export.base} -r
${cvs.release.tag}
${project.name}"
dest="${basedir}/.."/>
</target>

12
CruiseControl
Ferramenta para integração contínua e automática
Ideal para integrar software desenvolvido em equipe
Baseada na ferramenta Ant, através da qual opera sistema de
controle de revisões (CVS, ClearCase, Perforce, StarTeam, ou outro)
Artigo "Continuous Integration" [8] (Fowler / Foemmel)

argonavis.com.br

Roda em um servidor onde periodicamente...
... monta toda a aplicação
... roda todos os testes
... gera relatórios sobre os resultados em XML (enviados por e-mail
para os "committers" e publicados em página na Web)

Viabiliza prática de "lançamentos pequenos" do XP
Repositório sempre contém a última versão estável
13
CruiseControl: funcionamento
prog

cvs commit
1. Usuário envia
alteração
2. CC compara
sua cópia com
repositório

Usuário

3. Se diferente
faz checkout

Repositório
CVS
prog

cvs checkout

diff

CruiseServlet

argonavis.com.br

sendmail
GET

cruisecontrol.xsl

<xml>
<xml>
<xml>
<xml>

logNNNN.xml

CruiseControl

prog

4. Monta aplicação e roda testes
5. Se sucesso, incrementa contador
6. Gera relatório, envia emails

14
argonavis.com.br

Relatórios gerados a cada build

15
AntHill
Ferramenta para integração contínua
Aplicação Web que roda builds agendados
Suporte SCM é limitado a CVS (usuário pode escrever driver para
outro SCM se desejar)
Publica artefatos: código-fonte, documentação, links para
distribuição, saída do build

argonavis.com.br

Vantagens sobre CruiseControl
Tudo é feito via interface Web
Configuração é muito mais simples
Suporta múltiplos projetos
Não requer alterações no build.xml
Rotula versões (tag) automaticamente

Desvantagens
Suporta apenas CVS
Não gera automaticamente relatórios de testes JUnit
16
AntHill: funcionamento
Cada projeto está associado a
um agendamento
Na hora de realizar o build,
AntHill consulta o repositório.
Se houver novos arquivos, build
ocorre
Em caso de sucesso
Arquivo com número da versão é
incrementado

argonavis.com.br

Em caso de falha
Participantes do projeto são
notificados por email

Relatórios são gerados em
ambos os casos
17
Gump
Ferramenta de integração contínua do Projeto Jakarta
Realiza a integração não só da aplicação mas, opcionalmente, de
todas as suas dependências (compila e monta cada uma delas)
Fornece acesso a JavaDocs, referências cruzadas (interdependências) e JARs dos projetos montados
Instalação e configuração não são triviais

Gump separa as configurações em arquivos XML distintos que
podem ser reutilizados

argonavis.com.br

project

Define os JARs que um projeto exporta (que servirão
de dependências para outros projetos)
module
Coleção de projetos guardaros em um repositório
repository Informação sobre como acessar os repositórios CVS
profile
Coleção de projetos e repositórios
workspace Configurações globais, sistema, etc.
18
Gump: funcionamento
Duas etapas

argonavis.com.br

Geração de scripts
Execução dos scripts

Geração cria scripts
usando configuração do
workspace
Execução (que pode ser
automatizada) usa os
outros arquivos para
montar as dependências e
gerar relatórios
Relatórios, acessíveis via
Web mostram conflitos
Pode enviar e-mail em
caso de falha

19
Conclusões: ferramentas de integração contínua
A tabela abaixo apresenta uma breve comparação entre as
ferramentas de integração contínua analisadas
CruiseControl

AntHill

Gump

Instalação e configuração

Média dificuldade

Fácil

Difícil

Requer alterações em buildfiles

Sim

Não

Não

Monta dependências

Não

Não

Sim

Controla SCM automaticamente

argonavis.com.br

Recurso

Não. Comandos têm que
ser incluidos no buildfile

Sim

Sim

SCMs suportados

CVS, VSS, ClearCase, MKS,
Perforce, PVCS, StarTeam

CVS

CVS

Suporte a múltiplos projetos
simultâneos

Requer nova instância da
aplicação executando e
outro buildservlet.war

Requer adição de
nova definição na
interface Web

Requer a configuração de arquivos
XML

Fonte: Erik Hatcher, "Java Development with Ant" [14]

20
Fontes
Documentação do CruiseControl.
cruisecontrol.sourceforge.net
[2] Erik Hatcher. Java Development with Ant. Manning,
2003

argonavis.com.br

[1]

21
Curso J820
Produtividade e Qualidade em Java:
Ferramentas e Metodologias
Revisão 1.1

© 2002, 2003, Helder da Rocha
(helder@acm.org)

argonavis.com.br

Weitere ähnliche Inhalte

Was ist angesagt?

Curso de CVS - Parte 1 - Introdução
Curso de CVS - Parte 1 - IntroduçãoCurso de CVS - Parte 1 - Introdução
Curso de CVS - Parte 1 - Introdução
Marden Neubert
 
SVN: Controle de revisões com subversion - Thiago Rafael Becker
SVN: Controle de revisões com subversion - Thiago Rafael BeckerSVN: Controle de revisões com subversion - Thiago Rafael Becker
SVN: Controle de revisões com subversion - Thiago Rafael Becker
Tchelinux
 
Re pensando-virtualização-através-linux containers
Re pensando-virtualização-através-linux containersRe pensando-virtualização-através-linux containers
Re pensando-virtualização-através-linux containers
Francisco Gonçalves
 
Sistemas de controle de versão
Sistemas de controle de versãoSistemas de controle de versão
Sistemas de controle de versão
ocfelipe
 

Was ist angesagt? (20)

Versionamento de Software com Subversion - Wanderson Henrique Camargo Rosa
Versionamento de Software com Subversion - Wanderson Henrique Camargo RosaVersionamento de Software com Subversion - Wanderson Henrique Camargo Rosa
Versionamento de Software com Subversion - Wanderson Henrique Camargo Rosa
 
SVN - Subversion: Guia de sobrevivência do usuário
SVN - Subversion: Guia de sobrevivência  do usuárioSVN - Subversion: Guia de sobrevivência  do usuário
SVN - Subversion: Guia de sobrevivência do usuário
 
Aula maven
Aula   mavenAula   maven
Aula maven
 
Controlando Projetos com Netbeans e Subversion
Controlando Projetos com Netbeans e SubversionControlando Projetos com Netbeans e Subversion
Controlando Projetos com Netbeans e Subversion
 
Curso de CVS - Parte 1 - Introdução
Curso de CVS - Parte 1 - IntroduçãoCurso de CVS - Parte 1 - Introdução
Curso de CVS - Parte 1 - Introdução
 
SVN: Controle de revisões com subversion - Thiago Rafael Becker
SVN: Controle de revisões com subversion - Thiago Rafael BeckerSVN: Controle de revisões com subversion - Thiago Rafael Becker
SVN: Controle de revisões com subversion - Thiago Rafael Becker
 
Introdução ao maven
Introdução ao mavenIntrodução ao maven
Introdução ao maven
 
SVN - Subversion
SVN - SubversionSVN - Subversion
SVN - Subversion
 
Plano do projeto de software SIGEM - Sistema de gestão de materiais
Plano do projeto de software SIGEM - Sistema de gestão de materiaisPlano do projeto de software SIGEM - Sistema de gestão de materiais
Plano do projeto de software SIGEM - Sistema de gestão de materiais
 
Maven
MavenMaven
Maven
 
Maven na prática
Maven na práticaMaven na prática
Maven na prática
 
The twelve factor apps and openruko
The twelve factor apps and openrukoThe twelve factor apps and openruko
The twelve factor apps and openruko
 
Paralelize seus testes web e mobile para ter feedbacks mais rápidos
Paralelize seus testes web e mobile para ter feedbacks mais rápidosParalelize seus testes web e mobile para ter feedbacks mais rápidos
Paralelize seus testes web e mobile para ter feedbacks mais rápidos
 
Maven Versioning Strategy (VR)
Maven Versioning Strategy (VR)Maven Versioning Strategy (VR)
Maven Versioning Strategy (VR)
 
Re pensando-virtualização-através-linux containers
Re pensando-virtualização-através-linux containersRe pensando-virtualização-através-linux containers
Re pensando-virtualização-através-linux containers
 
GIT Básico
GIT BásicoGIT Básico
GIT Básico
 
Sistemas de controle de versão
Sistemas de controle de versãoSistemas de controle de versão
Sistemas de controle de versão
 
Maven introdução Muito Rápida
Maven introdução Muito RápidaMaven introdução Muito Rápida
Maven introdução Muito Rápida
 
Apresentação maven
Apresentação mavenApresentação maven
Apresentação maven
 
Testes em aplicações JEE: Montando sua infra de testes automatizados
Testes em aplicações JEE: Montando sua infra de testes automatizadosTestes em aplicações JEE: Montando sua infra de testes automatizados
Testes em aplicações JEE: Montando sua infra de testes automatizados
 

Andere mochten auch (8)

TDC2008 Integração Contínua
TDC2008 Integração ContínuaTDC2008 Integração Contínua
TDC2008 Integração Contínua
 
Integração Contínua - Maré de Agilidade
Integração Contínua - Maré de AgilidadeIntegração Contínua - Maré de Agilidade
Integração Contínua - Maré de Agilidade
 
Integração Contínua
Integração ContínuaIntegração Contínua
Integração Contínua
 
Integracao Continua em projetos .NET
Integracao Continua em projetos .NETIntegracao Continua em projetos .NET
Integracao Continua em projetos .NET
 
Da Integração à Entrega Contínua
Da Integração à Entrega ContínuaDa Integração à Entrega Contínua
Da Integração à Entrega Contínua
 
Integração Continua - Jenkins
Integração Continua - JenkinsIntegração Continua - Jenkins
Integração Continua - Jenkins
 
Integração Contínua
Integração ContínuaIntegração Contínua
Integração Contínua
 
Integração contínua em PHP com Jenkins
Integração contínua em PHP com JenkinsIntegração contínua em PHP com Jenkins
Integração contínua em PHP com Jenkins
 

Ähnlich wie Integração Contínua com CVS, CruiseControl, AntHill, Gump

CVS - Slides Parte 1 - Introdução
CVS - Slides Parte 1 - IntroduçãoCVS - Slides Parte 1 - Introdução
CVS - Slides Parte 1 - Introdução
Marden Neubert
 
Gerência de Configuração
Gerência de ConfiguraçãoGerência de Configuração
Gerência de Configuração
Wagner Zaparoli
 
CVS - Slides Parte 3 - Básico
CVS - Slides Parte 3 - BásicoCVS - Slides Parte 3 - Básico
CVS - Slides Parte 3 - Básico
Marden Neubert
 
CVS - Slides Parte 0 - Sobre o Curso
CVS - Slides Parte 0 - Sobre o CursoCVS - Slides Parte 0 - Sobre o Curso
CVS - Slides Parte 0 - Sobre o Curso
Marden Neubert
 
Controle de versão
Controle de versãoControle de versão
Controle de versão
Zé Pereira
 

Ähnlich wie Integração Contínua com CVS, CruiseControl, AntHill, Gump (20)

Academia do Arquiteto - Implantando A.L.M. em uma semana!
Academia do Arquiteto - Implantando A.L.M. em uma semana!Academia do Arquiteto - Implantando A.L.M. em uma semana!
Academia do Arquiteto - Implantando A.L.M. em uma semana!
 
Svn - grupo de estudos sol7
Svn - grupo de estudos sol7Svn - grupo de estudos sol7
Svn - grupo de estudos sol7
 
Integracao Continua com CruiseControl
Integracao Continua com CruiseControlIntegracao Continua com CruiseControl
Integracao Continua com CruiseControl
 
CVS - Slides Parte 1 - Introdução
CVS - Slides Parte 1 - IntroduçãoCVS - Slides Parte 1 - Introdução
CVS - Slides Parte 1 - Introdução
 
Gerência de Configuração
Gerência de ConfiguraçãoGerência de Configuração
Gerência de Configuração
 
DevOps - melhores práticas e integração contínua
DevOps - melhores práticas e integração contínuaDevOps - melhores práticas e integração contínua
DevOps - melhores práticas e integração contínua
 
Alm open source
Alm open sourceAlm open source
Alm open source
 
Automação de Testes: Ferramentas e Aplicação com Integração Contínua
Automação de Testes: Ferramentas e Aplicação com Integração ContínuaAutomação de Testes: Ferramentas e Aplicação com Integração Contínua
Automação de Testes: Ferramentas e Aplicação com Integração Contínua
 
CVS - Slides Parte 3 - Básico
CVS - Slides Parte 3 - BásicoCVS - Slides Parte 3 - Básico
CVS - Slides Parte 3 - Básico
 
ALM Open Source Ponta a Ponta - Minicurso Globalcode MC-122
ALM Open Source Ponta a Ponta - Minicurso Globalcode MC-122ALM Open Source Ponta a Ponta - Minicurso Globalcode MC-122
ALM Open Source Ponta a Ponta - Minicurso Globalcode MC-122
 
GCS - Aula 07 - Sistemas de Controle de Versões
GCS - Aula 07 - Sistemas de Controle de VersõesGCS - Aula 07 - Sistemas de Controle de Versões
GCS - Aula 07 - Sistemas de Controle de Versões
 
Gerência de configuração ágil
Gerência de configuração ágilGerência de configuração ágil
Gerência de configuração ágil
 
MiniCurso de Git e Github - UNIFG PIE
MiniCurso de Git e Github - UNIFG PIEMiniCurso de Git e Github - UNIFG PIE
MiniCurso de Git e Github - UNIFG PIE
 
Quasar Framework - Front end de alto desempenho
Quasar Framework - Front end de alto desempenhoQuasar Framework - Front end de alto desempenho
Quasar Framework - Front end de alto desempenho
 
Minicurso de Cakephp
Minicurso de CakephpMinicurso de Cakephp
Minicurso de Cakephp
 
CVS - Slides Parte 0 - Sobre o Curso
CVS - Slides Parte 0 - Sobre o CursoCVS - Slides Parte 0 - Sobre o Curso
CVS - Slides Parte 0 - Sobre o Curso
 
Integração Contínua
Integração ContínuaIntegração Contínua
Integração Contínua
 
DevOps na AWS: Construindo Sistemas para Entregas Rápidas
DevOps na AWS: Construindo Sistemas para Entregas RápidasDevOps na AWS: Construindo Sistemas para Entregas Rápidas
DevOps na AWS: Construindo Sistemas para Entregas Rápidas
 
Controle de versão
Controle de versãoControle de versão
Controle de versão
 
Curso de CVS - Lab 2
Curso de CVS - Lab 2Curso de CVS - Lab 2
Curso de CVS - Lab 2
 

Mehr von Denis L Presciliano

Como construir aplicações gráficas e applets
Como construir aplicações gráficas e appletsComo construir aplicações gráficas e applets
Como construir aplicações gráficas e applets
Denis L Presciliano
 
Coleções Propriedade, Resources e Strings
Coleções Propriedade, Resources e StringsColeções Propriedade, Resources e Strings
Coleções Propriedade, Resources e Strings
Denis L Presciliano
 
Funcamentos de Programação Concorrente
Funcamentos de Programação ConcorrenteFuncamentos de Programação Concorrente
Funcamentos de Programação Concorrente
Denis L Presciliano
 
Reuso com Herança e Composição
Reuso com Herança e ComposiçãoReuso com Herança e Composição
Reuso com Herança e Composição
Denis L Presciliano
 
Gerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache AntGerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache Ant
Denis L Presciliano
 
Tipos, literais, operadoes e controle de fluxo
Tipos, literais, operadoes e controle de fluxoTipos, literais, operadoes e controle de fluxo
Tipos, literais, operadoes e controle de fluxo
Denis L Presciliano
 
Como usar a documentação da API Java 2
Como usar a documentação da API Java 2Como usar a documentação da API Java 2
Como usar a documentação da API Java 2
Denis L Presciliano
 
Configuração do ambiente JEdit + Ant
Configuração do ambiente JEdit + AntConfiguração do ambiente JEdit + Ant
Configuração do ambiente JEdit + Ant
Denis L Presciliano
 
Programação Orientada a objetos em Java
Programação Orientada a objetos em JavaProgramação Orientada a objetos em Java
Programação Orientada a objetos em Java
Denis L Presciliano
 

Mehr von Denis L Presciliano (20)

Funmentos de Objetos Remotos
Funmentos de Objetos RemotosFunmentos de Objetos Remotos
Funmentos de Objetos Remotos
 
Fundamentos de JDBC
Fundamentos de JDBCFundamentos de JDBC
Fundamentos de JDBC
 
Como construir aplicações gráficas e applets
Como construir aplicações gráficas e appletsComo construir aplicações gráficas e applets
Como construir aplicações gráficas e applets
 
Classes internas
Classes internasClasses internas
Classes internas
 
Entrada e Saída
Entrada e SaídaEntrada e Saída
Entrada e Saída
 
Coleções Propriedade, Resources e Strings
Coleções Propriedade, Resources e StringsColeções Propriedade, Resources e Strings
Coleções Propriedade, Resources e Strings
 
Funcamentos de Programação Concorrente
Funcamentos de Programação ConcorrenteFuncamentos de Programação Concorrente
Funcamentos de Programação Concorrente
 
Testes de Unidade com JUnit
Testes de Unidade com JUnitTestes de Unidade com JUnit
Testes de Unidade com JUnit
 
Erros, exceções e asserções
Erros, exceções e asserçõesErros, exceções e asserções
Erros, exceções e asserções
 
Interfaces e Porlimosfismo
Interfaces e PorlimosfismoInterfaces e Porlimosfismo
Interfaces e Porlimosfismo
 
Reuso com Herança e Composição
Reuso com Herança e ComposiçãoReuso com Herança e Composição
Reuso com Herança e Composição
 
Gerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache AntGerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache Ant
 
Pacotes e Encapsulamento
Pacotes e EncapsulamentoPacotes e Encapsulamento
Pacotes e Encapsulamento
 
Como criar classes e objetos
Como criar classes e objetosComo criar classes e objetos
Como criar classes e objetos
 
Tipos, literais, operadoes e controle de fluxo
Tipos, literais, operadoes e controle de fluxoTipos, literais, operadoes e controle de fluxo
Tipos, literais, operadoes e controle de fluxo
 
Como usar a documentação da API Java 2
Como usar a documentação da API Java 2Como usar a documentação da API Java 2
Como usar a documentação da API Java 2
 
Configuração do ambiente JEdit + Ant
Configuração do ambiente JEdit + AntConfiguração do ambiente JEdit + Ant
Configuração do ambiente JEdit + Ant
 
Programação Orientada a objetos em Java
Programação Orientada a objetos em JavaProgramação Orientada a objetos em Java
Programação Orientada a objetos em Java
 
Introdução a tecnologia Java
Introdução a tecnologia JavaIntrodução a tecnologia Java
Introdução a tecnologia Java
 
Fundamentos de Sockets
Fundamentos de SocketsFundamentos de Sockets
Fundamentos de Sockets
 

Integração Contínua com CVS, CruiseControl, AntHill, Gump

  • 1. J820 Integração Contínua com CVS, CruiseControl, AntHill e Gump Cruise Control Helder da Rocha (helder@acm.org) argonavis.com.br
  • 2. Integração contínua Um dos requisitos para implementar a integração contínua é ter um sistema onde se possa obter as fontes mais recentes Ferramentas SCM (Software Configuration Management) argonavis.com.br Essenciais em qualquer projeto sério (grande ou pequeno) No mínimo, mantêm histórico do processo de desenvolvimento Existem soluções comerciais e open-source: CVS, Perforce, ClearCase, SourceSafe, StarTeam, Merant PVCS, Continuus, etc. Esta seção apresentará um breve tutorial da mais popular ferramenta SCM open-source: CVS Serão apresentadas três ferramentas de integração contínua, que combinam o Ant, JUnit e um SCM ThoughtWorks CruiseControl (suporta Ant, JUnit, vários SCM) UrbanCode AntHill (suporta Ant, JUnit, CVS*) Jakarta Gump (suporta Ant, JUnit, CVS) * Oferece interface para suporte de outros SCM 2
  • 3. CVS: o que é? Concurrent Versions System Sistema de controle de versões open-source Baseado em um repositório central onde usuários podem fazer atualizações (commit) e downloads (checkout) Repositório CVS argonavis.com.br Mantém uma cópia de todos os arquivos e diretórios sob controle de versões (usa formato RCS* - arquivo com extensão ",v" guarda todo histórico de modificações Permite a recuperação de quaisquer versões anteriormente armazenadas de arquivos texto Diretório de trabalho (cópia de trabalho) Criado por cada desenvolvedor Contém cópia local dos arquivos baixados do repositório através de uma operação de checkout Cada pasta e subpasta contém uma pasta especial "CVS" * Revision Control System 3
  • 4. CVS: como funciona Desenvolvedores baixam última versão do repositório Trabalham em cópia local de módulo. Ao terminar, fazem upload (commit) e alterações são mescladas em nova revisão Cópia de trabalho Commit só é possível se não houver conflito Cópia de trabalho do Desenvolvedor A A do Desenvolvedor B módulo B 2. checkout 1. checkout 1.1 4. alteração argonavis.com.br A 3. alteração 1.2 5. commit Cenário sem conflitos 6. commit 1.3 repositório em três instantes B revisão tempo 4
  • 5. CVS: repositório e operações Repositório CVS é acessado por um cliente que precisa saber Caminho ou endereço da raiz do repositório Método de acesso que será utilizado Dados para autenticação no servidor Essas informações podem ser guardadas em uma variável de ambiente do sistema CVSROOT set CVSROOT=:local:/usr/cvs/root set CVSROOT=:pserver:helder:pz@192.168.1.1:/usr/cvs/root Uma vez definido o CVSROOT, pode-se criar uma cópia de trabalho de um módulo do repositório : argonavis.com.br > cvs checkout hellocvs sincronizar a cópia local com o repositório: > cd hellocvs > cvs update gravar alterações feitas localmente no repositório > cvs commit -m "Novo método sayBye() em Hello.java" 5
  • 6. Revisão, tag e branch Número de revisão (controle por arquivo) Número gerado pelo sistema para identificar cada modificação feita em um arquivo Começa em 1.1.1.1, seguido por 1.2. Depois tem o segundo número incrementado a cada commit Tag (controle por módulo) Usado para rotular uma versão do módulo com um nome Comando: cvs tag nome_do_release argonavis.com.br Branch (abre sub-projeto) Comando: cvs tag -b nome_do_branch 1.2.1.1 Usam dígitos extras no número de revisão Podem depois ser incorporados 1.1 1.2 1.3 ao projeto principal: cvs update -r nome_do_branch 1.4 6
  • 7. Desenvolvimento típico com CVS A. Inicialização do ambiente Fazer checkout de módulo em diretório de trabalho argonavis.com.br B. Um ciclo de desenvolvimento (geralmente curto) Fazer alterações em código-fonte, criar novos arquivos e adicioná-los ao CVS, remover arquivos Compilar, montar localmente e rodar testes Fazer update para incorporar eventuais mudanças feitas por outros desenvolvedores Resolver eventuais conflitos Compilar, montar e rodar testes de novo Cometer todas as mudanças: commit C. Lançamento: após vários ciclos Rotular o lançamento com um tag 7
  • 8. Adição e remoção de arquivos Principais comandos usados para adicionar e remover arquivos do repositório argonavis.com.br > cvs add nome_do_arquivo > cvs remove nome_do_arquivo Adiciona ou remove um novo arquivo ao repositório (a mudança só será efetivada após um commit) > cvs import contexto/modulo identif start Importa uma árvore de arquivos e diretórios para o repositório Semelhante a checkout mas não cria diretórios CVS (ou seja, não cria cópia de trabalho, apenas versão para distribuição) Arquivos binários É preciso rotular arquivos binários com um flag especial antes de importar arquivos ou adicioná-lo ao repositório > cvs add -kb imagem.gif Se isto não for feito, dados serão perdidos! 8
  • 9. Conflitos Ocorrem quando dois usuários alteram mesma área do código Primeiro que fizer commit grava as alterações Outro usuário só pode cometer suas mudanças depois que atualizar sua cópia de trabalho e resolver o conflito B 2. checkout A 1. checkout 1.1 4. alteração argonavis.com.br A 3. alteração 6. commit falhou! 1.2 5. commit B B 7. update Cenário com conflito repositório em três instantes 1.3 8. alteração 9. commit B 9
  • 10. Resolução de conflitos Revisão 1.27 do repositório contém: public class HelloWorld { public String sayHello() { return "Hello world..."; } } Cópia de trabalho (não sincronizada) contém: public class HelloWorld { public String sayHello() { return "Hello, world!"; } } argonavis.com.br Depois do update, cópia de trabalho contém merge: public class HelloWorld { public String sayHello() { <<<<<<< HelloWorld.java return "Hello, world!"; ======= return "Hello world..."; >>>>>>> 1.27 } } É preciso fazer as alterações e remover os <<< === >>> antes de tentar novo commit 10
  • 11. Cliente gráfico: WinCVS argonavis.com.br Interface gráfica para uso de CVS em ambiente Windows Projeto open-source: www.cvsgui.org 11
  • 12. CVS com Ant Ant suporta CVS através do elemento <cvs> Ant também suporta outros sistemas de controle de versões Deve haver um cliente CVS acessível por linha de comando Exemplos argonavis.com.br <target name="cvs-commit" depends="build" > <cvs command="commit" /> <cvs command="tag ${cvs.release.tag}" /> </target> <target name="cvs-export" depends="build" > <cvs command="export -d ${export.base} -r ${cvs.release.tag} ${project.name}" dest="${basedir}/.."/> </target> 12
  • 13. CruiseControl Ferramenta para integração contínua e automática Ideal para integrar software desenvolvido em equipe Baseada na ferramenta Ant, através da qual opera sistema de controle de revisões (CVS, ClearCase, Perforce, StarTeam, ou outro) Artigo "Continuous Integration" [8] (Fowler / Foemmel) argonavis.com.br Roda em um servidor onde periodicamente... ... monta toda a aplicação ... roda todos os testes ... gera relatórios sobre os resultados em XML (enviados por e-mail para os "committers" e publicados em página na Web) Viabiliza prática de "lançamentos pequenos" do XP Repositório sempre contém a última versão estável 13
  • 14. CruiseControl: funcionamento prog cvs commit 1. Usuário envia alteração 2. CC compara sua cópia com repositório Usuário 3. Se diferente faz checkout Repositório CVS prog cvs checkout diff CruiseServlet argonavis.com.br sendmail GET cruisecontrol.xsl <xml> <xml> <xml> <xml> logNNNN.xml CruiseControl prog 4. Monta aplicação e roda testes 5. Se sucesso, incrementa contador 6. Gera relatório, envia emails 14
  • 16. AntHill Ferramenta para integração contínua Aplicação Web que roda builds agendados Suporte SCM é limitado a CVS (usuário pode escrever driver para outro SCM se desejar) Publica artefatos: código-fonte, documentação, links para distribuição, saída do build argonavis.com.br Vantagens sobre CruiseControl Tudo é feito via interface Web Configuração é muito mais simples Suporta múltiplos projetos Não requer alterações no build.xml Rotula versões (tag) automaticamente Desvantagens Suporta apenas CVS Não gera automaticamente relatórios de testes JUnit 16
  • 17. AntHill: funcionamento Cada projeto está associado a um agendamento Na hora de realizar o build, AntHill consulta o repositório. Se houver novos arquivos, build ocorre Em caso de sucesso Arquivo com número da versão é incrementado argonavis.com.br Em caso de falha Participantes do projeto são notificados por email Relatórios são gerados em ambos os casos 17
  • 18. Gump Ferramenta de integração contínua do Projeto Jakarta Realiza a integração não só da aplicação mas, opcionalmente, de todas as suas dependências (compila e monta cada uma delas) Fornece acesso a JavaDocs, referências cruzadas (interdependências) e JARs dos projetos montados Instalação e configuração não são triviais Gump separa as configurações em arquivos XML distintos que podem ser reutilizados argonavis.com.br project Define os JARs que um projeto exporta (que servirão de dependências para outros projetos) module Coleção de projetos guardaros em um repositório repository Informação sobre como acessar os repositórios CVS profile Coleção de projetos e repositórios workspace Configurações globais, sistema, etc. 18
  • 19. Gump: funcionamento Duas etapas argonavis.com.br Geração de scripts Execução dos scripts Geração cria scripts usando configuração do workspace Execução (que pode ser automatizada) usa os outros arquivos para montar as dependências e gerar relatórios Relatórios, acessíveis via Web mostram conflitos Pode enviar e-mail em caso de falha 19
  • 20. Conclusões: ferramentas de integração contínua A tabela abaixo apresenta uma breve comparação entre as ferramentas de integração contínua analisadas CruiseControl AntHill Gump Instalação e configuração Média dificuldade Fácil Difícil Requer alterações em buildfiles Sim Não Não Monta dependências Não Não Sim Controla SCM automaticamente argonavis.com.br Recurso Não. Comandos têm que ser incluidos no buildfile Sim Sim SCMs suportados CVS, VSS, ClearCase, MKS, Perforce, PVCS, StarTeam CVS CVS Suporte a múltiplos projetos simultâneos Requer nova instância da aplicação executando e outro buildservlet.war Requer adição de nova definição na interface Web Requer a configuração de arquivos XML Fonte: Erik Hatcher, "Java Development with Ant" [14] 20
  • 21. Fontes Documentação do CruiseControl. cruisecontrol.sourceforge.net [2] Erik Hatcher. Java Development with Ant. Manning, 2003 argonavis.com.br [1] 21
  • 22. Curso J820 Produtividade e Qualidade em Java: Ferramentas e Metodologias Revisão 1.1 © 2002, 2003, Helder da Rocha (helder@acm.org) argonavis.com.br