Created
March 11, 2017 11:58
-
-
Save ulrikstrid/59885562e049439ff293b825899df2cf to your computer and use it in GitHub Desktop.
create-react-app azure deploy
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: 1.0.9 | |
# ---------------------- | |
# Helpers | |
# ------- | |
exitWithMessageOnError () { | |
if [ ! $? -eq 0 ]; then | |
echo "An error has occurred during web site deployment." | |
echo $1 | |
exit 1 | |
fi | |
} | |
# Prerequisites | |
# ------------- | |
# Verify 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." | |
# 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/build | |
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/__npmVersion.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. Select node version | |
selectNodeVersion | |
# 2. Install npm packages | |
if [ -e "$DEPLOYMENT_SOURCE/package.json" ]; then | |
cd "$DEPLOYMENT_SOURCE" | |
eval $NPM_CMD install | |
exitWithMessageOnError "npm failed" | |
cd - > /dev/null | |
fi | |
# 3. KuduSync | |
if [[ "$IN_PLACE_DEPLOYMENT" -ne "1" ]]; then | |
"$KUDU_SYNC_CMD" -v 50 -f "$DEPLOYMENT_SOURCE/build" -t "$DEPLOYMENT_TARGET" -n "$NEXT_MANIFEST_PATH" -p "$PREVIOUS_MANIFEST_PATH" -i ".git;.hg;.deployment;deploy.sh" | |
exitWithMessageOnError "Kudu Sync failed" | |
fi | |
################################################################################################################################## | |
echo "Finished successfully." |
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
cp web.config ./build/web.config | |
cd build | |
find . -type d -exec ../scripts/recursive-ftp.sh {} \; | |
cd .. |
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 | |
ftp_site=$FTP_SITE | |
username=$FTP_USERNAME | |
passwd=$FTP_PASSWORD | |
remote='site/wwwroot' | |
folder=$1 | |
cd $folder | |
pwd | |
ftp -p -in <<EOF | |
open $ftp_site | |
user $username $passwd | |
mkdir $remote/$folder | |
cd $remote/$folder | |
mput * | |
close | |
bye | |
EOF |
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
<?xml version="1.0"?> | |
<configuration> | |
<system.webServer> | |
<rewrite> | |
<rules> | |
<rule name="React Routes" stopProcessing="true"> | |
<match url=".*" /> | |
<conditions logicalGrouping="MatchAll"> | |
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> | |
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> | |
<add input="{REQUEST_URI}" pattern="^/(api)" negate="true" /> | |
</conditions> | |
<action type="Rewrite" url="/" /> | |
</rule> | |
</rules> | |
</rewrite> | |
</system.webServer> | |
</configuration> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment