KEMBAR78
Continuous integration with docker, buildbot and git | PDF
Continuous Integration
with Docker, Buildbot and Git
About Me
● Python user since 2007
● Build web based systems
using Python + Django mostly
● Gain interests in infrastructure
gradually
● Start to build my own software
company recently

twitter: @adieu
github: github.com/adieu
website: www.adieu.me
Quiz
●
●
●
●
●

How many of you know Docker
How many of you know Buildbot
How many of you know Git
How many of you deploy software to servers
How many of you have any kinds of
experience with virtualization
Continuous Integration
with Docker, Buildbot and Git
What is it
Why it matters
● More and more integration points in modern
software system
● Successful deployment became a challenge
● Catch the bug before it hits production
● DevOps and DRY
● Knowledge is kept by source code instead of
human brain
Continuous Integration
with Docker, Buildbot and Git
What is it
Demo
Why it matters
● Thin layer above the hardware provides a
fast and unified environment
● Program runs in an isolated container with
resource and network control
● Easy to use CLI and remote api
● One image could been built from a
Dockerfile and runs on multiple machines
Continuous Integration
with Docker, Buildbot and Git
What is it
Why it matters
● Highly customizable
● Lightweight but battery included
● All configuration could be kept in the source
code so that version control works
● It’s Python!
Continuous Integration
with Docker, Buildbot and Git
What is it
Why it matters
●
●
●
●

The version control system that works
Fast and efficient
Suitable for collaboration workflow
Common choice by the open source
community
● Github!
Build a Programmable
Software Company
A Case Study
The End State
Service

Service

Service

Test
run

Docker

Buildbot
deploy

Server

result

Git
trigger
The Evolution
Fabric
The Problem
● No version history
● Only server admin could deploy
● Have to setup development environment to
run tests locally
● No deploy history
● Does not work well with multiple repositories
● Non-isolated build environment
Git + Fabric

git push

Local

post-update

Git

Fabric
The Problem
● No version history
● Only server admin could deploy
● Have to setup development environment to
run tests locally
● No deploy history
● Does not work well with multiple repositories
● Non-isolated build environment
● Hard to setup
Git + Buildbot

git push

Local

webhook

Git

Buildbot
The Problem
● No version history
● Only server admin could deploy
● Have to setup development environment to run tests
locally
● No deploy history
● Does not work well with multiple repositories
● Hard to setup
● Non-isolated build environment
● Complex build steps
● Non-repeatable deploy workflow
Git + Buildbot + Docker
git push

Local

webhook

Git

Docker

Buildbot

http api
docker-py
DockerLatentBuildSlave
Benefits
● Each service has its own git repo and runs in a docker
container
● Every change is kept track of by git
● Once receiving the change, buildbot will run tests, build
a new docker image, stop the old container and start a
new one with the newly built image
● The whole system is like a program, one could change
a service by modifying the source code of its image
● Empower everyone to change everything
Demo
One More Thing...
SaltStack
Gitlab
Hubot
contact@sebible.com
Links
Continuous Integration

docker-py

http://en.wikipedia.org/wiki/Continuous_integration

https://github.com/dotcloud/docker-py

Docker

DockerLatentBuildSlave

http://www.docker.io/

https://github.com/adieu/buildbot/commit/eff651d

Buildbot

SaltStack

http://buildbot.net/

http://www.saltstack.com/

Git

Gitlab

http://git-scm.com/

http://gitlab.org/

Fabric

Hubot

http://fabfile.org/

http://hubot.github.com/
Thank You

Continuous integration with docker, buildbot and git