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 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 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.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 Pros Mantener histórico de los deployments Poder volver a una versión anterior de forma fácil y rápida Contras Ocupa más espacio en el servidor No siempre el rollback es automático Cambios en Base de Datos Migraciones
Oops Rollback! mage releases rollback --release=-1 to:production Configuración de production.yml Se cambia el symlink en cada Host Se ejecutan las Tasks RollbackAware
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