Skip to content

Instantly share code, notes, and snippets.

@tiagofaustino
Last active December 11, 2020 12:32
Show Gist options
  • Save tiagofaustino/d2623583ab88421455bd427b2b1821aa to your computer and use it in GitHub Desktop.
Save tiagofaustino/d2623583ab88421455bd427b2b1821aa to your computer and use it in GitHub Desktop.
Shell Script usado para fazer deploy de arquivos WAR no Tomcat (usando versão 6 no exemplo). E que foram colocados em uma determinada pasta. Ideal para ser executado num robô toda a noite por exemplo.
#!/bin/bash
PASTA_ORIGEM=/usr/share/deploy_producao/deploy_novo
TOMCAT_HOME=/usr/local/tomcat
TEMPO_SLEEP=20
PASTA_EXECUTADOS=/usr/share/deploy_producao/deploy_executado
LOG_FILE=/usr/share/deploy_producao/deploy_producao.log
#Verifica se foi passado algum nome de war por parametro.
#Quando isso acontecer, só será feito deploy deste war.
# Ex.: ./atualizaProducao.sh sistema.war
if [ "$1" != "" ]; then
ARQUIVOS_BASE=$PASTA_ORIGEM/$1
else
ARQUIVOS_BASE=$PASTA_ORIGEM/*.war
fi
NUM_ARQUIVOS=$(ls $ARQUIVOS_BASE 2> /dev/null | wc -l)
if [ "$NUM_ARQUIVOS" == "0" ]
then
if [ "$1" != "" ]; then
echo $(date '+%d/%m/%Y %H:%M:%S')" - O war $1 nao existe na pasta $PASTA_ORIGEM" >> $LOG_FILE
else
echo $(date '+%d/%m/%Y %H:%M:%S')" - Nao existem wars na pasta $PASTA_ORIGEM" >> $LOG_FILE
fi
else
TEMPO_SLEEP_TOTAL=$(( TEMPO_SLEEP * NUM_ARQUIVOS ))
##### Fase 1: Undeploy dos wars
for f in $ARQUIVOS_BASE
do
filename=$(basename "$f")
filename_no_extension=${filename%.*}
echo $(date '+%d/%m/%Y %H:%M:%S')" - Arquivo $filename encontrado." >> $LOG_FILE
#remove o war do tomcat
echo $(date '+%d/%m/%Y %H:%M:%S')" - rm -f $TOMCAT_HOME/webapps/$filename" >> $LOG_FILE
rm -f $TOMCAT_HOME/webapps/$filename
done
##### Fase 2: Parar servidor
#espera o undeploy
echo $(date '+%d/%m/%Y %H:%M:%S')" - Esperando o undeploy $TEMPO_SLEEP_TOTAL segundos" >> $LOG_FILE
sleep $TEMPO_SLEEP_TOTAL
echo $(date '+%d/%m/%Y %H:%M:%S')" - $TOMCAT_HOME/bin/./shutdown.sh" >> $LOG_FILE
$TOMCAT_HOME/bin/./shutdown.sh
sleep $(( 7 * NUM_ARQUIVOS ))
#Garante que o processo do tomcat foi parado
kill -9 $(ps -eo pid,command | grep "classpath $TOMCAT_HOME/bin/bootstrap.jar" | grep -v grep | awk '{print $1}')
##### Fase 3: Limpar pastas de trabalho Tomcat, copiar wars e modificar pastas "deploy_novo"
for f in $ARQUIVOS_BASE
do
filename=$(basename "$f")
filename_no_extension=${filename%.*}
#Remove o projeto da pasta Catalina do Tomcat
echo $(date '+%d/%m/%Y %H:%M:%S')" - rm -Rf $TOMCAT_HOME/work/Catalina/localhost/$filename_no_extension" >> $LOG_FILE
rm -Rf $TOMCAT_HOME/work/Catalina/localhost/$filename_no_extension
#Remove o projeto da pasta webapps do Tomcat
echo $(date '+%d/%m/%Y %H:%M:%S')" - rm -Rf $TOMCAT_HOME/webapps/$filename_no_extension" >> $LOG_FILE
rm -Rf $TOMCAT_HOME/webapps/$filename_no_extension
#Copia o arquivo da pasta "deploy_novo" para a webapps do Tomcat
echo $(date '+%d/%m/%Y %H:%M:%S')" - cp -rf $f $TOMCAT_HOME/webapps" >> $LOG_FILE
cp -rf "$f" $TOMCAT_HOME/webapps
#Move o arquivo da iteracao para a pasta de executados
echo $(date '+%d/%m/%Y %H:%M:%S')" - Movendo o arquivo $filename para a pasta $PASTA_EXECUTADOS" >> $LOG_FILE
mv "$f" $PASTA_EXECUTADOS"/"$(date '+%d%m%Y_%H%M%S')"$filename"
#Este trecho eh para garantir que nao fique algum arquivo na pasta
echo $(date '+%d/%m/%Y %H:%M:%S')" - Verificando se o arquivo $f foi removido da pasta $PASTA_ORIGEM" >> $LOG_FILE
#Limpa a pasta de origem do war
rm -rf "$f"
done
##### Fase 4: Iniciar servidor
echo $(date '+%d/%m/%Y %H:%M:%S')" - $TOMCAT_HOME/bin/./startup.sh" >> $LOG_FILE
$TOMCAT_HOME/bin/./startup.sh
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment