Insumos necessários
- Subversion 1.5.5 – Binários certificados pela CollabNet: http://www.collab.net/downloads/subversion/
- Active Perl 5.10: http://www.activestate.com/Products/ActivePerl
- mod_auth_sspi: http://sourceforge.net/projects/mod-auth-sspi (somente caso deseje autenteicação com Active Directory).
Instalação
Instale o Subversion 1.5.5. Esse instalador da CollabNet automaticamente instala o apache. É importante verificar se já não tem um IIS rodando na porta 80. Nesse caso, mude ou o apache ou o IIS de porta.
Configurando Autenticação SSPI (Integração com Active Directory)
Caso deseje autenticação SSPI, baixe o módulo do apache no endereço http://sourceforge.net/projects/mod-auth-sspi
Descompacte o zip e copie o arquivo mod_auth_sspi.so para o C:\Program Files\CollabNet Subversion Server\httpd\modules.
Edite o arquivo C:\Program Files\CollabNet Subversion Server\httpd\conf\httpd.conf, adicionando a linha a seguir abaixo de toda a seção “LoadModule”:
LoadModule sspi_auth_module modules/mod_auth_sspi.so
No final do arquivo httpd.conf, adicione as seguintes linhas:
<Location /svn> SSPIAuth On SSPIAuthoritative On SSPIDomain <nome do domínio> SSPIOfferBasic On DAV svn SVNListParentPath on SVNParentPath C:\SVN_repository AuthType SSPI #AuthzSVNAccessFile svnaccessfile SSPIUsernameCase lower #SSPIOmitDomain Require valid-user </Location>
Criando repositórios
Os repositórios devem ser criados via linha de comando no servidor, ex.:
svnadmin create c:\svn_repository\meurepositorio
Instalando o SVN::Notify
Instale o ActivePerl. As opções default servem bem.
Após a instalação, utilize o Perl Package Manager (ppm) para instalar os seguintes módulos. O SMTP_auth só é necessário caso precise de SMTP autenticado:
ppm install Net::SMTP_auth ppm install SVN::Notify
Configurando o SVN::Notify para ser disparado quando um commit ocorrer no repositório
Crie um arquivo com o nome c:\svn_repository\meurepositorio\hooks\post-commit.bat
Esse arquivo deve ter um conteúdo similar a este:
set REPOS=%1 set REV=%2 SET PATH=C:\Program Files\CollabNet Subversion Server;C:\PERL\bin;c:\perl\site\bin; SET OS=Windows_NT SET SystemRoot=C:\WINDOWS svnnotify --repos-path %REPOS% -r %REV% --from from@meudominio.com.br --to destino@meudominio.com.br --smtp meusmtp.meudominio.com.br -H HTML::ColorDiff -d --smtp-user meuuser --smtp-pass meupassword --verbose --verbose
Alguns erros comuns, que só são exibidos quando o svnnotify é chamado com –verbose (2 vezes):
- Cannot fork: Bad file descriptor – Provavelmente tem algo errado na variável PATH (não aponta pro lugar certo dos binários do svn, onde fica o svn.exe no servidor)
- Unable to create Net::SMTP_auth object – Provavelmente o SystemRoot está errado. O erro não aparece muito claro no output do svnnotify.
Crash de hardware na máquina de SVN aqui, os dados foram salvos mas precisei subir um novo serviço e pra variar vim atrás desse artigo novamente para configurar o SSPI da parada.
Belo artigo, abração,
Cleiton
Eric, eu instalei outro dia o VisualSVN e achei muito legal. Depois da uma olhada:
http://www.visualsvn.com/
Legal,
Valeu o toque. Vou dar uma olhada quando tiver um tempo.
Depois de alguns anos trabalhando com desenvolvimento em diversos tipos de equipes, percebi que muitos desenvolvedores focam demais na IDE, sem se preocupar com os arquivos que a IDE manipula e sem se preocupar com o porque e com o conteúdo desses arquivos.
Também percebi que muitos artefatos gerenciados durante o desenvolvimento, como arquivos de configuração, scripts de banco de dados, xml’s usados para gerar arquivos, geralmente não são tratados por dentro da IDE e gera problemas de atualização e integridade de builds.
Sempre que trabalho com implementações de integração contínua, diversos problemas de integridade dos builds ocorrem por causa dessas práticas.
Por essas e outras, eu não gosto muito da abordagem de usar plugin de IDE e sim de lidar com o file system direto, com a idéia de “changesets” pra dentro do controle de versão.
Mas fico feliz por saber que existem outras alternativas e respeito quem gosta desse conceito.
Abraço,
Eric