Last active
May 25, 2016 13:55
-
-
Save flusher/c06947224b893708c7b77ec2aa6a9180 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# Script de déploiement pour un projet Drupal versionné sur un repo Git | |
# avec gestion des releases et des sauvegardes. | |
APP_ENVIRONNEMENT="PROD" | |
APP_PATH="/var/www/www.myproject.com" | |
APP_CURRENT_PATH="current" | |
APP_RELEASES_PATH="releases" | |
APP_BACKUP_PATH="backup" | |
APP_BACKUP_TO_KEEP="15" | |
APP_RELEASES_TO_KEEP="20" | |
APP_SHARED_PATH="shared" | |
APP_USER="websites" | |
APP_GIT_REPO="[email protected]:mycompany/myproject.git" | |
APP_GIT_BRANCH="master" | |
APP_MODULES_DISABLED="devel" | |
APP_MODULES_ENABLED="search_api_override" | |
APP_BACKUP_MYSQL_DATABASE="default" | |
APP_BACKUP_MYSQL_SKIP_TABLES_DATA="cache* watchdog" | |
########################################################### | |
echo "Confirmer le déploiement d'une nouvelle release (environnement de $APP_ENVIRONNEMENT) ?" | |
read -p "Taper \"o\" (et croiser les doigts :) pour confirmer..." -n 1 -r | |
echo | |
if [[ $REPLY != "o" ]] ; then | |
echo "Déploiement avorté." | |
exit 1 | |
fi | |
# Déploie la nouvelle release | |
cd $APP_PATH/$APP_RELEASES_PATH | |
# Suppression des anciennes releases | |
nb_releases=$(ls -1 $APP_PATH/$APP_RELEASES_PATH | wc -l) | |
if (( "$nb_releases" >= "APP_RELEASES_TO_KEEP" )) ; then | |
release_to_delete=$(ls -1t $APP_PATH/$APP_RELEASES_PATH | tail -1) | |
if [ "$release_to_delete" != "" ] ; then | |
if [ -d "$APP_PATH/$APP_RELEASES_PATH/$release_to_delete" ] ; then | |
echo "Suppression de l'ancienne release $release_to_delete..." | |
rm -rf $APP_PATH/$APP_RELEASES_PATH/$release_to_delete | |
fi | |
fi | |
fi | |
nb_backups=$(ls -1 $APP_PATH/$APP_BACKUP_PATH/*.gz 2>/dev/null | wc -l) | |
if (( "$nb_backups" >= "APP_BACKUP_TO_KEEP" )) ; then | |
backup_to_delete=$(ls -1t $APP_PATH/$APP_BACKUP_PATH | tail -1) | |
if [ "$backup_to_delete" != "" ] ; then | |
if [ -f "$APP_PATH/$APP_BACKUP_PATH/$backup_to_delete" ] ; then | |
echo "Suppression de l'ancien backup MySQL $backup_to_delete..." | |
rm $APP_PATH/$APP_BACKUP_PATH/$backup_to_delete | |
fi | |
fi | |
fi | |
# Nom de la nouvelle release | |
release_name=$(date +%Y%m%d%H%M) | |
echo "Déploiement de la release $release_name en cours..." | |
# Clone | |
echo "Clonage du repository git..." | |
git clone -q -b $APP_GIT_BRANCH $APP_GIT_REPO $release_name || { echo "Erreur lors du clonage du repository git."; exit 1; } | |
# Activation du mode maintenance | |
echo "Passage du site en mode maintenance..." | |
drush -r $APP_PATH/$APP_CURRENT_PATH vset -y maintenance_mode 1 | |
# Activation de la nouvelle release | |
echo "Activation de la nouvelle release..." | |
rm $APP_PATH/$APP_CURRENT_PATH | |
ln -s $APP_PATH/$APP_RELEASES_PATH/$release_name $APP_PATH/$APP_CURRENT_PATH | |
# Symlink des ressources permanentes | |
echo "Link des ressources permanentes (htaccess, files, settings.php)..." | |
ln -s $APP_PATH/$APP_SHARED_PATH/htaccess $APP_PATH/$APP_CURRENT_PATH/.htaccess | |
ln -s $APP_PATH/$APP_SHARED_PATH/files $APP_PATH/$APP_CURRENT_PATH/sites/default/files | |
ln -s $APP_PATH/$APP_SHARED_PATH/settings.php $APP_PATH/$APP_CURRENT_PATH/sites/default/settings.php | |
# Symlink des alias | |
#ln -s $APP_PATH/$APP_CURRENT_PATH/sites/default $APP_PATH/$APP_CURRENT_PATH/sites/myproject.com | |
# Désactivation des modules de dev | |
echo "Désactivation des modules de dév : $APP_MODULES_DISABLED..." | |
drush -r $APP_PATH/$APP_CURRENT_PATH pm-disable -y $APP_MODULES_DISABLED >/dev/null 2>&1 | |
# Activation des modules nécessaires à l'environnement local | |
echo "Activation des modules nécessaires à l'environnement local : $APP_MODULES_ENABLED..." | |
drush -r $APP_PATH/$APP_CURRENT_PATH pm-enable -y $APP_MODULES_ENABLED >/dev/null 2>&1 | |
# Updatedb | |
echo "Exécution des updatedb éventuels..." | |
drush -r $APP_PATH/$APP_CURRENT_PATH updatedb -y | |
# Déactivation du mode maintenance | |
echo "Désactivation du mode maintenance..." | |
drush -r $APP_PATH/$APP_CURRENT_PATH vset -y maintenance_mode 0 | |
# Clear cache | |
echo "Nettoyage du cache..." | |
drush -r $APP_PATH/$APP_CURRENT_PATH cc all >/dev/null 2>&1 | |
# Backup de la base MySQL | |
echo "Le déploiement est terminé !" | |
echo "Backup de la base de données Drupal en cours..." | |
drush -r $APP_PATH/$APP_CURRENT_PATH sql-dump --skip-tables-list="$APP_BACKUP_MYSQL_SKIP_TABLES_DATA" --database="$APP_BACKUP_MYSQL_DATABASE" > $APP_PATH/$APP_BACKUP_PATH/$release_name.sql | |
echo "Compression du backup..." | |
gzip $APP_PATH/$APP_BACKUP_PATH/$release_name.sql | |
echo "Backup terminé !" | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment