Download - Jenkins, no me rompas los builds!
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.