This began a while ago where we had to remake our continuous delivery pipeline to be more functional rather than bundle everything and go. We had a lot of Jenkins pipelines stuck because we were doing a lot of parallel build functions as well as deployment methods that specifically tied into the pipeline ssh into the deployment server and trigger a pseudo automatic pull and deploy.

Our old pipeline was like this

Build NPM Test Source Code Build Production version zip and upload to s3 ssh into server pull and unpack

Many of you reading this will spot a few issues in this delivery cycle. Namely 4 & 5. This means we rely on 4 points of failure which are

What if the package isn’t zipped correctly? What if the network drops packets or drops completely? What if ssh fails? What if download and unpack fails?

Some may say ok why don’t you hire a specific dev ops engineer and be done with it and let them maintain it. Well, we are a startup so we try to do everything ourselves and who doesn’t like a challenge.

So we started on our new release cycle and wanted to clear this once and for all. We also wanted to take this opportunity to remove any requirements and maintenance that is required on the server such as certificate updates and nginx config so we set about with docker.