Created
November 22, 2017 09:11
-
-
Save wilensky/8e79edcd2d375300bfc0d410ec9e4c2d to your computer and use it in GitHub Desktop.
Symfony deployment script
This file contains hidden or 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 | |
ENVIRONMENT="prod"; | |
if [ "$3" != "" ]; then | |
ENVIRONMENT=$3; | |
fi | |
if [ "$2" == "" ]; then | |
echo "Repository URL is mandatory!"; | |
exit 1; | |
fi | |
GITHUB_REPO=$2; | |
#----------------------------------------------------------------------- | |
BUILD_NAME=$(date +%Y%m%d%H%M); | |
PROJECT_ROOT="/var/www/projectname/"; | |
MANUAL_BUILD_FOLDER="builds/"; | |
BUILD_PATH=$PROJECT_ROOT$MANUAL_BUILD_FOLDER$BUILD_NAME; | |
CURRENT_BUILD_SYMLINK="${PROJECT_ROOT}current"; | |
#------SHARED LINKS----------------------------------------------------- | |
SHARED="shared/"; | |
PARAMETERS="app/config/parameters.yml"; | |
LOGS="var/logs"; | |
SESSIONS="var/sessions"; | |
#DATA="var/data"; | |
UPLOADS="web/uploads"; | |
VENDOR="vendor"; | |
NODE_MODULES="node_modules"; | |
SHARED_PARAMETERS="${PROJECT_ROOT}${SHARED}${PARAMETERS}"; | |
SHARED_LOGS="${PROJECT_ROOT}${SHARED}${LOGS}"; | |
SHARED_SESSIONS="${PROJECT_ROOT}${SHARED}${SESSIONS}"; | |
#SHARED_DATA="${PROJECT_ROOT}${SHARED}${DATA}"; | |
SHARED_UPLOADS="${PROJECT_ROOT}${SHARED}${UPLOADS}"; | |
SHARED_PARAMETERS_DEST="${BUILD_PATH}/${PARAMETERS}"; | |
SHARED_LOGS_DEST="${BUILD_PATH}/${LOGS}"; | |
#SHARED_DATA_DEST="${BUILD_PATH}/${DATA}"; | |
SHARED_UPLOADS_DEST="${BUILD_PATH}/${UPLOADS}"; | |
SHARED_SESSIONS_DEST="${BUILD_PATH}/${SESSIONS}"; | |
VENDOR_DEST="${BUILD_PATH}/${VENDOR}"; | |
NODE_MODULES_DEST="${BUILD_PATH}/${NODE_MODULES}"; | |
function edone(){ | |
echo "Done."; | |
} | |
#----------------------------------------------------------------------- | |
function create_folder(){ | |
echo "CREATING BUILD FOLDER..."; | |
mkdir -p $PROJECT_ROOT$MANUAL_BUILD_FOLDER; | |
edone; | |
echo "Switching directory to"; | |
echo $PROJECT_ROOT$MANUAL_BUILD_FOLDER; | |
cd $PROJECT_ROOT$MANUAL_BUILD_FOLDER; #TODO : cd $_ | |
edone; | |
} | |
#----------------------------------------------------------------------- | |
function clone_repo(){ | |
echo "Cloning project from GitHub"; | |
BRANCH="-b development"; | |
if [ $ENVIRONMENT == "prod" ]; then | |
BRANCH="-b master"; | |
fi | |
echo "git clone ${BRANCH} ${GITHUB_REPO} ${BUILD_NAME}"; | |
git clone ${BRANCH} $GITHUB_REPO $BUILD_NAME; | |
edone; | |
} | |
#----------------------------------------------------------------------- | |
function shared_symlinks(){ | |
echo "Replacing existing files and folders by symlinks to shared resources..."; | |
ln -sf $SHARED_PARAMETERS $SHARED_PARAMETERS_DEST; | |
rm -rf "${BUILD_PATH}/${LOGS}" | |
ln -sfn $SHARED_LOGS "${BUILD_PATH}/var/"; | |
rm -rf "${BUILD_PATH}/${SESSIONS}" | |
ln -sfn $SHARED_SESSIONS "${BUILD_PATH}/var/"; | |
ln -sfn $SHARED_UPLOADS "${BUILD_PATH}/web/"; | |
# ln -sf $SHARED_DATA $SHARED_DATA_DEST; | |
edone; | |
} | |
#----------------------------------------------------------------------- | |
function copy_vendor(){ | |
echo "Copy vendor folder from last build..."; | |
cp -r "${CURRENT_BUILD_SYMLINK}/${VENDOR}/" $VENDOR_DEST; | |
cp -r "${CURRENT_BUILD_SYMLINK}/${NODE_MODULES}/" $NODE_MODULES_DEST; | |
edone; | |
} | |
#----------------------------------------------------------------------- | |
function project_install(){ | |
cd $BUILD_PATH; | |
echo "Installing project..."; | |
echo $ENVIRONMENT > .env; | |
echo "| composer"; | |
export SYMFONY_ENV=${ENVIRONMENT} | |
composer install --no-dev --optimize-autoloader; | |
#bin/console doctrine:schema:update; | |
bin/console cache:clear --env=${ENVIRONMENT} --no-debug | |
edone; | |
echo "Installing npm..."; | |
echo "| npm"; | |
npm install; | |
npm run-script postinstall; | |
npm run-script prod; | |
edone; | |
} | |
#----------------------------------------------------------------------- | |
function update_current_link(){ | |
echo "Updating \"current\" symlink..."; | |
rm $CURRENT_BUILD_SYMLINK; | |
ln -s $BUILD_PATH $CURRENT_BUILD_SYMLINK; | |
edone; | |
} | |
#----------------------------------------------------------------------- | |
function update_rights(){ | |
echo "Updating directory rights..."; | |
chown -R www-data:www-data $CURRENT_BUILD_SYMLINK; | |
chmod -R 777 "${BUILD_PATH}/var/cache"; | |
chmod -R 777 "${BUILD_PATH}/var/logs"; | |
chmod -R 777 "${BUILD_PATH}/var/sessions"; | |
chmod -R 777 "${BUILD_PATH}/web/uploads"; | |
edone; | |
} | |
#----------------------------------------------------------------------- | |
function restart_workers(){ | |
echo "Restarting workers..."; | |
supervisorctl reread; | |
supervisorctl update; | |
supervisorctl restart all; | |
edone; | |
} | |
#----------------------------------------------------------------------- | |
while getopts "csiruwv" OPTION | |
do | |
case ${OPTION} in | |
c) CLONE_REPO=Y | |
;; | |
s) CREATE_SYMLINKS=Y | |
;; | |
i) PROJECT_INSTALL=Y | |
;; | |
u) UPDATE_CURRENT_LINK=Y | |
;; | |
r) UPDATE_RIGHTS=Y | |
;; | |
w) RESTART_WORKERS=Y | |
;; | |
v) COPY_VENDOR=Y | |
;; | |
*) EXIT=Y | |
;; | |
esac | |
done | |
if [ "${CLONE_REPO}" == "Y" ]; then | |
create_folder; | |
clone_repo; | |
fi | |
if [ "${CREATE_SYMLINKS}" == "Y" ]; then | |
shared_symlinks; | |
fi | |
if [ "${COPY_VENDOR}" == "Y" ]; then | |
copy_vendor; | |
fi | |
if [ "${PROJECT_INSTALL}" == "Y" ]; then | |
project_install; | |
fi | |
if [ "${UPDATE_RIGHTS}" == "Y" ]; then | |
update_rights; | |
fi | |
if [ "${RESTART_WORKERS}" == "Y" ]; then | |
restart_workers; | |
fi | |
if [ "${UPDATE_CURRENT_LINK}" == "Y" ]; then | |
update_current_link; | |
fi | |
# ----------------------------------------------------- | |
echo -e "\e[92mBUILD PATH: \e[1m\e[36m${BUILD_PATH}\e[0m"; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment