Linux, shell script, Subversion
- 02/06/2010
Shell Script – Gerador de pacotes de atualização
Olá pessoal.
Hoje vou mostrar como fazer um script que lê uma atualização do SVN e gera um pacote zipado apenas com os arquivos que foram alterados de uma revisão para outra. Para isto utilizaremos Shell Script. Sim!!! se você roda Windows vai ficar sem esta mamata!!!!!
Primeiramente gostaria de falar que não sou nenhum expert em Shell Script e muito menos em Linux. Eu sou apenas um cara que gosta muito e procura usá-los no dia-a-dia para ganhar facilidades, produtividade e diversão.
Pelo motivo descrito no parágrafo anterior, este script poderia ser melhorado e muito. Mas, me atende perfeitamente e fez com que eu reduzisse o tempo de atualização do meu ambiente de 20 minutos para apenas 3
Então vamos lá!
Seria legal você conhecer um pouco dos tópicos abaixo para poder acompanhar o raciocínio:
- Linux (por que nosso scritp só roda nele);
- Fazer algumas coisas na linha de comanto (pois é mais elegante);
- SVN na linha de comando (para poder entender o script melhor);
Agora sim, vamos lá!
A idéia é bem simples: Ler o log do comando “svn update” e apartir dele conseguir a lista de arquivos modificados/criados/deletados.
Você sabe qual é o formato deste log? quando você roda o comando “svn update” o que aparece na tela do seu termina? algo semelhante a imagem abaixo certo?
Pois bem, vamos utilizar o caractere de redirecionamento de saída para fazer com que este log seja escrito em um arquivo. Como fazer isto? simples! assim:
“svn update > arquivo_de_log.log”
Veja como nosso script esta ficando:
Agora precisamos fazer com que nosso script leia as linhas do arquivo gerado para poder decidir o que fazer. Para tal, usaremos o comando “cat arquivo_de_log.log”. Grosseiramente o cat exibe o contúdo de um arquivo na tela.
Clique aqui e veja mais sobre este comando.
Mas, não será somente com o cat. Precisaremos fazer um loop para ler cada linha do arquivo.
Mas para facilitar, que tal criar um arquivo para poder escrever nosso script?
Veja como esta ficando nosso script:
Vamos rodar nosso script e ver o resultado:
Acabamos!
Basicamente o ‘core’ está pronto… claro que podemos fazer diversas melhorias neste script. Eu fiz algumas e vou postar o código na íntegra logo abaixo.
Se você tiver alguma idéia implemente e comente aqui no post para compartilhar seus conhecimentos.
Se você escrever este script em MS DOS pode enviar também
Versão melhorada:
-
#!/bin/bash
-
-
clear
-
-
echo "Iniciando geração de pacote para atualização"
-
-
data=`date +%d.%m.%Y.%H%mhs`
-
-
# recupera a versão atual
-
-
from=`svnversion`
-
-
# remove o ‘M’ da versão caso tiver
-
-
from=${from/M/}
-
-
from=`expr $from + 1`
-
-
echo "Revisao atual: $from"
-
-
echo "Executando svn update"
-
-
svn update > update.log
-
-
# recupera a revisão apos atualizar
-
-
to=`svnversion`
-
-
# remove o M da revisão atual
-
-
to=${to/M/}
-
-
echo "Atualizado para revisão: $to"
-
-
# se não precisar atualizar ele aborta o script
-
-
if [ $from -eq $to ]; then
-
-
echo "Sem necessidade de atualizar."
-
-
exit
-
-
fi
-
-
# cria um nome para o pacote
-
-
file_zip="update-$from-to-$to-$data.zip"
-
-
echo "Pacote que sera gerado: $file_zip"
-
-
# O arquivo de log que sera analisado (resuldado de um svn update)
-
-
file_log="update.log"
-
-
echo "Lendo arquivo com o log gerado pelo svn update"
-
-
data=`cat $file_log`
-
-
# Possibilidades validas: A, D e U
-
-
last_line=""
-
-
for i in $data
-
-
do
-
-
if [ -e $i ]; then
-
-
if [ $last_line = "D" ]; then
-
-
echo "Lixo: $i"
-
-
else
-
-
if [ ! -d $i ]; then
-
-
echo " Adicionando linha ao zip: $i"
-
-
zip -r updates/$file_zip $i > /dev/null
-
-
fi
-
-
fi
-
-
fi
-
-
last_line=$i
-
-
done
-
-
echo "Apagando update.log"
-
-
rm update.log
Como vocês viram, mexer com Shell Script não é nenhum bixo de sete cabeças. Quando começamos a brincar com ele as possibilidades vão surgindo em nossa cabeça e vamos fazendo ferramentas para nos auxiliar.
Se você tem algum script em Shell e quer compartilhar com o pessoal entre em contato comigo e disponibilize aqui no blog.
Abraços


(4 votos, média: 4.50 de 5)






4 Comentários to “Shell Script – Gerador de pacotes de atualização”
Muito legal, shell/bash script sempre dá para fazer algumas coisas muito interessantes e que facilitam muito a vida de um programador.
Neste caso de pegar os arquivos modificados é muito bom, pois as vezes precisamos subir apenas os arquivos modificados via ftp e ai isso facilita muito. Um recurso que pode ser utilizado também é o svn log, para pegar os arquivos de uma revisão anterior ao ultimo commit, podendo pegar os arquivos modificados em qualquer revisão, acho que ficaria algo como:
svn log -v -r [revisao] http://hostsvn.com.br/repo
ai era só incluir alguns “ifs” no script que funciona.
Show de bola, camarada!
Por Michael Mafort (7 comments) em 04/06/2010
Tem toda razão. Tem como fazer muita coisa.
No script que eu rodo no meu trabalho eu crio um arquivo com os logs do range dentro do zip e abro o prompt com opção Sim/Nao para enviar o arquivo para o servidor automaticamente via FTP.
Já no servidor tenho outro Shell que descompacta os arquivos e sai setando chmod 755 em cada arquivo(sei que poderia ser diferente mas o servidor não fica conosco).
Valeu pela contribuição meu amigo!! Se tiver mais ideias posta aí!!! Rsrsrsrsrsrs
Por Marcelo Sabadini (109 comments) em 04/06/2010
OOh… este eu conheço, hehehe
Por Rodrigo (2 comments) em 03/09/2010
É o próprio hehehhe
Flw meu caro!
Por Marcelo Sabadini (109 comments) em 04/09/2010