Deploy Hugo site to Github Pages with Travis CI
·2 mins
Update [2017-09-10]: This website is deploys by
Netlify. This post contains old pipeline for
deploying my static site.
This website is powered by Hugo static site generator and hosted by Github
Pages.
Repository with the name username.github.io
uses master
branch as website
content. You can also provide a Jekyll-based website to master branch, but I
prefer to use the Hugo, due to its performance and
features. Also, I like to keep both source and generated code in same repository
in different branches. For example, the source code of this site is stored in
source
branch.
Here is the source of .travis-ci.yml
file that I used to build website from
source
branch and push it to master
.
language: go
go: 1.9
branches:
only:
# Edit this line if your upstream branch is not `source`.
- source
before_install:
# You can't push any changes without providing user.name and user.email to git.
- git config user.name "${GIT_NAME}"
- git config user.email "${GIT_EMAIL}"
install:
# Get Hugo from master branch, or download latest hugo.deb package from the
# Releases tab.
- go get github.com/gohugoio/hugo
before_script:
# Clone old site files and remove them entirely. This step would save the
# history, so you wouldn't get any history-related issues if you would like
# to host your master branch via Caddy http.git plugin or something simular.
- git clone --depth 1 https://github.com/${GITHUB_USER}/${GITHUB_REPO}.git --branch ${TARGET_BRANCH} --single-branch public
- cd public && git rm -rf . && cd ..
script:
# You have to clone a theme if you cloned it to themes folder before.
# - git clone <theme_repo> themes/<theme_name>
# Otherwise you may want to add submodule with command:
# git submodule add <theme_repo> themes/<theme_name>
# and skip clone step entirely.
- hugo
after_success:
- cd public
- git add --all
- git commit -m "Generated Hugo Site by Travis CI [Build#${TRAVIS_BUILD_NUMBER}]"
# Don't forget to use --quiet flag, you don't want to expose your credentials
# to Travis' console.
- git push --quiet "https://${GITHUB_TOKEN}@github.com/${GITHUB_USER}/${GITHUB_REPO}.git" ${TARGET_BRANCH}
env:
global:
- GIT_NAME: "Travis CI"
- GITHUB_USER: username
- GITHUB_REPO: github_repo
- TARGET_BRANCH: master
GIT_EMAIL
and GITHUB_TOKEN
specified as private variables. The easest way is
to use the Repository Settings.