Skip to content

Instantly share code, notes, and snippets.

@jacek213
Created June 29, 2018 14:31
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 jacek213/538e04f50044f60fd03ec7035909a9bd to your computer and use it in GitHub Desktop.
Save jacek213/538e04f50044f60fd03ec7035909a9bd to your computer and use it in GitHub Desktop.
node app deploy script
#!/bin/bash
set -e
set -o pipefail
########### USER CONFIGURABLE OPTS ################
REMOTE_ADDR=example.com
GIT_REMOTE=git@git.example.com:example/app.git
CACHE_DIR=tmp/.cache
###################################################
timestamp=$(date +%s)
app_dir=/home/deploy/main
releases_dir=${app_dir}/releases
dest_dir=${releases_dir}/${timestamp}
current_dir=${app_dir}/current
create_cache_maybe() {
if [ ! -d "$CACHE_DIR" ]; then
git clone $GIT_REMOTE $CACHE_DIR --quiet --depth=1 --no-single-branch
fi
}
checkout() {
cd $CACHE_DIR
git fetch --quiet --all --prune --depth=1
git checkout master --quiet
git reset origin/master --hard
}
build() {
yarn install
yarn build:all
}
deploy() {
ssh deploy@${REMOTE_ADDR} /bin/bash << EOF
mkdir -p ${releases_dir}
EOF
rsync --delete -avzh -e ssh ./dist/* deploy@${REMOTE_ADDR}:${dest_dir}
ssh deploy@${REMOTE_ADDR} /bin/bash << EOF
if [ -d "$dest_dir" ]; then
ln -nsf ${dest_dir} ${current_dir}
# keep 5 latest releases, delete older ones
cd ${releases_dir} && ls -X | head -n -5 | xargs -d '\n' rm -r --
sudo systemctl restart app-main
fi
EOF
}
create_cache_maybe
checkout
build
deploy
echo "Deploy finished!"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment