making my own wercker box to run hugo

Jun 2, 2016   #docker  #hugo  #wercker 

In a recent post I mentioned following the tutorial Automated deployments with Wercekr to build and deploy my new Hugo generated blog.

It’s an excellent post, which uses existing community steps to make things quick and easy to setup.

However something I noticed was that it’s using a full debian container and so the the build steps were doing quite a lot of work. e.g.

... The following extra packages will be installed: file libexpat1 libffi6 libmagic1 libpython-stdlib libpython2.7-minimal libpython2.7-stdlib libsqlite3-0 libssl1.0.0 mime-support python python-chardet python-minimal python-pkg-resources python2.7 python2.7-minimal Suggested packages: python-doc python-tk python-distribute python-distribute-doc ttf-bitstream-vera python2.7-doc binutils binfmt-support The following NEW packages will be installed: file libexpat1 libffi6 libmagic1 libpython-stdlib libpython2.7-minimal libpython2.7-stdlib libsqlite3-0 libssl1.0.0 mime-support python python-chardet python-minimal python-pkg-resources python-pygments python2.7 python2.7-minimal 0 upgraded, 17 newly installed, 0 to remove and 0 not upgraded. Need to get 6648 kB of archives. After this operation, 27.3 MB of additional disk space will be used. ...

Being curious about the whole box/container setup required, I decided to replace the box used in the tutorial (debian), and the steps provided arjen/hugo-build with my own.

I started by installing wercker-cli

brew tap wercker/wercker brew install wercker-cli

Created a hugo docker container, and pushed it to the hub.

And then updated my wercker.yml file to use it, and to have a dev section.

box: halberom/hugo dev: steps: - internal/watch: code: hugo server

Followed by trying it out! (and crossing fingers it would work)

wercker dev

sadly not the case

--> Executing pipeline --> Running step: setup environment Pulling from halberom/hugo: latest Already exists: 420890c9e918 Already exists: e4d561447a5c Already exists: f27a57ccb1c2 Already exists: 1965ea271a7c Digest: sha256:76af88bd222a8b6859c26ea696c096627d259042cf05004ef19d4c3de44906c5 Status: Image is up to date for halberom/hugo:latest ERROR --> Step failed: setup environment 2.73s Command cancelled due to error ERROR Command cancelled due to error WARNING Box container has already stopped. FATAL Exiting.

Thus ensued a bit of –debug/–verbose usage, and ultimately

DEBU[0002] runner| Setting up guest (base box) INFO[0002] literal| [ ] stdin "mkdir -p \"/pipeline/output\"\n" INFO[0002] literal| [ ] stdin "echo 91de967b-0050-40c9-93a2-c21457c3d78e $?\n" DEBU[0002] dockertr| Container finished with status code: 127 1014921707a1284f00de616a8b1b2009cf4cecfae4ff825a2ca8707570890115

Some searching around that, and I found the following 2 very useful links

So then my wercker.yml file became

box: id: halberom/hugo cmd: /bin/sh dev: steps: - internal/watch: cmd: /bin/sh code: hugo server build: steps: - script: name: run hugo code: | hugo deploy: box: debian steps: - install-packages: packages: git ssh-client - lukevivier/gh-pages@0.2.1: token: $GIT_TOKEN domain: blog.halberom.co.uk basedir: public

Testing worked, with several new folders created locally _builds, _steps, _projects, and I was able to find (under _projects) the generated output.

The new setup means I can now run wercker dev|build locally and can easily see exactly what wercker is doing behind the scenes, in terms of dir structures and ENV variables, with verbose/debug enabled.

What’s also nice, is that now my build stage now only takes 9 seconds, vs approx 45 seconds or more previously.

Note that for now I’m sticking with the tutorial’s deploy steps, which means I still need the debian container. Next steps will be looking at that, and also finishing my hugo docker image so it’s a bit tidier.