I am finally getting around to publishing again. This time from a hugo powered site generator. It’s been much easier to get hugo working than to fight with ruby. I’ve rebuilt and reformated my main computer multiple times and each time I want to write my Jekyll install was busted. So I ditched Jekyll this week.
Migration to hugo
Hugo was a quick and easy install. I’d played with it in the past for another project (one that hasn’t gone to production yet). I grabbed a pre-made theme for now (much like I did with Jekyll) to get started. Hugo also seems to be easier for me to grok from a content perspective. I hope to add more sections to this site over time to experiment with that possibility. Another big change that I wanted to try but wasn’t sure about was how I’d publish.
This site was always S3 hosted via Cloudfront but managing that also proved tough at times. I used the s3_website gem (since I was already tied to ruby for jekyll) to help but most of the time my AWS creds also were not usually configured either. Now that is less of a problem of late, as I use AWS for more stuff than I did in 2017 and 2018. However, I still needed a sustainable and quick publishing pipeline.
Hugo supports publishing to s3 much like s3_website did for me. However, now I can run builds in AWS without managing a CI server! It’s called AWS CodeBuild and it can pull my code from github triggered from a webhook and run like jenkins!
Now all I need on my computer to push new content is VSCode (my favorite editor of late) and git. The only credentials I need are my SSH key for github, which is one of the first things I do when I setup a computer. I can even handle permissions like any other AWS resource. I just needed to create a service role for my build and grant it the necessary permissions to call s3. Now my build and publish process is just as “serverless” as the site itself!
Now I publishing looks like this:
- Write content
- Commit to git
- Push to github
- AWS Codebuild is triggered from push event
- Codebuild runs a hugo build and publish
- There is no step 6