MAGALLANESdeployment tool
Mayo 2014
¿Quién soy?• PHP Developer
‣ en @AciliaInternet
• Fulltime Nerd
‣ a la Dungeons & Dragons
• Dog ownerandresmontanez.com
¿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)
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 tenemos
• Configuración persistente
• Capistrano es muy complicado y requiere ruby
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
¿Cómo funciona?• Configuración local y persistente• Stages
• Pre Deployment• Deployment
• Release• Post Release
• Post Deployment• Estrategias de Deployment• Releases• Tasks
Iniciando un Proyectomage init --name=“My app" —-email=“[email protected]”
‣ .mage‣ config
‣ general.yml‣ tasks‣ logs
Creando un Entornomage add environment --name=“production" —-enableReleases
‣ .mage‣ config
‣ environments‣ production.yml
Ejemplo de Entorno
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
Ejemplo de Ejecución
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
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
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
Ejemplo de Estrategia
Stage: Post-Deployment
• Se ejecuta al final del deployment
• El opcional
• Casos de uso
• Limpiar Cachés
• Habilitar alertas
• Lanzar notificaciones
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
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
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
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)
Tareas Propias• Son clases PHP comunes y corrientes• Extienden de Mage\Task\AbstractTask• 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
Ejemplo de Custom Task
Resultados del Task• Retorna true
• La tarea se ha ejecutado correctamente• Retorna false
• La tarea se ha ejecutado con error• Lanza Mage\Task\ErrorWithMessageException
• La tarea se ha ejecutado con error y hay mensaje• Lanza Mage\Task\SkipException
• La tarea se ha omitido
Tasks y Releases• Mage\Task\Releases\IsReleaseAware
• El task sabe que está siendo ejecutado en un entorno con releases y obtiene acceso desde la raíz
• Mage\Task\Releases\RollbackAware
• El task sabe que está siendo ejecutado en un rollback. Si no lo implementa se omite.
• Mage\Task\Releases\SkipOnOverride
• El task se omite en un --releaseOverride
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
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
Roadmap• Más Tasks
• Composer
• File System
• Parallel Deployment
• Optimizar estrategias de Deployment
• Más opciones de Configuración
• Tests
¡Gracias!
¿Preguntas?
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
Top Related