Magallanes: Presentación PHP MeetUp

Anuncio
MAGALLANES
deployment tool
Mayo 2014
¿Quién soy?
•
PHP Developer
‣
•
Fulltime Nerd
‣
•
en @AciliaInternet
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
‣
‣
tasks
‣
logs
general.yml
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
•
•
TarGz
•
•
Es la estrategia usada cuando hay releases
Disabled
•
•
Es la estrategia usada cuando no hay releases
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
•
•
Retorna false
•
•
La tarea se ha ejecutado con error
Lanza Mage\Task\ErrorWithMessageException
•
•
La tarea se ha ejecutado correctamente
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
•
•
Mage\Task\Releases\RollbackAware
•
•
El task sabe que está siendo ejecutado en un
entorno con releases y obtiene acceso desde la raíz
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
Descargar