GitHub Container CI/CD
Table of Contents
Background
I’m working on setting up a fully automated static blog workflow for this blog. Eventually I’ll move this to be hosted on a Kubernetes cluster but thats still on the todo list. The basic workflow looks to be something like this
Blog Post Workflow
This workflow shows that basically I want a github action/workflow (I’m still not sure on the terminology around these) to build the site with Jekyll and then create and push a container to a container registry with this.
Building the Workflow
Since I’m using the Chirpy theme, it came with a prebuilt github workflow, I deleted almost everything in it and ended up with the following from the original
name: 'Automatic build'
on:
  push:
    branches:
      - main
    paths-ignore:
      - .gitignore
      - README.md
      - LICENSE
jobs:
  continuous-delivery:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v2
        with:
          fetch-depth: 0  # for posts's lastmod
I then modified the ruby version
      - name: Setup Ruby
        uses: ruby/setup-ruby@v1
        with:
          ruby-version: 3.1
          bundler-cache: true
I then setup a task to build the site using a shell script which just calls jekyll build
      - name: Build Site
        run: bash tools/buildsite.sh
Then the fun parts begin, I use digial ocean so I setup a container registry on that and did the needed login for DO
      - name: SEtup DigitalOcean doctl
        uses: digitalocean/action-doctl@v2
        with:
          token: ${{ secrets.DIGITALOCEAN_ACCESS_TOKEN }}
I built the container next using the standard method, although I do not currently tag a version. This is something that I need to fix still
      - name: Build Container - Mannually
        run: docker build -t mattwmarshallblog .
I then login to the container registry, tag it, and push it to the appropriate registry
      - name: Login to DO Registry
        run: doctl registry login --expiry-seconds 600
      - name: Tag Container
        run: docker tag <docker-registry-path>/mattwmarshallblog
        
      - name: Push to DO Container Registry
        run: docker push <docker-registry-path>/mattwmarshallblog
Where I Got This Info
I used the scripts included in Chirpy for the build of the site. I then found a great small container image for hosting static sites from this Here. For creating the container and pushing I got the general idea from This Blog