51
Jenkins ¡No me rompas los builds! Gonzalo Sainz-Trápaga 4 de octubre de 2013 PHP Conference Argentina

Jenkins, no me rompas los builds!

Embed Size (px)

DESCRIPTION

Jenkins - don't break my builds! is an introductory talk in spanish I gave at the PHP Conference 2013 in Argentina. I spoke about how I met Contintinuous Integration at Google in 2005, and how my experience has been since. I also gave tips on how to start using it in projects that have no "integration" to speak of (such as most PHP projects).

Citation preview

Page 1: Jenkins, no me rompas los builds!

Jenkins ¡No me rompas los builds!

Gonzalo Sainz-Trápaga

4 de octubre de 2013PHP Conference Argentina

Page 2: Jenkins, no me rompas los builds!

Gonzalo Sainz-Trápagaaka GomoX

@gomox_ar ← me madrugaron

Page 3: Jenkins, no me rompas los builds!

@InvGate

Page 4: Jenkins, no me rompas los builds!

Agenda

1. Qué2. Por qué3. Cómo se hace4. Cómo lo usamos

Page 5: Jenkins, no me rompas los builds!
Page 6: Jenkins, no me rompas los builds!

2005

Page 7: Jenkins, no me rompas los builds!

Leo

Page 8: Jenkins, no me rompas los builds!

Leo

Page 9: Jenkins, no me rompas los builds!
Page 10: Jenkins, no me rompas los builds!
Page 11: Jenkins, no me rompas los builds!
Page 12: Jenkins, no me rompas los builds!

Leo

Page 13: Jenkins, no me rompas los builds!

Integración Continua("CI" para los amigos)

Page 14: Jenkins, no me rompas los builds!

Desarrollador Repositorio

JenkinsLeo

Page 15: Jenkins, no me rompas los builds!

?

Page 16: Jenkins, no me rompas los builds!
Page 17: Jenkins, no me rompas los builds!

Build, test & release

Page 18: Jenkins, no me rompas los builds!

Construir

EntregarAprender

Page 19: Jenkins, no me rompas los builds!

Integración Continua("CI", Continuous Integration)

Entrega Continua("CD", Continuous Delivery)

+

Page 20: Jenkins, no me rompas los builds!

Por ejemploSaquemos una nueva versión de mi site

Page 21: Jenkins, no me rompas los builds!

A mano:1. Verificar que no es viernes a la tarde2. Instalo el código en una instancia de prueba o staging3. Ejecuto tests automáticos y manuales4. Si algo salió mal, averiguó quién lo rompió o lo intento arreglar5. Instalo de nuevo el código en prueba o staging6. Entro al servidor de producción7. Bajo el servicio del app server8. Copio el código nuevo9. Verifico que todos los datos que estaban almacenados en el

disco del server se hayan copiado bien10. Me conecto a la base de datos11. Aplico los cambios en la base de datos12. Reinicio el servicio del app server13. Verifico mínimamente que siga andando todo14. Avisar que hay una nueva versión en producción por las dudas

de que se haya roto algo

Page 22: Jenkins, no me rompas los builds!

Con CI + CD:

1. Apretar "deploy"

Page 23: Jenkins, no me rompas los builds!

90'sExtreme Programming

Page 24: Jenkins, no me rompas los builds!

Build

Commit

Page 25: Jenkins, no me rompas los builds!

¿Build?

Page 26: Jenkins, no me rompas los builds!

Build

Commit

Deploy

Test (más)

Test

Page 27: Jenkins, no me rompas los builds!

Build

Commit

Deploy

Test (más)

Test

Page 28: Jenkins, no me rompas los builds!

Y muchas otras cosas!

● Chequeos de sintaxis● Análisis estático

○ phpmd○ phpcs

● Pseudo-builds○ Ofuscar / encriptar○ Minificar JS○ Optimizar imágenes o CSS

● etc

Page 29: Jenkins, no me rompas los builds!

(ex Hudson)

Jenkins

Page 30: Jenkins, no me rompas los builds!

Instalación● Bajar un paquete para tu entorno

○ Instalador para Windows○ Instalador para Mac○ Repositorios de Debian o RPM

● o usar CloudBees (JaaS)○ 300 build minutes por mes gratis

Page 31: Jenkins, no me rompas los builds!

A ver...

Page 32: Jenkins, no me rompas los builds!

Conceptos

● Job● Executor● Build● Artifact

Page 33: Jenkins, no me rompas los builds!

Está bueno para integración continua, pero sirve para cualquier cosa.

Es un gestor de tareas.

Page 34: Jenkins, no me rompas los builds!

800+Plugins

Page 35: Jenkins, no me rompas los builds!

Algunos más serios que otros...

Page 36: Jenkins, no me rompas los builds!

Nuestra experienciaCómo lo usamos, y cómo nos va.

Page 37: Jenkins, no me rompas los builds!

Nuestro entorno (!)

Page 38: Jenkins, no me rompas los builds!
Page 39: Jenkins, no me rompas los builds!

Syntax checkTest sanidadEncriptación

AnálisisEstático

Documentación(DocBook → PDF)

StagingCloud

Generaciónde paquetes (4)

Nuevo código

Push arepositorios

Aprobación QA

Notificaciones

Page 40: Jenkins, no me rompas los builds!

Y unas cuantas más!

Una vez que está implementado, es cómodo como lugar para volcar cualquier proceso manual o automático.

Page 41: Jenkins, no me rompas los builds!

TTP"time to production"

©

TTR"time to release"

©

Page 42: Jenkins, no me rompas los builds!

5 min

Tiempo de release

2 días

Page 43: Jenkins, no me rompas los builds!

Pasos necesarios

2: tag, botón.17

Page 44: Jenkins, no me rompas los builds!

No más:● Olvidos en paquetes o deployments● Hotfixes en producción (release, upgrade)● Me da error de sintaxis● ¿Quién hizo este release?● No se puede hacer porque no está X● ¿Cómo se hacía el paquete X?● No tengo el entorno X que hace falta● No sabía que hacía falta el entorno X● No está el paquete para X

Page 45: Jenkins, no me rompas los builds!

Y sobre todo, nomás sorpresas.

Page 46: Jenkins, no me rompas los builds!

Y por fin lo entendí a Leo!

Page 47: Jenkins, no me rompas los builds!

En conclusión● Más tiempo desarrollando● Menos tiempo debugeando● Es fácil● Es gratis

No teman!

Page 48: Jenkins, no me rompas los builds!

SCMBugs

CI

Page 49: Jenkins, no me rompas los builds!

¡Gracias!

:)

Page 50: Jenkins, no me rompas los builds!

?

Page 51: Jenkins, no me rompas los builds!

Para arrancar:

● Instalarlo lleva 5 minutos● Empezar de a poco● PHPUnit o cualquier test automático son

candidatos cantados a un primer build.● Builds de juguete (PHPCS, PHPMD)● En aplicaciones SaaS, automatizar la

generación y/o actualización de entornos de testing y/o staging.