Jenkins, no me rompas los builds!

Preview:

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

Jenkins ¡No me rompas los builds!

Gonzalo Sainz-Trápaga

4 de octubre de 2013PHP Conference Argentina

Gonzalo Sainz-Trápagaaka GomoX

@gomox_ar ← me madrugaron

@InvGate

Agenda

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

2005

Leo

Leo

Leo

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

Desarrollador Repositorio

JenkinsLeo

?

Build, test & release

Construir

EntregarAprender

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

Entrega Continua("CD", Continuous Delivery)

+

Por ejemploSaquemos una nueva versión de mi site

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

Con CI + CD:

1. Apretar "deploy"

90'sExtreme Programming

Build

Commit

¿Build?

Build

Commit

Deploy

Test (más)

Test

Build

Commit

Deploy

Test (más)

Test

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

(ex Hudson)

Jenkins

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

A ver...

Conceptos

● Job● Executor● Build● Artifact

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

Es un gestor de tareas.

800+Plugins

Algunos más serios que otros...

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

Nuestro entorno (!)

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

Y unas cuantas más!

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

TTP"time to production"

©

TTR"time to release"

©

5 min

Tiempo de release

2 días

Pasos necesarios

2: tag, botón.17

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

Y sobre todo, nomás sorpresas.

Y por fin lo entendí a Leo!

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

No teman!

SCMBugs

CI

¡Gracias!

:)

?

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.

Recommended