Build Your Own
Continuous deployment
Infrastructure
RootedCON, 2018-03-03
Your Host this Evening
@pinchito
Organizer at
MadridJS
Backend developer at
LogTrust
What We Will Cover
Testing
Integration
Deployment
Distributed Deployment
Monitoring
Tests
Who automatizes the automatizer?
Anonymous
types of Tests
Unit tests
Integration tests / system tests
Load tests
Automatic tests — are the bests!
Better than the rests!
Automate!
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
Success!
Integration
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
Self-contained
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!
Tooling
(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
Success!
Deployment
Amateurs talk about programming
Professionals care about deployment
Anonymous
Deploying Code
Put your code into production
Different servers, different rules
With node:
git pull
npm install
sudo service [name] restart
Automate!
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
Success!
Distributed
Deployment
From one Server to Many
Horizontal architecture
One deployment, many servers
Production: listen to signal
Integration: send signals
Overview
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
Modify integration server
Run distributed deployment
Success!
Bonus Track
MONITORING
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
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,573