MAGALLANES
deployment tool
Mayo 2014
¿Quién soy?
• PHP Developer
‣ en @AciliaInternet
• Fulltime Nerd
‣ a la Dungeons & Dragons
• Dog owner
andresmontanez.com
¿Qué es Magallanes?
• Una Herramienta
• 100% PHP
• Para estandarizar deployments
• No se apega a ningún framework
• Ayudas...
Lo dice GitHub
¿Cómo surge?
• Forma ordenada de publicar la aplicación
• Sólo con shell script no alcanza
• Usar lo que ya conocemos y te...
Instalando
• Composer
"andres-montanez/magallanes": "1.0.*"
• User space
Descargando el código de magephp.com
bin/mage ins...
¿Cómo funciona?
• Configuración local y persistente
• Stages
• Pre Deployment
• Deployment
• Release
• Post Release
• Post...
Iniciando un Proyecto
mage init --name=“My app" —-email=“notify@my.app”
‣ .mage
‣ config
‣ general.yml
‣ tasks
‣ logs
Creando un Entorno
mage add environment --name=“production" —-enableReleases
‣ .mage
‣ config
‣ environments
‣ production....
Ejemplo de Entorno
El primer Deployment
mage deploy to:production
• Configuración de production.yml
• Se copia el código a cada Host
• Se eje...
Ejemplo de Ejecución
Stage: Pre-Deployment
• Es lo primero en ejecutarse
• Es opcional
• Casos de uso
• Actualizar código
• Instalar vendors
• ...
Stage: Deployment
• Se ejecuta por cada Host definido
• No necesita tener Tasks definidas
• Casos de uso
• Deployment de c...
Estrategias de Deployment
• Rsync
• Es la estrategia usada cuando no hay releases
• TarGz
• Es la estrategia usada cuando ...
Ejemplo de Estrategia
Stage: Post-Deployment
• Se ejecuta al final del deployment
• El opcional
• Casos de uso
• Limpiar Cachés
• Habilitar aler...
Stage: Releases
• Si están habilitados los releases…
• Release
• Se realiza el cambio de symlink
• Post Release
• Se puede...
Usando Releases
• Ocupa más espacio en el servidor
• No siempre el rollback es automático
• Cambios en Base de Datos
• Mig...
Oops… Rollback!
• Configuración de production.yml
• Se cambia el symlink en cada Host
• Se ejecutan las Tasks RollbackAwar...
Tareas Incluidas
• SCM (solo git)
• Update (scm/update)
• Symfony 2
• Assetics Dump (symfony2/assetics-dump)
• Assets Inst...
Tareas Propias
• Son clases PHP comunes y corrientes
• Extienden de MageTaskAbstractTask
• Deben pertenecer al namespace T...
Ejemplo de Custom Task
Resultados del Task
• Retorna true
• La tarea se ha ejecutado correctamente
• Retorna false
• La tarea se ha ejecutado con...
Tasks y Releases
• MageTaskReleasesIsReleaseAware
• El task sabe que está siendo ejecutado en un entorno
con releases y ob...
Comandos
• init, install, upgrade y add
• list environments
• lock to:production y unlock to:production
• deploy to:produc...
Mage Tips
• APC
• Borrar cache con cURL
• Reiniciar php-fpm o Apache
• Shared Folder
• Directorio externo a los releases
•...
Roadmap
• Más Tasks
• Composer
• File System
• Parallel Deployment
• Optimizar estrategias de Deployment
• Más opciones de...
¡Gracias!
¿Preguntas?
Más Info
• Código: github.com/andres-montanez/Magallanes
• Documentación: magephp.com
• API: api.magephp.com/1.0
• Packagi...
Próxima SlideShare
Cargando en…5
×

Magallanes - PHPmvd Meet Up - Mayo 2014

806 visualizaciones

Publicado el

Presentación de Magallanes para la meetUp de PHPmvd - Mayo 2014.

Magallanes es una herramienta de deployment de aplicaciones PHP construida 100% con PHP.
Más información en http://www.magephp.com

Publicado en: Software
0 comentarios
2 recomendaciones
Estadísticas
Notas
  • Sé el primero en comentar

Sin descargas
Visualizaciones
Visualizaciones totales
806
En SlideShare
0
De insertados
0
Número de insertados
233
Acciones
Compartido
0
Descargas
2
Comentarios
0
Recomendaciones
2
Insertados 0
No insertados

No hay notas en la diapositiva.

Magallanes - PHPmvd Meet Up - Mayo 2014

  1. 1. MAGALLANES deployment tool Mayo 2014
  2. 2. ¿Quién soy? • PHP Developer ‣ en @AciliaInternet • Fulltime Nerd ‣ a la Dungeons & Dragons • Dog owner andresmontanez.com
  3. 3. ¿Qué es Magallanes? • Una Herramienta • 100% PHP • Para estandarizar deployments • No se apega a ningún framework • Ayudas para cualquier framework • PSR-0, PSR-1, PSR-2 (php-fig.org)
  4. 4. Lo dice GitHub
  5. 5. ¿Cómo surge? • Forma ordenada de publicar la aplicación • Sólo con shell script no alcanza • Usar lo que ya conocemos y tenemos • Configuración persistente • Capistrano es muy complicado y requiere ruby
  6. 6. Instalando • Composer "andres-montanez/magallanes": "1.0.*" • User space Descargando el código de magephp.com bin/mage install --installDir=~/magallanes • System Wide bin/mage install --systemWide --installDir=/opt/magallanes
  7. 7. ¿Cómo funciona? • Configuración local y persistente • Stages • Pre Deployment • Deployment • Release • Post Release • Post Deployment • Estrategias de Deployment • Releases • Tasks
  8. 8. Iniciando un Proyecto mage init --name=“My app" —-email=“notify@my.app” ‣ .mage ‣ config ‣ general.yml ‣ tasks ‣ logs
  9. 9. Creando un Entorno mage add environment --name=“production" —-enableReleases ‣ .mage ‣ config ‣ environments ‣ production.yml
  10. 10. Ejemplo de Entorno
  11. 11. El primer Deployment mage deploy to:production • Configuración de production.yml • Se copia el código a cada Host • Se ejecutan las Tasks en orden
  12. 12. Ejemplo de Ejecución
  13. 13. Stage: Pre-Deployment • Es lo primero en ejecutarse • Es opcional • Casos de uso • Actualizar código • Instalar vendors • Pre-procesos • Assets • Assetics • Compilación • etc
  14. 14. Stage: Deployment • Se ejecuta por cada Host definido • No necesita tener Tasks definidas • Casos de uso • Deployment de código • Crear enlaces simbólicos • Realizar WarmUps de cachés
  15. 15. Estrategias de Deployment • Rsync • Es la estrategia usada cuando no hay releases • TarGz • Es la estrategia usada cuando hay releases • Disabled • No copia ningún archivo • Git Rebase (experimental) • No se copia código, se hace rebase en el destino
  16. 16. Ejemplo de Estrategia
  17. 17. Stage: Post-Deployment • Se ejecuta al final del deployment • El opcional • Casos de uso • Limpiar Cachés • Habilitar alertas • Lanzar notificaciones
  18. 18. Stage: Releases • Si están habilitados los releases… • Release • Se realiza el cambio de symlink • Post Release • Se pueden ejecutar Tasks • Caso de Uso • Purgar APC • Purgar Cachés Persistenes • WarmUp de Cachés especiales
  19. 19. Usando Releases • Ocupa más espacio en el servidor • No siempre el rollback es automático • Cambios en Base de Datos • Migraciones • Mantener histórico de los deployments • Poder volver a una versión anterior de forma fácil y rápida Pros Contras
  20. 20. Oops… Rollback! • Configuración de production.yml • Se cambia el symlink en cada Host • Se ejecutan las Tasks RollbackAware mage releases rollback --release=-1 to:production
  21. 21. Tareas Incluidas • SCM (solo git) • Update (scm/update) • Symfony 2 • Assetics Dump (symfony2/assetics-dump) • Assets Install (symfony2/assetics-dump) • Cache Clear (symfony2/cache-clear) • Cache Warmup (symfony2/cache-warmup) • Magento • Clear Cache (magento/clear-cache) • Clear Full Page Cache (magento/clear-full-page-cache)
  22. 22. Tareas Propias • Son clases PHP comunes y corrientes • Extienden de MageTaskAbstractTask • Deben pertenecer al namespace Task • Obliga a implementar getName() y run() • Se almacenan en el directorio .mage/tasks • Casos de uso • Operaciones de File System • Ejecución de comandos propios • Interacción con otros sistemas
  23. 23. Ejemplo de Custom Task
  24. 24. Resultados del Task • Retorna true • La tarea se ha ejecutado correctamente • Retorna false • La tarea se ha ejecutado con error • Lanza MageTaskErrorWithMessageException • La tarea se ha ejecutado con error y hay mensaje • Lanza MageTaskSkipException • La tarea se ha omitido
  25. 25. Tasks y Releases • MageTaskReleasesIsReleaseAware • El task sabe que está siendo ejecutado en un entorno con releases y obtiene acceso desde la raíz • MageTaskReleasesRollbackAware • El task sabe que está siendo ejecutado en un rollback. Si no lo implementa se omite. • MageTaskReleasesSkipOnOverride • El task se omite en un --releaseOverride
  26. 26. Comandos • init, install, upgrade y add • list environments • lock to:production y unlock to:production • deploy to:production —branch=“dev1” • deploy to:production --overrideRelease • releases rollback --release=-1 to:production • releases list to:production • compile • version
  27. 27. Mage Tips • APC • Borrar cache con cURL • Reiniciar php-fpm o Apache • Shared Folder • Directorio externo a los releases • Se engancha con enlaces simbólicos • Ramas • “Arrastrar” la configuración entre ramas • Asegurarse de hacer track de la rama • ¿Cuando no usar Releases? • Cuando no importa tener un histórico • O no se tiene necesidad de hacer rollback • Impacto del releaseOverride • Puede que en algunas aplicaciones no se reflejen cambios • No es la solución para todo
  28. 28. Roadmap • Más Tasks • Composer • File System • Parallel Deployment • Optimizar estrategias de Deployment • Más opciones de Configuración • Tests
  29. 29. ¡Gracias! ¿Preguntas?
  30. 30. Más Info • Código: github.com/andres-montanez/Magallanes • Documentación: magephp.com • API: api.magephp.com/1.0 • Packagist: más de 2100 instalaciones • Social: @MagePHP • Contacto: andresmontanez.com

×