It's only the beginning!

Motivation

I'm bootstrapping a minimal CI pipeline to deploy my website on successful commits to the main branch. As with all blogs by software engineers, it's going to be massively overengineered. In this case it's because I want to try out some architecture, some TDD methodology and some frameworks. It's work for fun.

Choosing tools

I'm using Jenkins as I've used this CI server before. I think I'd prefer something lighter-weight, but it's well documented and familiar, even if a little clunky. I did look into TeamCity - the current choice of my employer Doctolib, however the system requirements are higher than the tiny (t2.micro) AWS instance I plan to use.

EC2 Instance

Keeping it simple, the whole thing (CI & website) are running on an EC2 instance. A t2.micro to be exact: 1GB RAM, 1 vCPU and free-tier eligable. I've configured it with the default 30GB for now.

Prep NGINX

NGINX is set up as per Digital Ocean's recommendations, alongside Let's Encrypt for SSL. I'm likely going to add a nodejs server alongside the statically hosted assets to allow commenting on here.

Jenkins setup

Jenkins is set up by following the directions at https://www.jenkins.io/doc/book/installing/linux/. The only issue encountered was that java needed to be installed first, though for some reason the instructions on that page are in the reverse order.

Configuring the project

I have Jenkins polling git every minute for a commit on main. Any commit pushed is live within a minute!

SSH Deploy Key

I've configured my project with an SSH deploy key in github. Password protected, only used by jenkins.

Todo list

Things I want to add to my build process

Future stuff: Build basic FE framework (Overmind, React, React Query?)