1
0
Fork 0
scripts-admin-quickndirty-p.../oldies/script_deploiement-massif-war.sh

137 lines
3.1 KiB
Bash
Executable file

#!/bin/sh
RACINE_MULTIINSTANCES="/var/lib/tomcat7-multiinstances"
RACINE_PATCHS="$HOME/patchs"
WAR_FILE=""
WEBAPP_NAME="ROOT"
RELANCE_AUTO_TOMCAT=1
JUST_TEST_THE_PATCHS=0
set -e
# Fonctions
# fonction d'aide
usage() {
cat <<EOF
$0 [options] -w package.war instance1 instance2 ...
$0 -h
Ce script déploie un war dans les instances Tomcat indiquées
puis les patchs en utilisant le fichier homonyme suffixé en .diff
Par ex:
$0 -w myapp-1.1.1.war tomcat7_003_titi tomcat7_008_toto
va déployer 'myapp-1.1.1.war' dans la webapp ROOT des 2 instances, puis
va appliquer les patchs tomcat7_003_titi.diff et tomcat7_008_toto.diff
qui se trouvent dans '$RACINE_PATCHS'.
Ce script commence par tester chacun des patchs sur un dézippage temporaire
du war, puis crée une copie par instance, la patche, éteint Tomcat, remplace
l'ancienne webapp par la nouvelle copie patchée et reboote tomcat.
Options :
-w : war à déployer
-d : répertoire racine du multiinstances (par défaut : '$RACINE_MULTIINSTANCES')
-D : répertoire contenant les patchs (par défaut : '$RACINE_PATCHS')
-n : nom de la webapp à écraser (par défaut : '$WEBAPP_NAME')
-T : juste tester les patchs sur le war, ne pas faire le déploiement
-h : this help screen
EOF
}
# Début du code
# gestion des options de lancement
while getopts d:D:n:hTw: o; do
case $o in
'd')
RACINE_MULTIINSTANCES="$OPTARG"
;;
'D')
RACINE_PATCHS="$OPTARG"
;;
'n')
WEBAPP_NAME="$OPTARG"
;;
'T')
JUST_TEST_THE_PATCHS=1
;;
'w')
# Utilisation de readlink pour avoir un chemin absolu,
# vu qu'on bouge pas mal entre les répertoires :-/
WAR_FILE="$( readlink -f "$OPTARG" )"
;;
'h')
usage
exit 0
;;
\?)
usage >&2
exit 1
;;
esac
done
shift $( expr $OPTIND - 1 )
#REPDRUPAL="$1"
# Petites vérifs
if [ ! -f "$WAR_FILE" ]; then
echo "ERREUR: fichier '$WAR_FILE' introuvable." >&2
exit 1
fi
# Vérification des patchs
echo "INFO: vérification des patchs..."
# on dézippe le war dans un dossier temporaire
TEMP_REP=$( mktemp -d )
cd "$TEMP_REP"
unzip -q "$WAR_FILE"
# ... et on boucle sur chacun de patchs demandés
for INSTANCE in $@; do
echo "$INSTANCE"
if [ ! -f $RACINE_PATCHS/$INSTANCE.diff ]; then
echo "ERREUR: patch inexistant pour l'instance '$INSTANCE'." >&2
exit 1
fi
if ! patch --dry-run -p1 < $RACINE_PATCHS/$INSTANCE.diff; then
echo "ERREUR: patch non applicable sur instance $INSTANCE." >&2
exit 1
fi
done
cd /
rm -rf "$TEMP_REP"
# Si on se contentait de tester les patchs, on s'arrête là
[ "$JUST_TEST_THE_PATCHS" -eq 1 ] && exit 0
# Déploiement
echo "INFO: déploiement..."
for INSTANCE in $@; do
echo "$INSTANCE"
# Dézippage du war dans un dossier temporaire
cd "$RACINE_MULTIINSTANCES/$INSTANCE"
mkdir ROOT_new
cd ROOT_new
unzip -q "$WAR_FILE"
# Patch de la copie dézippée
patch -p1 < $RACINE_PATCHS/$INSTANCE.diff
# Relance de tomcat
if [ "$RELANCE_AUTO_TOMCAT" -ne 0 ]; then
service $INSTANCE stop
sleep 3
rm -rf "../webapps/$WEBAPP_NAME"
mv -i ../ROOT_new "../webapps/$WEBAPP_NAME"
service $INSTANCE start
else
# TODO : affichage des commandes ?
true
fi
done