magallanes - phpmvd meet up - mayo 2014

30
MAGALLANES deployment tool Mayo 2014

Upload: andres-montanez

Post on 13-Jun-2015

304 views

Category:

Software


1 download

DESCRIPTION

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

TRANSCRIPT

Page 1: Magallanes - PHPmvd Meet Up - Mayo 2014

MAGALLANESdeployment tool

Mayo 2014

Page 2: Magallanes - PHPmvd Meet Up - Mayo 2014

¿Quién soy?• PHP Developer

‣ en @AciliaInternet

• Fulltime Nerd

‣ a la Dungeons & Dragons

• Dog ownerandresmontanez.com

Page 3: Magallanes - PHPmvd Meet Up - Mayo 2014

¿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)

Page 4: Magallanes - PHPmvd Meet Up - Mayo 2014

Lo dice GitHub

Page 5: Magallanes - PHPmvd Meet Up - Mayo 2014

¿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

Page 6: Magallanes - PHPmvd Meet Up - Mayo 2014

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

Page 7: Magallanes - PHPmvd Meet Up - Mayo 2014

¿Cómo funciona?• Configuración local y persistente• Stages

• Pre Deployment• Deployment

• Release• Post Release

• Post Deployment• Estrategias de Deployment• Releases• Tasks

Page 8: Magallanes - PHPmvd Meet Up - Mayo 2014

Iniciando un Proyectomage init --name=“My app" —-email=“[email protected]

‣ .mage‣ config

‣ general.yml‣ tasks‣ logs

Page 9: Magallanes - PHPmvd Meet Up - Mayo 2014

Creando un Entornomage add environment --name=“production" —-enableReleases

‣ .mage‣ config

‣ environments‣ production.yml

Page 10: Magallanes - PHPmvd Meet Up - Mayo 2014

Ejemplo de Entorno

Page 11: Magallanes - PHPmvd Meet Up - Mayo 2014

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

Page 12: Magallanes - PHPmvd Meet Up - Mayo 2014

Ejemplo de Ejecución

Page 13: Magallanes - PHPmvd Meet Up - Mayo 2014

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

Page 14: Magallanes - PHPmvd Meet Up - Mayo 2014

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

Page 15: Magallanes - PHPmvd Meet Up - Mayo 2014

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

Page 16: Magallanes - PHPmvd Meet Up - Mayo 2014

Ejemplo de Estrategia

Page 17: Magallanes - PHPmvd Meet Up - Mayo 2014

Stage: Post-Deployment

• Se ejecuta al final del deployment

• El opcional

• Casos de uso

• Limpiar Cachés

• Habilitar alertas

• Lanzar notificaciones

Page 18: Magallanes - PHPmvd Meet Up - Mayo 2014

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

Page 19: Magallanes - PHPmvd Meet Up - Mayo 2014

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

Page 20: Magallanes - PHPmvd Meet Up - Mayo 2014

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

Page 21: Magallanes - PHPmvd Meet Up - Mayo 2014

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)

Page 22: Magallanes - PHPmvd Meet Up - Mayo 2014

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

Page 23: Magallanes - PHPmvd Meet Up - Mayo 2014

Ejemplo de Custom Task

Page 24: Magallanes - PHPmvd Meet Up - Mayo 2014

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

Page 25: Magallanes - PHPmvd Meet Up - Mayo 2014

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

Page 26: Magallanes - PHPmvd Meet Up - Mayo 2014

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

Page 27: Magallanes - PHPmvd Meet Up - Mayo 2014

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

Page 28: Magallanes - PHPmvd Meet Up - Mayo 2014

Roadmap• Más Tasks

• Composer

• File System

• Parallel Deployment

• Optimizar estrategias de Deployment

• Más opciones de Configuración

• Tests

Page 29: Magallanes - PHPmvd Meet Up - Mayo 2014

¡Gracias!

¿Preguntas?

Page 30: Magallanes - PHPmvd Meet Up - Mayo 2014

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