Update: I’m now using BitBucket Pipelines instead.
Since moving this site to S3, I have been using a
post-commit hook to deploy it with s3cmd, which looks like this:
bucket='andrew-jones.com' branch=$(git rev-parse --abbrev-ref HEAD) if [[ "$branch" == "master" ]]; then hugo echo "Syncing public/* with s3://$bucket." s3cmd --acl-public --no-delete-removed --no-progress --cf-invalidate --acl-public sync public/* s3://$bucket echo -e "\nUpdated s3://$bucket." fi
That worked OK, but it’s not great that it depends on my environment. I use two computers and want to be able to update this site from either of them, and I want to ensure they are built in exactly the same way with the same versions of Hugo and s3cmd.
So I looked around for a cloud hosted continuous delivery platform and eventually came across Wercker. It’s a Docker based service that is fully integrated with Bitbucket (where I host my repository), and has an impressive free plan.
Specifying the build steps is done using a simple yaml file, and by following this guide on the hugo website I got it up and running in no time, swapping the Git pages deploy step with this:
deploy: steps: - email@example.com: key-id: $KEY key-secret: $SECRET bucket-url: s3://andrew-jones.com source-dir: public delete-removed: false opts: --no-delete-removed --no-progress --cf-invalidate --acl-public
I’m very impressed with Wercker - it couldn’t have been easier to get this done. Look forward to using it for more of my personal projects.