Skip to content

Instantly share code, notes, and snippets.

@flusher
Last active May 25, 2016 13:55
Show Gist options
  • Save flusher/c06947224b893708c7b77ec2aa6a9180 to your computer and use it in GitHub Desktop.
Save flusher/c06947224b893708c7b77ec2aa6a9180 to your computer and use it in GitHub Desktop.
#!/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="git@gitlab.myproject.com: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