Skip to content

Instantly share code, notes, and snippets.

@rafael-neri
Forked from geekforbrains/post-receive
Created April 28, 2016 19:53
Show Gist options
  • Save rafael-neri/d10102ef6895d35ef3a0fdb44b3471e4 to your computer and use it in GitHub Desktop.
Save rafael-neri/d10102ef6895d35ef3a0fdb44b3471e4 to your computer and use it in GitHub Desktop.
Git post-receive rsync to remote server
#!/bin/bash
REPO=NAME_HERE
# Dir paths on remote server
# These are associated with branches within a git project
LIVE_BRANCH="master"
LIVE="git@host:/var/www/live/"
STAGE_BRANCH="develop"
STAGE="git@host:/var/www/stage/"
if ! [ -t 0 ]; then
read -a ref
fi
# Get branch name from ref head
IFS='/' read -ra REF <<< "${ref[2]}"
branch="${REF[2]}"
# Make tmp dir for extracting files and cleaning up .git (we dont want them on the live site)
tmpdir="/tmp/$REPO/$branch"
mkdir -p $tmpdir
# Assuming git is installed at /home/git/...
git --work-tree=$tmpdir --git-dir="/home/git/repositories/$REPO.git" checkout -f $branch
# If pushing to LIVE_BRANCH, deploy on LIVE
if [ "$LIVE_BRANCH" == "$branch" ]; then
rsync -vzre ssh --delete "$tmpdir/" $LIVE
fi
# If pushing to STAGE_BRANCH, deploy on STAGE
#if [ "$STAGE_BRANCH" == "$branch" ]; then
#rsync -vzre ssh --delete "$tmpdir/" $STAGE
#fi
rm -rf "/tmp/$REPO"
@rafael-neri
Copy link
Author

You can use sshpass. You do not need to generate the keys.

Example (change line 29):
sshpass -p "password" rsync -vzre ssh --delete "$tmpdir/" $LIVE

Install sshpass on Ubuntu:
# sudo apt-get install sshpass -y

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment