Skip to content

Instantly share code, notes, and snippets.

@EECOLOR
Last active February 8, 2017 13:28
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save EECOLOR/f4dcbc6ed37f12cc9dd1a0d10902b995 to your computer and use it in GitHub Desktop.
Save EECOLOR/f4dcbc6ed37f12cc9dd1a0d10902b995 to your computer and use it in GitHub Desktop.
#!/bin/bash -e
#DEPLOY_SERVERS=(vm273 vm274)
#APP_NAME=via-autobeheer-app-test
#DIST=dist/
#STATUS_CHECK_BASE=https://via-autobeheer-app-tst.firebaseio.com
#STATUS_CHECK_LOCATIONS=(/userData/status /token/status)
#SERVICES=(authentication-service userdata-service)
# .oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo. #
info () {
echo -n -e "\033[34m\u272A\033[0m\033[32m\u272A\033[0m \e[1m$1 \e[0m"
}
error_exit () {
echo -e "\e[31mError:\e[0m $1"
exit 1
}
show_log () {
deploy_server=$1
servicename=$2
# use pipe so exit code supressed when file is not accessible
ssh tipdeployment@$deploy_server -i ~/.ssh/tipdeployment "sudo /bin/cat /var/log/upstart/$servicename.log | tail -n 70"
}
eval deploy_servers=$DEPLOY_SERVERS
eval services=$SERVICES
eval status_check_locations=$STATUS_CHECK_LOCATIONS
status_check_base=$STATUS_CHECK_BASE
stack="node"
if [ -n "${APP_NAME+1}" ]; then
appname=$APP_NAME
else
appname=$(node -e "console.log(require('./package.json').name.replace(/-/g, ''));")
fi
echo "$appname"
distfolder="$WORKSPACE/$DIST"
remotebasedir="/opt/"
figlet "$stack"
for deploy_server in "${deploy_servers[@]}"
do
:
echo -en '\n\n'
#check ssh connection
ssh tipdeployment@$deploy_server -i ~/.ssh/tipdeployment "exit" || error_exit "SSH connection to $deploy_server failed."
for service in "${services[@]}"
do
:
servicename="$appname-$service"
echo $(info "Stop $servicename")
ssh tipdeployment@$deploy_server -i ~/.ssh/tipdeployment "sudo initctl status $servicename"
if ssh tipdeployment@$deploy_server -i ~/.ssh/tipdeployment "sudo initctl status $servicename" | grep -vq "running"; then
echo "Already stopped"
else
ssh tipdeployment@$deploy_server -i ~/.ssh/tipdeployment "sudo initctl stop $servicename"
sleep 4
fi
done
echo $(info "Sync files to $deploy_server")
rsync -avz \
-e "ssh -i $HOME/.ssh/tipdeployment" "$distfolder" tipdeployment@$deploy_server:$remotebasedir$appname/ \
--delete \
--stats \
--human-readable \
--exclude=.git/ \
--itemize-changes \
#--exclude-from 'exclude-list.txt'
counter=0
for service in "${services[@]}"
do
:
port=${ports[counter]}
servicename="$appname-$service"
status_check_location=${status_check_locations[counter]}
monitor_url="$status_check_base$status_check_location/$deploy_server.json"
echo $(info "Start $servicename ($port)")
ssh tipdeployment@$deploy_server -i ~/.ssh/tipdeployment "sudo initctl start $servicename"
sleep 4
if ssh tipdeployment@$deploy_server -i ~/.ssh/tipdeployment "sudo initctl status $servicename" | grep -vq "running"; then
show_log "$deploy_server" "$servicename"
error_exit "Starting $servicename failed!"
fi
echo $(info "Waiting for $servicename to come online at $monitor_url...")
timer=0
expected='"online"'
until [ $(curl -s "$monitor_url") == $expected ]; do
echo -n "."
sleep 1
timer=$[timer + 1]
if [ "$timer" -ge "60" ]; then
echo
show_log "$deploy_server" "$servicename"
error_exit "Service $servicename does not respond on port $port!"
fi
done
show_log "$deploy_server" "$servicename"
counter=$[counter + 1]
done
echo
done
echo -e "\e[42mdone!\e[0m";
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment