136 lines
3.1 KiB
Bash
Executable file
136 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
|