Heres how I auto deploy my app, and how i roll back if something goes wrong.

sh scripts/deploy.sh deploy
sh scripts/deploy.sh deploy rollback

It couldnt be easier.

#!/bin/bash

TARGET=example.com
TARGET_BASE=/var/www/p
TARGET_ARCHIVE=$TARGET_BASE/analyse.tgz
TARGET_LOCATION=$TARGET_BASE/analyse

case "$1" in
deploy)
echo "building"
yeoman build
if [ ! -d dist ];
then
echo "yeoman didnt build"
exit 1
fi
cd dist
tar -czf ../dist.tgz *
cd ..

echo "backing up"
ssh $TARGET << EOF
if [ -f $TARGET_ARCHIVE ];
then
mv $TARGET_ARCHIVE $TARGET_ARCHIVE.1
fi
EOF

echo "deploying"
scp dist.tgz $TARGET:$TARGET_ARCHIVE

ssh $TARGET << EOF
echo "cleaning old deployment"
rm -rf $TARGET_LOCATION/*

echo "extracting new build"

if [ -f $TARGET_LOCATION ];
then
mkdir $TARGET_LOCATION
fi
tar xfz $TARGET_ARCHIVE -C $TARGET_LOCATION
EOF

;;
rollback)
echo "rolling back"

ssh $TARGET << EOF
rm -rf $TARGET_LOCATION/*

mv $TARGET_ARCHIVE.1 $TARGET_ARCHIVE
tar xfz $TARGET_ARCHIVE -C $TARGET_LOCATION

EOF
;;
*)
echo "usage: $0 [deploy] [rollback]"
;;
esac
exit 0