In publishing this web site, I use vim, Git, SSH, Docker, Jekyll (which uses a lot of Ruby) and Gitlab. A push to Gitlab, triggers running a job in my jobrunner tool (could be Jenkins or Go), which runs a command on a remote machine, which runs a git pull
, builds the docker container (if needed), runs Jekyll on the new content, rsyncs the new content in place and removes any old stuff that’s now gone.
The tricky part was getting the remote git command to use a specific SSH key. What I ended up doing was this:
# prepare to run git with SSH with our private deploy key
GITTMP=`mktemp`
CLONE_DIR=`dirname $0`
cd $CLONE_DIR
echo "set -e" >> $GITTMP
echo "set -u" >> $GITTMP
echo "ssh -i $CLONE_DIR/deploy_keys/water \$@" >> $GITTMP
chmod +x $GITTMP
export GIT_SSH=$GITTMP
# pull new changes
git pull
This created a bash script that when invoked “injected” -i $CLONE_DIR/...path_to_key
into the arguments to SSH. Git uses the binary specified in GIT_SSH
whenever it wants to use SSH, and combined this is one way to get Git to use a specific SSH key.