Recently, I’ve been looking into a new CI/CD solution for work. We want to move everything back in house, and the tools we’re currently using are feeling (and acting) a bit dated. One of the CI servers I’ve been hacking about on has been drone ci.

To make the experiment a little more interesting, I’ve started using drone as the CI/CD for my personal website. This should allow me to experiment with conditional flows as well as kick the tires on some of the various plugins.

I’m not going to cover installation here, as it’s fairly straightforward. However, I will be releasing an ansible playbook that will load up something you can easily experiment with.

Building the Site

Drone works in the same way a number of other repository based CI/CD systems work. You place a small file in the root of the repository (default: .drone.yml), and the drone server watches for changes. It uses this file to define the pipeline.

  • uses the hugo plugin
  • should be pretty simple to see what’s what
kind: pipeline
name: default

steps:
  - name: build-prod
    image: plugins/hugo
    settings:
      hugo_version: 0.55
      pull: always
      url: https://trevoroke.com
      validate: true

  ...

Deployment to AWS S3

kind: pipeline
name: default

steps:
  ...

  - name: deploy-prod
    image: plugins/s3-sync:1
    settings:
      bucket: trevoroke.com
      target: /
      source: public/**/*
      region: us-east-1
      cloudfront_distribution: <some id>
      access_key:
        from_secret: aws_access_key_id
      secret_key:
        from_secret: aws_secret_access_key
    when:
      branch:
        - master

Photo Credits

Photo by Samuel Sianipar on Unsplash