Continuous Deployment: Hugo + Travis CI → GitHub Pages
This post shows how to automate building and deployment of Hugo static websites to GitHub Pages using Travis CI. Builds are automatically triggered when pushing to the Git repository, and deployment when a build on the master branch succeeds.
Hugo is a static website generator written in Go, and only requires a single binary. The easiest way to run Hugo in the Travis CI container is by including the specific hugo binary with which to build the site as part of the repository (eg. in the directory /binaries
). This way you don’t need to download the Hugo release on each build job, which may take several minutes. You can get the latest binary from the Hugo releases page (use the hugo_<VERSION>_Linux-64bit.tar.gz
file and include only the hugo
binary).
For syntax highlighting, you also need Pygments installed. In the .travis.yml
file this is done by specifiying the python-pygments
package as apt addon.
Configuring Travis CI
On the Travis CI homepage on your profile page you need to enable the GitHub repository you want to build.
Travis CI also needs write-access to the GitHub repository, to be able to update the gh-pages
branch. For this we provide a GitHub token environment variable named GITHUB_TOKEN
in this example. Environment variables can be specified on the Travis CI website in the repository settings (see the Travis environment variables docs). You can generate this token in your GitHub account settings under “Personal access tokens
-> Generate new token” (ensure that the “repo” checkbox is enabled).
For a content layout like here (Hugo content in /src/
, theme name ghoust
, Hugo binary in /binaries/hugo
), this is the complete .travis.yml
:
# Install the apt prerequisites
addons:
apt:
packages:
- python-pygments
# Clean and don't fail
install:
- rm -rf public || exit 0
# Build the website
script:
- cd src
- ../binaries/hugo --theme=ghoust
# Deploy to GitHub pages
deploy:
provider: pages
skip_cleanup: true
local_dir: public
github_token: $GITHUB_TOKEN # Set in travis-ci.org dashboard
on:
branch: master
References:
- GitHub Pages
- Travis CI Documentation: GitHub Pages Deployment
- Travis environment variables docs
- Repostiory for a demo Hugo website
Update 2017-04-26: Several people suggested to use Netlify for hosting the pages instead of GitHub Pages. Netlify has great continuous deployment integration, free SSL certificates, custom redirects, form handling and more.
Let me know if you have any feedback and/or ideas via @metachris.