Deploy automático do SVN

Estou iniciando um novo projeto e aproveitei para mudar do CVS para o Subversion. 

Uma das coisas que achei interessante é o esquema de “hooks“. É um conceito parecido com “triggers” de bancos de dados. Você pode programar alguns scripts para serem executados em momentos específicos do ciclo gerenciado pelo SVN. As opções são:

post-commit.tmpl
post-lock.tmpl
post-revprop-change.tmpl
post-unlock.tmpl
pre-commit.tmpl
pre-lock.tmpl
pre-revprop-change.tmpl
pre-unlock.tmpl
start-commit.tmpl

Os nomes são auto-explicativos. Por exemplo, o script post-lock vai ser executado sempre após algum usuário ter feito o lock de um arquivo.

Estes arquivos estão armazenados no diretório hooks do repositório do projeto.

O que eu fiz foi alterar o post-commit.tmpl

É preciso remover a extensão do nome e dar permissão de execução no arquivo, então:

cp post-commit.tmpl post-commit
chmod +x post-commit

O conteúdo do arquivo ficou assim:

REPOS="$1"
REV="$2"
PROD="/var/www/html"
#pega todas as alteracoes
svnlook changed $REPOS --revision $REV >> /tmp/lixo_$REV
#pega cada alteracao e salva
for i in `cat /tmp/lixo_$REV|cut -c 5-1024` ; do
  svnlook cat $REPOS $i > $PROD/$i
done
#apagar arquivo
rm /tmp/lixo_$REV
Desta forma cada vez que um programador faz o commit do fonte ele é automaticamente salvo no htdocs, onde fica acessível para a equipe de testes. 
Lógico que esse script pode ser melhorado e isso está sendo executado em um servidor de desenvolvimento e não o de produção. Além disso eu comecei a usar o SVN somente agora, por isso, se alguém encontrar um problema ou erro na lógica me avisem :-)
Etiquetado

5 thoughts on “Deploy automático do SVN

  1. Elton disse:

    ola!!

    teria como vc me explicar como obrigar em td commit dado, ter obrigatoriamente uma mensagem?

  2. elm disse:

    Boa pergunta!
    Não sei :-)
    Mas vou pesquisar

  3. Rodrigo disse:

    legal,
    eu estou usando o svn também e estava dando deploy no braço. Agora ficou mais fácil.

  4. Pedro Costa disse:

    Legal.. mas comigo não deu certo.
    simplesmente quando faço o commit, não atualiza no htdocs.

  5. Micael disse:

    Olá Amigo,

    Andei lendo muito sobre hooks e a forma que voce demonstra foi a que mais cheguei perto.

    Coloquei ela desta forma:

    PROD=”/teste”
    #pega todas as alteracoes
    svnlook changed $REPOS –revision $REV >> /tmp/lixo_$REV
    #pega cada alteracao e salva
    for i in `cat /tmp/lixo_$REV|cut -c 5-1024` ; do
    svnlook cat $REPOS $i > $PROD/$i
    done
    #apagar arquivo
    rm /tmp/lixo_$REV

    quando executo o comando para debugar o hook, recebo o seguinte retorno:

    administrador@angra:/srv/svn/avanz/hooks$ sudo env – ./post-commit /srv/svn/avanz/
    svnlook: missing argument: –revision
    Type ‘svnlook help’ for usage.

    Voce pode me dar uma ajudinha? Valeu aih brother

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Sair / Alterar )

Imagem do Twitter

You are commenting using your Twitter account. Sair / Alterar )

Foto do Facebook

You are commenting using your Facebook account. Sair / Alterar )

Connecting to %s

Seguir

Obtenha todo post novo entregue na sua caixa de entrada.

Join 1.472 other followers