Created
October 13, 2017 13:41
-
-
Save z2z/af4db9b8685b6570297c56efb8473d0a to your computer and use it in GitHub Desktop.
Azure App service deployment for Laravel 5
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
[config] | |
command = bash deploy.sh |
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 | |
# ---------------------- | |
# KUDU Deployment Script | |
# Version: 0.2.2 | |
# ---------------------- | |
# Helpers | |
# ------- | |
exitWithMessageOnError () { | |
if [ ! $? -eq 0 ]; then | |
echo "An error has occurred during web site deployment." | |
echo $1 | |
exit 1 | |
fi | |
} | |
# Prerequisites | |
# ------------- | |
echo "Verifying if node.js installed." | |
hash node 2>/dev/null | |
exitWithMessageOnError "Missing node.js executable, please install node.js, if already installed make sure it can be reached from current environment." | |
echo "Verifying if composer installed." | |
hash composer 2>/dev/null | |
exitWithMessageOnError "Missing composer executable" | |
# Setup | |
# ----- | |
SCRIPT_DIR="${BASH_SOURCE[0]%\\*}" | |
SCRIPT_DIR="${SCRIPT_DIR%/*}" | |
ARTIFACTS=$SCRIPT_DIR/../artifacts | |
KUDU_SYNC_CMD=${KUDU_SYNC_CMD//\"} | |
if [[ ! -n "$DEPLOYMENT_SOURCE" ]]; then | |
DEPLOYMENT_SOURCE=$SCRIPT_DIR | |
fi | |
if [[ ! -n "$NEXT_MANIFEST_PATH" ]]; then | |
NEXT_MANIFEST_PATH=$ARTIFACTS/manifest | |
if [[ ! -n "$PREVIOUS_MANIFEST_PATH" ]]; then | |
PREVIOUS_MANIFEST_PATH=$NEXT_MANIFEST_PATH | |
fi | |
fi | |
if [[ ! -n "$DEPLOYMENT_TARGET" ]]; then | |
DEPLOYMENT_TARGET=$ARTIFACTS/wwwroot | |
else | |
KUDU_SERVICE=true | |
fi | |
if [[ ! -n "$KUDU_SYNC_CMD" ]]; then | |
# Install kudu sync | |
echo Installing Kudu Sync | |
npm install kudusync -g --silent | |
exitWithMessageOnError "npm failed" | |
if [[ ! -n "$KUDU_SERVICE" ]]; then | |
# In case we are running locally this is the correct location of kuduSync | |
KUDU_SYNC_CMD=kuduSync | |
else | |
# In case we are running on kudu service this is the correct location of kuduSync | |
KUDU_SYNC_CMD=$APPDATA/npm/node_modules/kuduSync/bin/kuduSync | |
fi | |
fi | |
# Node Helpers | |
# ------------ | |
selectNodeVersion () { | |
if [[ -n "$KUDU_SELECT_NODE_VERSION_CMD" ]]; then | |
SELECT_NODE_VERSION="$KUDU_SELECT_NODE_VERSION_CMD \"$DEPLOYMENT_SOURCE\" \"$DEPLOYMENT_TARGET\" \"$DEPLOYMENT_TEMP\"" | |
eval $SELECT_NODE_VERSION | |
exitWithMessageOnError "select node version failed" | |
if [[ -e "$DEPLOYMENT_TEMP/__nodeVersion.tmp" ]]; then | |
NODE_EXE=`cat "$DEPLOYMENT_TEMP/__nodeVersion.tmp"` | |
exitWithMessageOnError "getting node version failed" | |
fi | |
if [[ -e "$DEPLOYMENT_TEMP/.tmp" ]]; then | |
NPM_JS_PATH=`cat "$DEPLOYMENT_TEMP/__npmVersion.tmp"` | |
exitWithMessageOnError "getting npm version failed" | |
fi | |
if [[ ! -n "$NODE_EXE" ]]; then | |
NODE_EXE=node | |
fi | |
NPM_CMD="\"$NODE_EXE\" \"$NPM_JS_PATH\"" | |
else | |
NPM_CMD=npm | |
NODE_EXE=node | |
fi | |
} | |
################################################################################################################################## | |
# Deployment | |
# ---------- | |
echo Handling node.js deployment. | |
# 1. KuduSync | |
if [[ "$IN_PLACE_DEPLOYMENT" -ne "1" ]]; then | |
"$KUDU_SYNC_CMD" -v 50 -f "$DEPLOYMENT_SOURCE" -t "$DEPLOYMENT_TARGET" -n "$NEXT_MANIFEST_PATH" -p "$PREVIOUS_MANIFEST_PATH" -i ".git;.hg;.deployment;deploy.sh" | |
exitWithMessageOnError "Kudu Sync failed" | |
fi | |
# 2. Select node version | |
selectNodeVersion | |
# 3. Install NPM packages | |
if [ -e "$DEPLOYMENT_TARGET/package.json" ]; then | |
cd "$DEPLOYMENT_TARGET" | |
eval $NPM_CMD install --production | |
eval $NPM_CMD install --only=dev | |
exitWithMessageOnError "npm failed" | |
cd - > /dev/null | |
fi | |
# 4. Install Bower modules | |
if [ -e "$DEPLOYMENT_TARGET/bower.json" ]; then | |
cd "$DEPLOYMENT_TARGET" | |
eval ./node_modules/.bin/bower install | |
exitWithMessageOnError "bower failed" | |
cd - > /dev/null | |
fi | |
# 5. Install Composer modules | |
if [ -e "$DEPLOYMENT_TARGET/composer.json" ]; then | |
echo "Found composer.json" | |
cd "$DEPLOYMENT_TARGET" | |
rm -rfv vendor/* | |
rm -rfv composer.lock | |
php composer.phar install --require-dev | |
exitWithMessageOnError "composer failed" | |
cd - > /dev/null | |
fi | |
# 6. Laravel clear config cache | |
if [ -e "$DEPLOYMENT_TARGET/composer.json" ]; then | |
cd "$DEPLOYMENT_TARGET" | |
php artisan config:clear | |
php artisan config:cache | |
exitWithMessageOnError "laravel config cache clearing failed" | |
cd - > /dev/null | |
fi | |
# 7. Set Application Key | |
if [ ! -f "$DEPLOYMENT_TARGET/.env" ]; then | |
echo ".env not found. Copying .env.example to .env" | |
pushd "$DEPLOYMENT_TARGET" | |
cp "$DEPLOYMENT_TARGET/.env.example" "$DEPLOYMENT_TARGET/.env" | |
php artisan key:generate | |
popd | |
fi | |
################################################################################################################################## | |
# Post deployment stub | |
if [[ -n "$POST_DEPLOYMENT_ACTION" ]]; then | |
POST_DEPLOYMENT_ACTION=${POST_DEPLOYMENT_ACTION//\"} | |
cd "${POST_DEPLOYMENT_ACTION_DIR%\\*}" | |
"$POST_DEPLOYMENT_ACTION" | |
exitWithMessageOnError "post deployment action failed" | |
fi | |
echo "Finished successfully." |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment