Você está na página 1de 91

Gerncia de Configurao

Conjunto de atividades de apoio que permite a


absoro controlada das mudanas inerentes ao
desenvolvimento de software, mantendo a
estabilidade na evoluo do projeto

Controle de Verso: gerenciar diferentes verses no


desenvolvimento de um documento qualquer

Controle de Mudana: procedimentos pelos quais as mudanas


dos itens de configurao so propostas, avaliadas, aceitas e aplicadas.
Oferece servios para identificar, rastrear, analisar e controlar as mudanas nos
itens de configurao.

ntegrao Contnua: as mudanas no projeto so construdas,


testadas e relatadas to logo quanto possvel depois de serem introduzidas.

Ferramentas GC
Tipo Livre Comercial
Controle de Verso
Subversion, CVS, Aegis,
Arch
ClearCase, StarTeam,
Perforce, Visual Source
Safe (VSS)
Controle de Mudana
Trac, Mantis, Bugzilla,
Scarab
JRA, FogBUGZ,
CaliberRM, ClearQuest,
Perforce
Integrao Contnua
Scons, Bitten, Ant,
Maven, Cruise Control,
Gump, TinderBox
AntHill Pro, FinalBuilder,
BuildForge

Controle de Verso
a espinha dorsal de toda a gerncia de
configurao, apoiando as atividades de controle
de mudana e integrao contnua

dentificao, armazenamento e gerenciamento dos itens


de configurao e de suas verses durante todo o ciclo de
vida do software;

Histrico de todas as alteraes efetuadas nos itens de


configurao;

Criao de rtulos e ramificaes no projeto;

Recuperao de uma configurao em um determinado


momento desejado do tempo.

Subversion
Ferramenta livre de controle de verso criada
pela CollabNet com a inteno de substituir o
CVS (Concurrent Version System)

Caractersticas

Mantm a maior parte das funcionalidades do CVS

Controle de Diretrios, renomeaes e Meta-Dados

Operaes atmicas de commit

Opes de acesso ao repositrio

Arquivos Binrios e de Texto Tratados


Consistentemente

Ramificaes e Rotulaes em Tempo Constante



Comparao
Funcionalidade VSS CVS SVN
Commit Atmico
SM
Renomeaes e cpias de arquivos e diretrios
Parcial Parcial SM
Rastreamento de Fuses (Merge)
N/ Parcial
Permisses de Repositrio
Parcial Parcial SM
Documentao Disponvel
Parcial SM SM
Portabilidade
SM SM
Open Source
SM SM
nterfaces Grficas
SM SM SM
Suporta Grande Repositrio
SM SM

Arquitetura

Componentes

svn: cliente em linha de comando

svnversion: relata o estado de uma cpia de trabalho

svnlook: ferramenta para inspecionar diretamente um repositrio SVN

svnadmin: ferramenta para criar, reparar e reparar um repositrio SVN

mod_dav_svn: plugin do apache responsvel por disponibilizar o


repositrio em uma rede

svnserve: servidor standalone responsvel por disponibilizar o repositrio


em uma rede

svnsync: espelhamento incremental de um repositrio em outro na rede



Formas de Acesso
Protocolo Descrio
file:// Acesso direto ao repositrio (no disco local)
http:// Acesso pelo apache atravs do protocolo WebDAV
https:// O mesmo que http:// mas com encriptao SSL
svn:// Acesso ao servidor svnserve
svn+ssh:// O mesmo que svn:// mas em um tnel SSH

Opes do servidor
Caracterstica Apache +
mod_dav_svn
svnserve svnserve+ssh
Autenticao HTTP(S) basic auth,
X.509, LDAP, NTLM,
ou outro mecanismo
suportado pelo apache
CRAM-MD5 SSH
Contas de usurios Arquivo de usurios Arquivo de usurios Conta do sistema
Autorizao Permisso r/w para o
repositrio inteiro ou
por caminho
Permisso r/w para
o repositrio inteiro
ou por caminho
Permisso r/w para o
repositrio inteiro
Encriptao SSL (opcional) nenhuma Tnel SSH
Logging Log do apache a cada
requisio
nenhum nenhum

Opes do servidor
Caracterstica Apache +
mod_dav_svn
svnserve svnserve+ssh
nteroperabilidade Usado parcialmente
por outros clientes
WebDAV
Apenas clientes svn Apenas clientes svn
Web Suporte nativo limitado
e atravs de
programas de terceiros
atravs de programas
de terceiros
atravs de programas
de terceiros
Velocidade lento rpido rpido
Configurao inicial Complexa Simples Mdio

Clientes SVN
Nome SO Integrao
Subclipse JRE Eclipse
Subcommander Todos GU, Standalone
Subversive JRE Eclipse
TortoiseSVN Windows Windows Shell (Explorer)
WebSVN Todos web-based

Repositrio
Armazena informaes
na forma de uma rvore
de sistema de arquivos.

Problema a ser evitado

Travar-Modificar-Destravar

Copiar-Modificar-Fundir

Copiar-Modificar-Fundir (Cont)
Gerenciamento Configurao
Gerenciamento Configurao
Gerenciamento Configurao
Mudanas
Reviso
Codeline
Tag (marcao)
branch
merge
Gerenciamento Configurao
/trunk
Corporativo
/trunk
SAGEN
Gerenciamento Configurao
/trunk
Mudanas
Gerenciamento Configurao
/trunk
Mudanas Mudanas
Gerenciamento Configurao
/trunk
Mudanas
Label
1.0
/1.x
branch
Mudanas

CONAB
A CONAB adotou o subversion como
ferramenta de controle de verso por ser um
software livre, possuir melhorias em relao
ao CVS, ter uma boa documentao e
possuir uma grande comunidade.

nstalao

Comando para instalao:


apt-get install apache su!"ersion li!apache-s"n

Estrutura de diretrios:

backup: armazena os dumps antes de serem enviados


para oservidor de backup

permissoes: armazena o arquivo de permisses (authz)

repositorios: contm os repositrios

script: scripts para backup, criao de repositrios, etc.

trac: projetos do trac



nstalao

Verso 1.6:

/etc/apt/sources.list
deb http://ppa.launchpad.net/anders-kaseorg/subversion-1.6/
ubuntu jaunty main
deb-src http://ppa.launchpad.net/anders-kaseorg/subversion-
1.6/ubuntu jaunty main

nstala chaves
# apt-key adv --keyserver keyserver.ubuntu.com --recv-keys
413576CB
# apt-get update

nstala subversion
#apt-get install subversion

Apache
<VirtualHost *>
ServerAdmin webmaster@localhost
ServerName svn.conab.gov.br
ErrorLog /var/log/apache2/svn-error.log
LogLevel warn
CustomLog /var/log/apache2/svn-access.log combined
ServerSignature On
#$ocation %& #$ocation %&
D'V s"n D'V s"n
SVNParentPath %home%s"n%repositorios SVNParentPath %home%s"n%repositorios
'uth()pe *asic 'uth()pe *asic
'uthName +SVN 'uthentication+ 'uthName +SVN 'uthentication+
'uth*asicPro"ider ldap 'uth*asicPro"ider ldap
Order 'llo,-Den) Order 'llo,-Den)
'llo, .rom 'll 'llo, .rom 'll
'uth$D'P/0$ 'uth$D'P/0$
+ldap1%%ldap2cona!2go"2!r%ou3usuarios-dc3matri4-dc3cona!-dc3go"-dc3! +ldap1%%ldap2cona!2go"2!r%ou3usuarios-dc3matri4-dc3cona!-dc3go"-dc3!
r5uid+ r5uid+
'uth4$D'P'uthoritati"e o.. 'uth4$D'P'uthoritati"e o..
'uth4SVN'ccessFile %home%s"n%permissoes%auth4 'uth4SVN'ccessFile %home%s"n%permissoes%auth4
0e6uire "alid-user 0e6uire "alid-user
#%$ocation& #%$ocation&
</VirtualHost>
<Location />
DAV svn
SVNParentPath /home/svn/repositorios
AuthType Basic
AuthName "SVN Authentication"
AuthBasicProvider ldap
Order Allow,Deny
Allow from All
AuthLDAPURL
"ldap://ldap.conab.gov.br/ou=usuarios,dc=matriz,dc=c
onab,dc=gov,dc=br?uid"
AuthzLDAPAuthoritative off
AuthzSVNAccessFile /home/svn/permissoes/authz
Require valid-user
</Location>
/etc/apache2/sites-available/svn

Apache
<Location />
DAV svn
SVNParentPath /home/svn/repositorios
AuthType Basic
AuthName "Subversion Repository"
AuthUserFile
/home/svn/permissoes/autenticacao.passwd
AuthzSVNAccessFile
/home/svn/permissoes/autorizacao.authz
Require valid-user
</Location>
<Location /svn/myproject>
DAV svn
SVNPath /home/svn/myproject
AuthType Basic
AuthName "myproject subversion
repository"
AuthUserFile /etc/subversion/passwd
<LimitExcept GET PROPFND
OPTONS REPORT>
Require valid-user
</LimitExcept>
</Location>

Permisses

%home%s"n%permissoes%auth4
[groups]
DESENVOLVEDOR = pedro.costa
[/branches]
* = r
[/tags]
* = r
[/trunk]
* = r
[teste:/branches]
pedro.costa = rw
[teste:/tags]
pedro.costa =
[teste:/trunk]
@DESENVOLVEDOR = rw

Manuteno

Criar backup (dump):


$ svnadmin dump /path/to/repos > repos-dumpfile
* Dumped revision 0.
* Dumped revision 1.
* Dumped revision 2.
* Dumped revision 3.

Restaurar backup:
$ svnadmin load /path/to/newrepo < repos-dumpfile
<<< Started new txn, based on original revision 1
* adding path : A ... done.
* adding path : A/B ... done.
.
------- Committed new rev 1 (loaded from original rev 1) >>>

Manuteno
for REPOSTORO in $REPOSTOROS
do
#Revisao Corrente
CURR_REVSON=`/usr/local/bin/svnlook youngest /var/svn/$REPOSTORO`
#GRAVA A ULTMA REVSAO DE CADA REPOSTORO
echo "$CURR_REVSON" > /var/svn/backup/lastrevision/$REPOSTORO.txt
#Faz o Backup de cada repositorio
/usr/local/bin/svnadmin dump /var/svn/$REPOSTORO | /bin/gzip > /var/svn/backup/svnBK-$REPOSTORO-$dia-$mes-$ano.dump.gz
echo FAZENDO BACKUP DE: $REPOSTORO NA REVSAO: $CURR_REVSON . ARQUVO: svnBK-$REPOSTORO-$dia-$mes-$ano.dump.gz
# Se o arquivo existir e o seu Conteudo nao for vazio, transmite via smb
if [ ! -z svnBK-$REPOSTORO-$dia-$mes-$ano.dump.gz ]
then
echo TRASNMTNDO svnBK-$REPOSTORO-$dia-$mes-$ano.dump.gz ...
#Remove o backup de 1 dia anterior
smbclient //dfbsa10a/svn -U=$USER_SMB%$PASSWD_SMB -c "del svnBK-$REPOSTORO-$Odia-$Omes-$Oano.dump.gz" 2> /dev/null
smbclient //dfbsa10a/svn -U=$USER_SMB%$PASSWD_SMB -c "put svnBK-$REPOSTORO-$dia-$mes-$ano.dump.gz" 2> /dev/null
#Remove o backup de 1 dia anterior
#smbclient //gesin56/backup_svn -U=$USER_SMB%$PASSWD_SMB -c "del svnBK-$REPOSTORO-$Odia-$Omes-$Oano.dump.gz" 2> /dev/null
#smbclient //gesin56/backup_svn -U=$USER_SMB%$PASSWD_SMB -c "put svnBK-$REPOSTORO-$dia-$mes-$ano.dump.gz" 2> /dev/null
echo REMOVENDO ARQUVO ENVADO: svnBK-$REPOSTORO-$dia-$mes-$ano.dump.gz
#Remove o backup atual que foi tramitido via smb
rm -f /var/svn/backup/svnBK-$REPOSTORO-$dia-$mes-$ano.dump.gz 2> /dev/null
fi
done

Ferramentas

O subversion possui vrias ferramentas que


podem auxiliar na configurao, manuteno e
gerenciamento de repositrios
http://subversion.tigris.org/tools_contrib.html

Suafe

Subversion User Authorization File Editor

http://code.google.com/p/suafe/

Facilita a edio do arquivo de permisses,


possibilitando a criao de usurios, grupos,
repositrios e permisses de acesso

Suafe

Suafe

Suafe

AutomatizaSVN

Soluo desenvolvida pela CONAB

Baseada em ANT e SVNKit

Facilita a criao de branches e tags

Altera as verses dentro dos arquivos

http://svn.conab.gov.br/GCM/trunk/AutomatizarSVN

AutomatizaSVN

ConabSvnUtil.java
...
DAVRepositoryFactory.setup();
SVNURL url = SVNURL.parseURDecoded(repositoryURL + projeto + baselineDestino);
SVNRepository repository = SVNRepositoryFactory.create(url);
SVNAuthenticationManager authManager =
SVNWCUtil.createDefaultAuthenticationManager(usuario, senha);
repository.setAuthenticationManager(authManager);
long latestRevision = repository.getLatestRevision();
...
SVNEditor editor = repository.getCommitEditor("Criando copia de " + absoluteSrcPath + "
(Revisao: " + revisao + ") para: " + dstDir, null);
try {
SVNCommitnfo commitnfo = copyDir(editor, absoluteSrcPath, dstDir, srcRevision);
System.out.println("The directory was copied: " + commitnfo);
} catch (SVNException svne) {
editor.abortEdit();
throw svne;
}
...

AutomatizaSVN
<taskdef name="svn" classname="org.tigris.subversion.svnant.SvnTask" classpathref="project.classpath" />
<target name="criar_copia">
<echo>Criando o novo codeline [branch|tag] para o projeto: ${projeto}</echo>
<!-- Passo-1: Obter a reviso da qual ser criada a cpia -->
<input message="Reviso do ${projeto} (no precisa informar se for HEAD):" addproperty="revisao"
defaultvalue="HEAD" />
<!-- Passo-2: Compilar a classe a ser usada -->
<javac srcdir="${src.dir}" destdir="${build.dir}">
<classpath refid="project.classpath" />
</javac>
<!-- Passo-3: Executar a classe que far a cpia, recebendo os
parmetros necessrios -->
<java classname="br.gov.conab.svn.ConabSvnUtil" failonerror="true">
<arg value="${repository.URL}" /><arg value="${repository.user}" />
<classpath>
<fileset dir="${lib.dir}">
<include name="**/*.jar" />
</fileset>
<pathelement location="${lib.dir}" />
<pathelement path="${build.dir}" />
</classpath>
</java>
</target>

AutomatizaSVN
<taskdef name="ssh" classname="com.sshtools.ant.Ssh" classpath="${lib.dir}/maverick-ant.jar" />
<target name="criar_repositorio" depends="iniciar" description="Cria um novo repositrio no servidor
do SVN (com a estrutura padro: trunk, branches, tags)">
<!-- Nome do repositrio a ser criado-->
<input message="Nome do repositrio:" addproperty="repositorio" />
<!-- Comandos para criao do repositrio -->
<ssh host="${repository.HOST}" username="${repository.host.user}" password="$
{repository.host.password}" version="2">
<exec cmd="svnadmin create ${home.repositorios}/${repositorio}" />
<exec cmd="svn mkdir file://${home.repositorios}/${repositorio}/trunk -m Trunk" />
<exec cmd="svn mkdir file://${home.repositorios}/${repositorio}/branches -m Branches" />
<exec cmd="svn mkdir file://${home.repositorios}/${repositorio}/tags -m Tags" />
<exec cmd="chown -R ${apache.user}.${apache.group} ${home.repositorios}/${repositorio}" />
</ssh>
<echo>Repositrio: ${repositorio} foi criado e pode ser acessado atravs da URL: ${repository.URL}/$
{repositorio}</echo>
</target>

StatSVN

Gerao de relatrio sobre um repositrio

Possui plugin para ANT

http://www.statsvn.org/index.html

StatSVN

Realizar checkout do projeto


svn co http://svn.conab.gov.br/siscoe/trunk SSCOE

Gerar log do repositrio


svn log -v --xml > logfile.log

Gerar relatrio
java -jar statsvn.jar <logfile> <checked-out-module>

StatSVN
As imagens seguintes esto relacionadas ao trunk do SSCOE

StatSVN

StatSVN

StatSVN

StatSVN

StatSVN

StatSVN

Comandos Bsicos

Listar comandos
svn help

Fazer checkout
svn co http://svn.conab.gov.br/siscoe/branches/1.x

Adicionar arquivo
svn add arquivo.txt

Criar tag
svn copy http://svn.conab.gov.br/siscoe/branches/1.x
http://svn.conab.gov.br/siscoe/tags/1.0

Mover/Renomear arquivo
svn move arquivo.txt novo_nome.txt

Comitar
svn ci arquivo.txt -m "comitando arquivos
Procedimento p/ criacao de branches

PROCEDMENTO PARA CRAO DE


BRANCHES , UTLZANDO PLUGN
ECLPSE/SVN
Procedimento p/ criacao de branches
Procedimento p/ criacao de branches
Procedimento p/ criacao de branches
Procedimento p/ criacao de branches
SVN PLUGN ECLPSE
PROCEDMENTO PARA CRAO DE MERGE

Concluso
O subversion uma boa opo para
sistemas/ambientes que necessitem de controlar
as verses de seus artefatos, demonstrando ser
robusto, estvel, fcil de usar/configurar/manter,
bem documentado e com uma grande
comunidade, alm de ser open source.

Referncias
http://svnbook.red-bean.com/en/1.4/svn-book.html
http://subversion.tigris.org/faq.html
http://www.pronus.eng.br/artigos_tutoriais

Contato
Pedro Costa
(61) 3312-6441
pedro.costa@bra03034.conab.gov.br