Permalink
Please sign in to comment.
Browse files
Deploy to Azure Button
* Uses ARM template to create a Web App (Free Tier) * When deploying, choose between `Latest` (deploys code from git repo) or `Stable` (deploy from latest published npm package). * Server will be accessible at `<sitename>.azurewebsites.net`
- Loading branch information...
Showing
with
377 additions
and 16 deletions.
- +6 −2 Readme.md
- +130 −0 azuredeploy.json
- +10 −7 bin/slackin
- +4 −1 lib/log.js
- +1 −6 package.json
- +157 −0 scripts/azuredeploy.sh
- +69 −0 web.config
130
azuredeploy.json
| @@ -0,0 +1,130 @@ | ||
| +{ | ||
| + "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#", | ||
| + "contentVersion": "1.0.0.0", | ||
| + "parameters": { | ||
| + "siteName": { | ||
| + "type": "string", | ||
| + "metadata": { | ||
| + "description": "The name of the web app that you wish to create." | ||
| + } | ||
| + }, | ||
| + "hostingPlanName": { | ||
| + "type": "string", | ||
| + "metadata": { | ||
| + "description": "The name of the App Service plan to use for hosting the web app." | ||
| + } | ||
| + }, | ||
| + "siteLocation": { | ||
| + "type": "string", | ||
| + "defaultValue": "West US", | ||
| + "metadata": { | ||
| + "description": "The location to use for creating the web app and hosting plan. It must be one of the Azure locations that support web apps." | ||
| + } | ||
| + }, | ||
| + "repoURL": { | ||
| + "type": "string" | ||
| + }, | ||
| + "branch": { | ||
| + "type": "string" | ||
| + }, | ||
| + "slackTeamId" : { | ||
| + "type": "string", | ||
| + "metadata": { | ||
| + "description": "Slack Team ID. (e.g. https://{this}.slack.com)" | ||
| + } | ||
| + }, | ||
| + "slackApiToken" : { | ||
| + "type": "string", | ||
| + "metadata": { | ||
| + "description": "Slack API token (find it on https://api.slack.com/web)" | ||
| + } | ||
| + }, | ||
| + "slackinRelease" : { | ||
| + "type": "string", | ||
| + "allowedValues": [ | ||
| + "stable", | ||
| + "latest" | ||
| + ], | ||
| + "defaultValue": "stable", | ||
| + "metadata": { | ||
| + "description": "Slackin Release to Deploy (stable/latest)" | ||
| + } | ||
| + } | ||
| + }, | ||
| + "resources": [ | ||
| + { | ||
| + "apiVersion": "2015-08-01", | ||
| + "name": "[parameters('hostingPlanName')]", | ||
| + "type": "Microsoft.Web/serverfarms", | ||
| + "location": "[parameters('siteLocation')]", | ||
| + "properties": { | ||
| + }, | ||
| + "sku": { | ||
| + "name": "F1" | ||
| + } | ||
| + }, | ||
| + { | ||
| + "apiVersion": "2015-08-01", | ||
| + "name": "[parameters('siteName')]", | ||
| + "type": "Microsoft.Web/sites", | ||
| + "location": "[parameters('siteLocation')]", | ||
| + "dependsOn": [ | ||
| + "[resourceId('Microsoft.Web/serverfarms', parameters('hostingPlanName'))]" | ||
| + ], | ||
| + "properties": { | ||
| + "serverFarmId": "[parameters('hostingPlanName')]" | ||
| + }, | ||
| + "resources": [ | ||
| + { | ||
| + "apiVersion": "2015-08-01", | ||
| + "name": "web", | ||
| + "type": "config", | ||
| + "dependsOn": [ | ||
| + "[resourceId('Microsoft.Web/Sites', parameters('siteName'))]" | ||
| + ], | ||
| + "properties": { | ||
| + "siteProperties": { | ||
| + "webSocketsEnabled": true | ||
| + } | ||
| + } | ||
| + }, | ||
| + { | ||
| + "apiVersion": "2015-08-01", | ||
| + "name": "appsettings", | ||
| + "type": "config", | ||
| + "dependsOn": [ | ||
| + "[resourceId('Microsoft.Web/Sites', parameters('siteName'))]" | ||
| + ], | ||
| + "properties": { | ||
| + "SLACK_SUBDOMAIN": "[parameters('slackTeamId')]", | ||
| + "SLACK_API_TOKEN": "[parameters('slackApiToken')]", | ||
| + "SLACKIN_RELEASE": "[parameters('slackinRelease')]", | ||
| + "WEBSITE_NPM_DEFAULT_VERSION": "3.3.12", | ||
| + "WEBSITE_NODE_DEFAULT_VERSION": "5.1.1", | ||
| + "command": "bash scripts/azuredeploy.sh" | ||
| + } | ||
| + }, | ||
| + { | ||
| + "apiVersion": "2015-08-01", | ||
| + "name": "web", | ||
| + "type": "sourcecontrols", | ||
| + "dependsOn": [ | ||
| + "[resourceId('Microsoft.Web/Sites', parameters('siteName'))]", | ||
| + "[concat('Microsoft.Web/Sites/', parameters('siteName'), '/config/web')]" | ||
| + ], | ||
| + "properties": { | ||
| + "RepoUrl": "[parameters('repoURL')]", | ||
| + "branch": "[parameters('branch')]", | ||
| + "IsManualIntegration": true | ||
| + } | ||
| + } | ||
| + ] | ||
| + } | ||
| + ], | ||
| + "outputs": { | ||
| + "siteUri": { | ||
| + "type": "string", | ||
| + "value": "[concat('https://',reference(resourceId('Microsoft.Web/sites', parameters('siteName'))).hostNames[0])]" | ||
| + } | ||
| + } | ||
| +} |
17
bin/slackin
| @@ -0,0 +1,157 @@ | ||
| +#!/bin/bash | ||
| + | ||
| +# ---------------------- | ||
| +# Azure KUDU Deployment Script | ||
| +# Version: 1.0.2 | ||
| +# ---------------------- | ||
| + | ||
| +# 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 | ||
| +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 | ||
| +# ------------ | ||
| + | ||
| +# Node/NPM versions | ||
| +#NODE_EXE="$PROGRAMFILES\\nodejs\\5.1.1\\node.exe" | ||
| +#NPM_CMD="\"$NODE_EXE\" \"$PROGRAMFILES\\npm\\3.3.12\\node_modules\\npm\\bin\\npm-cli.js\"" | ||
| + | ||
| +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 | ||
| +# ---------- | ||
| + | ||
| +# Select node version | ||
| +selectNodeVersion | ||
| + | ||
| +echo -n "Using Node: " | ||
| +"${NODE_EXE}" -v | ||
| + | ||
| +echo -n "Using npm: " | ||
| +"${NPM_CMD}" -v | ||
| + | ||
| +echo Deploying Slackin: $SLACKIN_RELEASE | ||
| + | ||
| +if [[ "$SLACKIN_RELEASE" == "stable" ]]; then | ||
| + # Stable | ||
| + echo Installing from npm | ||
| + | ||
| + cd "$DEPLOYMENT_TARGET" | ||
| + | ||
| + # 1. Install latest release of slackin from npm | ||
| + eval $NPM_CMD install slackin | ||
| + | ||
| + # 2. Copy to root folder | ||
| + cp -rv node_modules/slackin/* . | ||
| + | ||
| + cd - > /dev/null | ||
| + | ||
| +else | ||
| + # Latest (from git repo) | ||
| + echo Installing from git repo | ||
| + | ||
| + # 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. Install npm packages | ||
| + if [ -e "$DEPLOYMENT_TARGET/package.json" ]; then | ||
| + echo npm install | ||
| + cd "$DEPLOYMENT_TARGET" | ||
| + eval $NPM_CMD install --production | ||
| + cd - > /dev/null | ||
| + fi | ||
| +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." |
Oops, something went wrong.
0 comments on commit
51887b2