Mise en Production Continue - 1 an après

Mise en Production Continue
1 an après

#devoxx

Il y a un an

On est venu faire tirer du cable à des développeurs

On a fait manipuler puppet

réf. photo

Et encore aujourd'hui

None of this stuff is really new.

What has changed is we developed new patterns and practices and
we have new tools that enable us to do this.

- Jez Humble, oct. 2012

1 an après, on vous fait la démo.


réf. photo
Allumez vos téléphones sur le wifi MEPC
Votre mission est de vérifier qu'on va déployer en continu.

Étape 0 : achetons le nom de domaine

http://192.168.1.1

Étape 1 : déployons


Gentlemen, start your engines

Gentlemen, ... deploy ?!? your engines ?

Étape 2 : re-déployons

Encore, encore !!

réf. photo

Toute chose échoue !


Et comment est-ce que je conquiers le monde ?


réf. photo

Étape 3 : déployons un backend !


réf. photo
Every build is a Release Candidate

- Jez Humble

SCRUM : chaque itération génère un
incrément de produit potentiellement livrable

Chaque build génère une machine !

Chaque build génère une machine !

1 build = 1 image docker

docker build -t mepc/app:1.0 .
docker save -o mepc_app-1.0.tar mepc/app:1.0

1 image docker = 1 déploiement

curl --data-binary @mepc_app-1.0.tar -H 'Transfer-encoding: chunked' -H 'Content-type: plain/text' "http://10.0.2.2:4243/images/load"
curl --data-binary '{"Image":"mepc/app:1.0","ExposedPorts":{"8080/tcp":{}}, "Cmd": ["/usr/bin/java", "-jar", "/opt/mepc-server.jar"]}' -H 'Content-Type: application/json' \
'http://10.0.2.2:4243/containers/create?name=app-blue'
curl --data-binary '{ "Links": [ "db:db" ] }' -H 'Content-Type: application/json' 'http://10.0.2.2:4243/containers/app-blue/start'

Un livrable validé part en prod

Bascule sur le nouveau backend

redis-cli -h 10.0.2.2 linsert frontend:appserver AFTER app http://`curl http://10.0.2.2:4243/containers/test_foo/json |sed 's/.*IPAddress":"\([0-9\.]*\).*/\1/'`:8080
redis-cli -h 10.0.2.2 ltrim frontend:appserver 0 1

Conclusions

Références