Shell Script – Gerador de pacotes de atualização


1 Estrelas2 Estrelas3 Estrelas4 Estrelas5 Estrelas (4 votos, média: 4.50 de 5)
Loading ... Loading ...

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 icon smile Shell Script   Gerador de pacotes de atualização

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?

svn update 300x213 Shell Script   Gerador de pacotes de atualizaçãoResultado do comando svn update

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:

svn update arquivo de log 300x213 Shell Script   Gerador de pacotes de atualizaçãoRodando o svn update e enviando o resultado para um arquivo

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?

vim script.sh 300x213 Shell Script   Gerador de pacotes de atualizaçãoCriando um arquivo utilizando o editor de texto ‘vim’

Veja como esta ficando nosso script:

script.sh 300x259 Shell Script   Gerador de pacotes de atualização

Vamos rodar nosso script e ver o resultado:

bash script.sh 300x213 Shell Script   Gerador de pacotes de atualização

Executando o script que acabamos de criar

atualizacao.zip 300x284 Shell Script   Gerador de pacotes de atualização

Abrindo o .zip criado podemos ver que ele colocou todos os arquivos novos/alterados

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 icon smile Shell Script   Gerador de pacotes de atualização

Versão melhorada:

  1. #!/bin/bash
  2.  
  3. clear
  4.  
  5. echo "Iniciando geração de pacote para atualização"
  6.  
  7. data=`date +%d.%m.%Y.%H%mhs`
  8.  
  9. # recupera a versão atual
  10.  
  11. from=`svnversion`
  12.  
  13. # remove o ‘M’ da versão caso tiver
  14.  
  15. from=${from/M/}
  16.  
  17. from=`expr $from + 1`
  18.  
  19. echo "Revisao atual: $from"
  20.  
  21. echo "Executando svn update"
  22.  
  23. svn update > update.log
  24.  
  25. # recupera a revisão apos atualizar
  26.  
  27. to=`svnversion`
  28.  
  29. # remove o M da revisão atual
  30.  
  31. to=${to/M/}
  32.  
  33. echo "Atualizado para revisão: $to"
  34.  
  35. # se não precisar atualizar ele aborta o script
  36.  
  37. if [ $from -eq $to ]; then
  38.  
  39.     echo "Sem necessidade de atualizar."
  40.  
  41.     exit
  42.  
  43. fi
  44.  
  45. # cria um nome para o pacote
  46.  
  47. file_zip="update-$from-to-$to-$data.zip"
  48.  
  49. echo "Pacote que sera gerado: $file_zip"
  50.  
  51. # O arquivo de log que sera analisado (resuldado de um svn update)
  52.  
  53. file_log="update.log"
  54.  
  55. echo "Lendo arquivo com o log gerado pelo svn update"
  56.  
  57. data=`cat $file_log`
  58.  
  59. # Possibilidades validas: A, D e U
  60.  
  61. last_line=""
  62.  
  63. for i in $data
  64.  
  65. do
  66.  
  67.     if [ -e $i ]; then
  68.  
  69.         if [ $last_line = "D" ]; then
  70.  
  71.             echo  "Lixo: $i"
  72.  
  73.         else
  74.  
  75.            if [ ! -d $i ]; then
  76.  
  77.                 echo "    Adicionando linha ao zip: $i"
  78.  
  79.                 zip -r updates/$file_zip $i > /dev/null
  80.  
  81.            fi
  82.  
  83.         fi
  84.  
  85.     fi
  86.  
  87.     last_line=$i
  88.  
  89. done
  90.  
  91. echo "Apagando update.log"
  92.  
  93. rm update.log

Clique aqui para baixar o .sh

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

  1. 4 Comentários to “Shell Script – Gerador de pacotes de atualização”

  2. 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!

    ReplyReply

    Por Michael Mafort (7 comments) em 04/06/2010

  3. 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

    ReplyReply

    Por Marcelo Sabadini (109 comments) em 04/06/2010

  4. OOh… este eu conheço, hehehe

    ReplyReply

    Por Rodrigo (2 comments) em 03/09/2010

  5. É o próprio hehehhe

    Flw meu caro!

    ReplyReply

    Por Marcelo Sabadini (109 comments) em 04/09/2010

Coloque um Comentário

Links de comentários deveriam estar livres de nofollow.

Get Adobe Flash playerPlugin by wpburn.com wordpress themes