Skip to main content

Automated nanoc deployments

·328 words·2 mins· ·
Nanoc Automation Jenkins Gitlab
Ariejan de Vroom
Author
Ariejan de Vroom
Jack of all Trades, Professional Software Craftsman
Table of Contents

I’ve migrated ariejan.net from a custom Ruby on Rails application to a statically generated site with Nanoc.

Publishing my site now goes like this:

  1. Write stuff in Markdown
  2. Commit and push
  3. Watch how jenkins builds and publishes the site with nanoc and rsync.

Using nanoc
#

Nanoc is a very powerful static site generator. You can use ruby to create helpers, filters and what not. Fancy using Sass, Compass and Haml? No problem!

Simply write pages in Haml or Markdown and Nanoc will generate a complete site, including sitemap, robots.txt and RSS feed.

Once you’ve set everything up to your liking, simply run nanoc compile and your site is ready.

Nanoc also has some nice features to deploy your website through rsync, which will upload (or remove) files on a remote server as necessary.

Automate the crap out of it!
#

I’m a programmer. I like to automate repetitive tasks. So I did.

I’ve setup Jenkins with the RVM plugin and that’s all I need to have Jenkins generate and deploy my Nanoc site.

Here’s the build script I currently use:

#!/bin/bash
export NANOC_ENV=production
bundle install
nanoc compile
nanoc deploy -t public

If the compilation fails for some reason, the deployment is cancelled.

Enter gitlab
#

Now I use Gitlab to host tons of private repositories, including the one for ariejan.net.

I’ve setup a web hook that will trigger the Jenkins job when new commits are made or pushed.

This allows me to quickly edit a file, commit it and Gitlab en Jenkins will make sure the change is compiled and published to ariejan.net.

Where to go from here
#

For now, this setup suffices for me. I keep all my posts in version control, and backupped to S3 (by backing up my gitlab repositories). Adding a new story to git is sufficient for it to be published automatically on ariejan.net and in the event something goes wrong with compilation, Jenkins will notify me of the build failure.

Related

A Call to all CI Service Providers
·472 words·3 mins
Testing Bdd Tdd Rant Ci Jenkins
Deploying a third-party Rails application - like Gitlab
·396 words·2 mins
Capistrano Github Gitlab Deploy