Today I have migrated the static generator for this site from Nikola to Hugo. Part of the motivation has been trying a new technology, part of it, having less movable parts. Nikola is great but carries quite a lot of dependencies (specially with the themes). My previous workaround involved building a Docker image with the tools, and using that image inside a GitlabCI pipeline that built the statics and deployed them to my server.
My articles were written in Markdown, so I didn’t have to change the contents. I made a quick-and-dirty Python script to reformat the headers of each article (specially
date). Appart from that, I chose a theme and wrote a small config.toml.
Hugo is a Golang-compiled single binary, so it is operationally much simpler to deploy, on my laptop and on the CI pipeline. For this new version of the blog, I have moved the repo to Github and the CI to Travis. This is my new
language: go go: - 1.8 before_install: - openssl aes-256-cbc -K $encrypted_84f17b3aef8a_key -iv $encrypted_84f17b3aef8a_iv -in deploy/server.pem.enc -out deploy/server.pem -d addons: apt: packages: - rsync - openssh-client install: - eval $(ssh-agent -s) - chmod 600 deploy/server.pem && ssh-add deploy/server.pem - mkdir -p ~/.ssh - echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config - GOPATH=$HOME/go go get github.com/spf13/hugo script: - "$HOME/go/bin/hugo" after_success: - rsync -avz --delete public/ $BLOG_DEPLOYMENT_URL
The only tricky part is allowing ssh access to my server. After reading the documentation, I have opted for commiting an encrypted version of a
.pem file that I have generated for this purpose. The encryption is performed once using the
travis command line interface:
travis login travis encrypt-file deploy/server.pem --add
This command executes an AES-256 simmetric encryption and add the line to your
.travis.yml to perform the decoding at the beginning of the execution.
The only issue that I currently face is the fact that the old URLs of the posts do not work, because Hugo expects the posts inside a
post folder. I definitely need to read the documentation :-)