I have just finished migrating my static blog from Hexo to Hugo and one of the main things I care about is to be able to do continuous deployment of my profile and blog. There are quite a few blog posts out there but they are based on using shell scripts and it really becomes a pain to give permissions etc. In the next few lines you will see the simplest way I have found to do this (and is currently as this blog post is being published).
You will need to have:
- A Github account.
- A Travis CI account.
- A Github repository with source code of your web page with Hugo (*1)
- A Github repository with the name
<your User or Organization>.github.com(ex. kanekotic.github.com) (*2).
- A developer token from GitHub with commit capabilities (can create in github
Settings -> Developer Settings -> Personal Access Token -> Generate New Token)
I wont cover how to create a Hugo web page as this is best explained in the quick start) of Hugo.
After you are happy with the content of your blog in the repository of source code (*1), and want to start deploying you will need to add a
.travis.yml with the next content
sudo: true dist: trusty install: - sudo apt-get --yes install snapd - sudo snap install hugo script: - /snap/bin/hugo deploy: provider: pages local-dir: public repo: <User or Organization>/<User or Organization>.github.com target-branch: master skip-cleanup: true github-token: $GITHUB_TOKEN committer-from-gh: true keep-history: true on: branch: master
you will have to change the repo content to match your destination repository (*2). The previous code what does is installs hugo in the deployment machine, builds your web page and deploys using the pages plugin. If you have a custom domain make sure to set the property
fqdn to your domain, if not you will overwrite this field in each commit.
After adding the file you will have to go to Travis web page and toggle your code repository (*1) got to
More Options -> Settings -> Environment Variables and add
GITHUB_TOKEN as the token retrieved from github.
After this in any commit in the master branch of your web page you will get it deployed and go live.