Build Your Own

Continuous deployment


RootedCON, 2018-03-03

Your Host this Evening


Organizer at MadridJS

Backend developer at LogTrust

What We Will Cover




Distributed Deployment



Who automatizes the automatizer?


types of Tests

Unit tests

Integration tests / system tests

Load tests

Automatic tests — are the bests!

Better than the rests!


Design a control API

Start and stop the system using the API

Self-contained tests: clean-up

Three basic rules:

  • One single button
  • Fail fast and loudly
  • No human intervention

Make your life easier

Make your systems easy to test

Practical Session 1

Create project

Create test script

Run tests

Break tests

Fix tests



Everything is coming together nicely

Dr Frankenstein

Integration Environment

Between Development and Production

Also called: preproduction, replica, build env

Enough data to run all tests

Populated with a script


Continuous Integration

Store unit and integration tests

Run the whole suite with every change

Check if something has broken

For any new error, introduce a new test

Why Integrate All the Time?

Close the gap between development and tests

Safety net for developers

Notice errors when the code is fresh

Shorten development cycles!




Strider CD

(CD > CI)

Various proprietary dumpster fires

Practical Session 2

Create integration server

Create integration script

Run integration script

Add Webhook to GitHub

Add tests to deployment



Amateurs talk about programming

Professionals care about deployment


Deploying Code

Put your code into production

Different servers, different rules

With node:

git pull
npm install
sudo service [name] restart


Do the manual way...

Or do the cool way: with code

DevOps for the win!

Three basic rules:

  • One single button
  • Fail fast and loudly
  • No human intervention

Make your life easier

Make your systems easy to deploy

Continuous Deployment

Too much of a good thing?

Shorten deployment cycles

Don't let changes accumulate

Stability increases (paradoxically?)

Practice makes perfect!

Improving Your Life

Continuous Integration

Continuous Delivery

Continuous Deployment

Reject imitations!

Test Before Deploying

Run all test suites

Verify results

Certify quality

A small but essential addition:

git pull
npm install
npm test
sudo service [name] restart

Practical Session 3

Create a production server

Create script to deploy on production

Add deployment to production

(only if tests work)

Test that it works




From one Server to Many

Horizontal architecture

One deployment, many servers

Production: listen to signal

Integration: send signals


Dynamic List of Servers

Get from your cloud provider?

Use AWS/gcloud/Azure API

Integration finds all servers

Notify all production servers

Practical Session 4

Access AWS to get list of servers

Connect to all of them and update

Modify integration server

Run distributed deployment


Bonus Track


Proactive Monitoring

Let alarms, alerts and warnings come to you

Every alarm must have:

  • A cause
  • An alert system
  • An action associated

Make your life easier

Make your systems easy to monitor

Practical Session 5

Send a notification if deployment fails

Where To Go from here

Automatic rollback

Staged deployments

Canary deployments

Feature flags

Testing in Production

Thanks! We're Hiring!


Build Your Own Continuous Deployment Infrastructure

By Alex Fernández

Build Your Own Continuous Deployment Infrastructure

RootedCON, 2018-03-03

  • 2,447