Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Tribulaciones de un dev en
devops
Migrando CI
a Docker
Patxi Gortázar
patxi.gortazar@gmail.com
@fgortazar
2
Migrando CI a Docker
• Who
• What
• Why
• How
3
Who
Devops en Kurento
Profesor en URJC
Haskeller aficionado
@fgortazar
https://es.linkedin.com/in/franciscogortazar
MIGR...
4
Migrando CI a Docker
• Who
• What
• Why
• How
5
What
“Kurento is an Open Source SoftwareWebRTC media server”
MIGRANDO CIA DOCKER
6
What
MIGRANDO CIA DOCKER
https://webrtc.org
7
What
MIGRANDO CIA DOCKER
8
What
MIGRANDO CIA DOCKER
9
What
MIGRANDO CIA DOCKER
10
What
MIGRANDO CIA DOCKER
11
What
Kurento es...
• Media server
• APIs (clientes)
• Tutoriales
• Aplicaciones
MIGRANDO CIA DOCKER
12
What
MIGRANDO CIA DOCKER
13
What
Kurento en cifras:
curl https://api.github.com/orgs/kurento/repos
| grep -e '"name"'
| wc -l
30 repositorios publi...
14
What
Kurento en cifras:
• Cada release requiere desplegar +80 artefactos
Paquetes debian,
módulos npm,
módulos bower,
a...
15
Migrando CI a Docker
• Who
• What
• Why
• How
16
Why
Infraestructura OpenStack
• 88 cpus
• 188GB memoria
• 3TB disco
MIGRANDO CIA DOCKER
17
Why
Para construir el media server:
●
4 nodos UbuntuTrusty
●
2 nodos última release
Ubuntu
●
2 nodos trusty (versión
es...
18
Why
MIGRANDO CIA DOCKER
deb
repo
Nightly build
chef-client
(Upgrades media server
on client nodes)
Client tests
1
2
19
Why
Deficiencias
• Máquinas separadas para media server y clientes
• Máquinas para media server divididas a su vez para...
20
Migrando CI a Docker
• Who
• What
• Why
• How
21
How
MIGRANDO CIA DOCKER
22
How
• Primera aproximación: marzo 2014 (Docker 0.9)
– No apto para producción
– Intento de lanzar esclavo Jenkins como ...
23
How
• Segunda aproximación: noviembre 2015 (Docker 1.8)
– Producto más maduro
– Procesos más claros
– Más herramientas ...
24
How
5 máquinas iguales
12 GB memoria
8 vCPUs
600 GB disco
Provisionadas con Chef Jenkins specifics + docker→
MIGRANDO C...
25
How
1 maestro
5 nodos iguales
MIGRANDO CIA DOCKER
26
How
¿Dónde vas a poner tus imágenes (privadas)?
●
Dogestry: usar s3 como registro de imágenes
MIGRANDO CIA DOCKER
27
How
¿Dónde vas a poner tus imágenes (privadas)?
●
Dogestry: usar s3 como registro de imágenes
MIGRANDO CIA DOCKER
28
How
¿Dónde vas a poner tus imágenes (privadas)?
docker run -d -p 5000:5000 --restart=always --name registry 
-v `pwd`/a...
29
How
Imágenes para builds
Imágenes para aplicaciones
Imágenes para tests
MIGRANDO CIA DOCKER
30
How
Imágenes para builds
●
Pesadas
●
Una imagen por tool version (jdk7, jdk8)
●
docker pull ahead of time (si es posibl...
31
How
Imágenes para builds en Kurento
●
dev-media-server (build-essentials, gstreamer…)
●
dev-integration (jdk, maven, no...
32
How
Matrices de versiones
●
Ubuntu
– UbuntuTrusty
– UbuntuWily
– Ubuntu Xenial
MIGRANDO CIA DOCKER
●
JDK
– JDK 7
– JDK 8
33
How
Imágenes para builds
●
Matriz configuración dev-integration
– JDK
– Maven
– Node
– Npm
– Bower
MIGRANDO CIA DOCKER
34
How
Imágenes para builds
●
Ejecutan un paso previo de instalación de
dependencias
– Ahorra imágenes
– Costoso al arranc...
35
How
Imágenes para aplicaciones
●
Media server
●
Tutoriales
●
Demos
MIGRANDO CIA DOCKER
36
How
Imágenes para tests
●
selenium/hub
●
selenium/node-chrome
●
selenium/node-firefox
MIGRANDO CIA DOCKER
●
selenium/no...
37
How
Imágenes para tests
●
kurento/node-chrome-beta
●
kurento/node-chrome-dev
●
kurento/node-firefox-beta
●
kurento/node...
38
How
Orquestación...
●
Si conoces el número y tipo de contenedores a
priori → docker compose
●
En caso contrario → docke...
39
How
Orquestación...
●
Test de interfaz
– 1-5 browsers
– Escenario de test se ejecuta varias veces
●
Chrome
●
Firefox
●
...
40
How
Orquestación...
●
Integración de cliente Docker en los tests de
kurento-client
– Arrancar, parar contenedores
– Ins...
41
How
Orquestación...
●
Topologías de red específicas
docker run --net=none …
– Todo contenedor presenta un namespace
doc...
42
How
MIGRANDO CIA DOCKER
43
How
Orquestación...
●
Topologías de red específicas
MIGRANDO CIA DOCKER
br0
NAT
192...172... 192...
docker0
44
How
Limpieza...
●
Por job
– Post build action
– Ejecuta siempre
– Devuelve el workspace a Jenkins (chown)
●
Evita https...
45
How
Limpieza...
●
Una vez al día (en la nightly)
– Parar y borrar contenedores que estén todavía corriendo
– Eliminar i...
Migrando CI
a Docker
http://www.kurento.org
https://github.com/kurento
@kurentoms
Tribulaciones de un dev en
devops
Upcoming SlideShare
Loading in …5
×

Migrando CI a Docker

925 views

Published on

Slides de la charla que impartí en Madrid Devops en marzo de 2016

Published in: Software

Migrando CI a Docker

  1. 1. Tribulaciones de un dev en devops Migrando CI a Docker Patxi Gortázar patxi.gortazar@gmail.com @fgortazar
  2. 2. 2 Migrando CI a Docker • Who • What • Why • How
  3. 3. 3 Who Devops en Kurento Profesor en URJC Haskeller aficionado @fgortazar https://es.linkedin.com/in/franciscogortazar MIGRANDO CIA DOCKER
  4. 4. 4 Migrando CI a Docker • Who • What • Why • How
  5. 5. 5 What “Kurento is an Open Source SoftwareWebRTC media server” MIGRANDO CIA DOCKER
  6. 6. 6 What MIGRANDO CIA DOCKER https://webrtc.org
  7. 7. 7 What MIGRANDO CIA DOCKER
  8. 8. 8 What MIGRANDO CIA DOCKER
  9. 9. 9 What MIGRANDO CIA DOCKER
  10. 10. 10 What MIGRANDO CIA DOCKER
  11. 11. 11 What Kurento es... • Media server • APIs (clientes) • Tutoriales • Aplicaciones MIGRANDO CIA DOCKER
  12. 12. 12 What MIGRANDO CIA DOCKER
  13. 13. 13 What Kurento en cifras: curl https://api.github.com/orgs/kurento/repos | grep -e '"name"' | wc -l 30 repositorios publicos find . -name config.xml | wc -l 334 jobs diferentes en Jenkins MIGRANDO CIA DOCKER
  14. 14. 14 What Kurento en cifras: • Cada release requiere desplegar +80 artefactos Paquetes debian, módulos npm, módulos bower, artefactos Maven (jar, sources, poms, javadocs) MIGRANDO CIA DOCKER
  15. 15. 15 Migrando CI a Docker • Who • What • Why • How
  16. 16. 16 Why Infraestructura OpenStack • 88 cpus • 188GB memoria • 3TB disco MIGRANDO CIA DOCKER
  17. 17. 17 Why Para construir el media server: ● 4 nodos UbuntuTrusty ● 2 nodos última release Ubuntu ● 2 nodos trusty (versión estable anterior) MIGRANDO CIA DOCKER Para construir los clientes: ● 4 nodos Para infraestructura (Chef): ● 1 nodo
  18. 18. 18 Why MIGRANDO CIA DOCKER deb repo Nightly build chef-client (Upgrades media server on client nodes) Client tests 1 2
  19. 19. 19 Why Deficiencias • Máquinas separadas para media server y clientes • Máquinas para media server divididas a su vez para soportar diferentes versiones de Ubuntu • Soporte de múltiples versiones del media server en la misma máquina no disponible (problemas de incompatibilidad de dependencias) • Gestión de la configuración (Chef) demasiado compleja – Especificidades de Jenkins – Especificidades del tipo de nodo MIGRANDO CIA DOCKER
  20. 20. 20 Migrando CI a Docker • Who • What • Why • How
  21. 21. 21 How MIGRANDO CIA DOCKER
  22. 22. 22 How • Primera aproximación: marzo 2014 (Docker 0.9) – No apto para producción – Intento de lanzar esclavo Jenkins como contenedor: múltiples procesos corriendo – Jobs de Jenkins poco aptos para ser portados (principalmente managed scripts) – Intento de “provisionar” las imágenes Docker con Chef (big fail!) ● Ya deberíamos haberlo intuido de test-kitchen... MIGRANDO CIA DOCKER
  23. 23. 23 How • Segunda aproximación: noviembre 2015 (Docker 1.8) – Producto más maduro – Procesos más claros – Más herramientas (plugins, hubs privados, librerías de gestión) – Jobs en Jenkins más portables (bash scripts en repositorio git) – Jobs lanzan contenedores vs el job se lanza en el contenedor ● Más control sobre los contenedores MIGRANDO CIA DOCKER
  24. 24. 24 How 5 máquinas iguales 12 GB memoria 8 vCPUs 600 GB disco Provisionadas con Chef Jenkins specifics + docker→ MIGRANDO CIA DOCKER
  25. 25. 25 How 1 maestro 5 nodos iguales MIGRANDO CIA DOCKER
  26. 26. 26 How ¿Dónde vas a poner tus imágenes (privadas)? ● Dogestry: usar s3 como registro de imágenes MIGRANDO CIA DOCKER
  27. 27. 27 How ¿Dónde vas a poner tus imágenes (privadas)? ● Dogestry: usar s3 como registro de imágenes MIGRANDO CIA DOCKER
  28. 28. 28 How ¿Dónde vas a poner tus imágenes (privadas)? docker run -d -p 5000:5000 --restart=always --name registry -v `pwd`/auth:/auth -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd -v `pwd`/certs:/certs -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key registry:2 MIGRANDO CIA DOCKER
  29. 29. 29 How Imágenes para builds Imágenes para aplicaciones Imágenes para tests MIGRANDO CIA DOCKER
  30. 30. 30 How Imágenes para builds ● Pesadas ● Una imagen por tool version (jdk7, jdk8) ● docker pull ahead of time (si es posible) ● Credenciales (firmar artefactos, despliegue...) – Inyectadas desde Jenkins como ficheros – Incorporadas al contenedor como volúmenes – Variables de entorno para especificar su ubicación MIGRANDO CIA DOCKER
  31. 31. 31 How Imágenes para builds en Kurento ● dev-media-server (build-essentials, gstreamer…) ● dev-integration (jdk, maven, node, npm, bower) ● dev-documentation (sphinx, latex) ● dev-operations (Chef DK) MIGRANDO CIA DOCKER
  32. 32. 32 How Matrices de versiones ● Ubuntu – UbuntuTrusty – UbuntuWily – Ubuntu Xenial MIGRANDO CIA DOCKER ● JDK – JDK 7 – JDK 8
  33. 33. 33 How Imágenes para builds ● Matriz configuración dev-integration – JDK – Maven – Node – Npm – Bower MIGRANDO CIA DOCKER
  34. 34. 34 How Imágenes para builds ● Ejecutan un paso previo de instalación de dependencias – Ahorra imágenes – Costoso al arrancar… pero igualmente hay que generar la imagen – Se pierden al parar y eliminar el contenedor MIGRANDO CIA DOCKER
  35. 35. 35 How Imágenes para aplicaciones ● Media server ● Tutoriales ● Demos MIGRANDO CIA DOCKER
  36. 36. 36 How Imágenes para tests ● selenium/hub ● selenium/node-chrome ● selenium/node-firefox MIGRANDO CIA DOCKER ● selenium/node-chrome- debug ● selenium/node-firefox- debug
  37. 37. 37 How Imágenes para tests ● kurento/node-chrome-beta ● kurento/node-chrome-dev ● kurento/node-firefox-beta ● kurento/node-chrome-beta-debug ● kurento/node-chrome-dev-debug ● kurento/node-firefox-beta-debug MIGRANDO CIA DOCKER https://github.com/KurentoForks/docker-selenium
  38. 38. 38 How Orquestación... ● Si conoces el número y tipo de contenedores a priori → docker compose ● En caso contrario → docker run ● El nombre de todos los contenedores lleva como prefijo el $BUILD_TAG de la ejecución del job ● El workspace del job se monta como volumen ● Todos los contenedores se paran y eliminan termine el job con éxito o no (Post build step) MIGRANDO CIA DOCKER
  39. 39. 39 How Orquestación... ● Test de interfaz – 1-5 browsers – Escenario de test se ejecuta varias veces ● Chrome ● Firefox ● … MIGRANDO CIA DOCKER
  40. 40. 40 How Orquestación... ● Integración de cliente Docker en los tests de kurento-client – Arrancar, parar contenedores – Inspeccionar contenedores – Recopilar logs – Montar volúmenes – Gestionar variables de entorno MIGRANDO CIA DOCKER
  41. 41. 41 How Orquestación... ● Topologías de red específicas docker run --net=none … – Todo contenedor presenta un namespace docker inspect -f '{{.State.Pid}}' $container – Se pueden montar topologías específicas ln -s /proc/$pid/ns/net /var/run/netns/$pid-cont ip netns list MIGRANDO CIA DOCKER
  42. 42. 42 How MIGRANDO CIA DOCKER
  43. 43. 43 How Orquestación... ● Topologías de red específicas MIGRANDO CIA DOCKER br0 NAT 192...172... 192... docker0
  44. 44. 44 How Limpieza... ● Por job – Post build action – Ejecuta siempre – Devuelve el workspace a Jenkins (chown) ● Evita https://issues.jenkins-ci.org/browse/JENKINS-24824 – Obtener contenedores asociados al job ● docker ps -a | grep $BUILD_TAG | awk '{print $1}' – Eliminar contenedores y sus volúmenes asociados ● docker rm -v ... MIGRANDO CIA DOCKER
  45. 45. 45 How Limpieza... ● Una vez al día (en la nightly) – Parar y borrar contenedores que estén todavía corriendo – Eliminar imágenes huérfanas (dangling images) docker images -f "dangling=true" -q – Eliminar volúmenes huérfanos (dangling volumes) docker volume ls -qf dangling=true – Eliminar workspaces causados por el bug https://issues.jenkins-ci.org/browse/JENKINS-24824 sudo -H find ~jenkins/workspace -name '*cleanup*' -type d -exec rm -rf {} ; MIGRANDO CIA DOCKER
  46. 46. Migrando CI a Docker http://www.kurento.org https://github.com/kurento @kurentoms Tribulaciones de un dev en devops

×