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=“
[email protected]”
‣
.mage
‣ general.yml
‣ config
‣ 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
• Post Release
• Se realiza el cambio de symlink
• 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
Comentarios de: Magallanes Presentacion PHP MeetUp Mayo 2014 (0)
No hay comentarios