TALLER DE PHING  Subversion and PHING :  How-to update successfully your website. <ul><li>Fernando Palomo García  </li><ul...
[email_address] </li></ul></ul>
INDEX <ul><li>1.- Vista General
2.- Control de versiones: Subversion </li><ul><li>Breve intro a control de versiones
Conceptos de subversion
Practica de subversion </li></ul><li>3.- Script de despliegue: PHING  </li><ul><li>Breve intro a scripts de despliegue
Conceptos de PHING </li><ul><li>Estructura de un script
Comandos básicos
Extendiendo Phing </li></ul><li>Scripts de ejemplo
Generemos un script entre todos! </li></ul></ul>
1.- Vista General <ul><li>Equipo de desarrollo trabajando en paralelo
Plataforma con multiples servidores </li><ul><li>DB, Static content, Dynamic content, Proxy para contenido estático, svn, ...
Nuevas funcionalidades
Mejoras de funcionalidades </li></ul></ul>
1.- Vista General <ul><li>Garantizar: </li><ul><li>Consistencia de datos </li><ul><li>Archivos en servidores www
DB
Caché
Sesiones... </li></ul><li>Misma versión en los diferentes recursos:   </li><ul><li>Estructuras de DB corresponden con apli...
Contenido estático corresponde con aplicación(prefijos) </li></ul><li>Disponibilidad de recursos </li><ul><li>Es necesario...
Realizar actualizaciones fuera de horas punta
Test de despliegue en entorno controlado </li></ul></ul></ul>
2.- Control de Versiones: Subversion <ul><li>Qué nos proporciona? </li><ul><li>Trabajo en equipo, desarrollo en paralelo. ...
Upcoming SlideShare
Loading in …5
×

Taller de Phing - phpconference 2009 barcelona

2,748 views
2,663 views

Published on

Taller impartido por Fernando Palomo en la phpconference de barcelona en 2009

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,748
On SlideShare
0
From Embeds
0
Number of Embeds
23
Actions
Shares
0
Downloads
40
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide
  • Bienvenidos frikis del php, disfrutad Soy fernando, qué hago, experiencia anterior relacionada con sistemas Motivación del taller =&gt; necesidad de actualizacion Taller != conferencia =&gt; debatid, preguntad, contad cómo lo solucionais vosotros No hay 1 sola forma de solucionarlo Palabra mágica =&gt; depende TALLER - COLOQUIO Quien usa svn? Quien scripts de despliegue? Ejemplo de cagada. Implantamos memcache por primera vez,pero al pasar no se aplicó
  • Explicar lo que vamos a hacer en cada sección La primera hora entre general y subversion Un breve descanso entre horas La segunda hora para phing
  • Situación típica, servidor de svn en local y réplica en live. Trabajamos sobre los mismos archivos Arquitectura en mybrands -&gt; 3 web , 2db master-master, share nfs for media =&gt; migrate to hdfs o mogilefs -&gt; update de datos via rsync -&gt; images via static server =&gt; no cookie y mas conexiones -&gt;
  • Una actualización no puede dejar un nodo activo a medio actualizar. Monitorizar que el contenido es el mismo en los www, db slaves... Actualizar fuera de hora: minimizar pérdidas en caso de down time, incidentes, el rendimiento de la aplicación no sufre
  • Svn fue diseñado para reemplazar a cvs Svn -&gt; el numero de revision pertenece al repositorio, no a los archivos. Cvs envia archivos completos desde cliente a servidor, svn solo diff Svn Permite bloqueo de archivos , bueno para binarios Más sobre mercurial
  • Eclipse =&gt; subclipse Svn:// =&gt; xinetd , /usr/local/bin/svnserve , puerto 3690 Netbeans version compatible with console version in linux . Eclipse not compatible Eclipse muchos fallos con svn, demasiado lento para actualizar http://svn.collab.net/repos/svn/trunk/notes/svnsync.txt
  • Repositorio: almacen central de datos Wc: directorio con archivos en local.area de trabajo privada Branch: programa ligeramente modificado.. Tags: foto del projecto en un momento del tiempo Trunk: direct q alberga la linea central de desarrollo Merge: branchs o branch + trunk Conflictos, se pueden solucionar...
  • RELEASE BRANCHES: Dessarrolladores trabajan al par que testers Hay que dar soporte a version actual de web, mientras desarrollamos la siguiente 1.- commit a trunk 2.- trunk copiada a release branch (1.0) 3.- testers sobre release, developers sobre trunk 4.- bug fixes portados entre ambas ramas 5.- se para desarrollo en branch,se hace release, tras testeo. Se copia a tags/1.0.0 6.- se sigue trabajando en trunk, patchs sobre branch , y cuando hay muchos , se copia branch a tags/1.0.1 Svn merge –reintegrate desde trunk Otra aproximación , trunk siempre version estable
  • PRACTICA SVN Creo repositorio, habilito acceso por http y que lo descarguen los demás. Editamos el archivo generando conflictos y merges
  • Desplegar sin scripts: posibles cosas sin hacer Despliegues de test. Entorno de producción, pero bd y directoryroot de test - apache Ant está orientado y diseñado para integrarse en java - bash es otra opción, pero no siempre es portable entre máquinas, y no es tan manejable.
  • Es posible que sucedan fallos al desplegar. Debemos probar los scripts de despliegue , ejecutar primero sobre testing. En caso de error, configurar el numero de version atras. Evita problemas con caches y proxies, son archivos diferentes 12_header.jpg != 13_header.jpg Tambien podemos usar etags,expires headers... Despliegues mas complejos, necesidad de limpieza de archivos que no estan en uso Solo hay down-time si lo necesitamos para la bd .
  • Hay que planear down-time en la mayoría de actualizaciones., mientras desplegamos el contenido no es consistente. Archivos svn , problemas de seguridad Facil aplicar bug patchs (pero de nuevo con posible down time) Diferenciamos entre testing – development y live en la aplicación
  • Minimiza down time Patchs via diff o update parcial
  • Phing es una herramienta para construir proyectos Basado en ant, cross-platform.
  • Alias del script phing.php Por defecto busca el archivo build.xml , Especificar
  • Target, cada uno de los subprocesos, grupos de tareas logicos Project -&gt; nodo raiz del archivo
  • Taller de Phing - phpconference 2009 barcelona

    1. 1. TALLER DE PHING Subversion and PHING : How-to update successfully your website. <ul><li>Fernando Palomo García </li><ul><li>Head of IT at MyBrands.de
    2. 2. [email_address] </li></ul></ul>
    3. 3. INDEX <ul><li>1.- Vista General
    4. 4. 2.- Control de versiones: Subversion </li><ul><li>Breve intro a control de versiones
    5. 5. Conceptos de subversion
    6. 6. Practica de subversion </li></ul><li>3.- Script de despliegue: PHING </li><ul><li>Breve intro a scripts de despliegue
    7. 7. Conceptos de PHING </li><ul><li>Estructura de un script
    8. 8. Comandos básicos
    9. 9. Extendiendo Phing </li></ul><li>Scripts de ejemplo
    10. 10. Generemos un script entre todos! </li></ul></ul>
    11. 11. 1.- Vista General <ul><li>Equipo de desarrollo trabajando en paralelo
    12. 12. Plataforma con multiples servidores </li><ul><li>DB, Static content, Dynamic content, Proxy para contenido estático, svn, memcache, monitorización, testing... </li></ul><li>Actualizaciones frecuentes </li><ul><li>Bug fixes
    13. 13. Nuevas funcionalidades
    14. 14. Mejoras de funcionalidades </li></ul></ul>
    15. 15. 1.- Vista General <ul><li>Garantizar: </li><ul><li>Consistencia de datos </li><ul><li>Archivos en servidores www
    16. 16. DB
    17. 17. Caché
    18. 18. Sesiones... </li></ul><li>Misma versión en los diferentes recursos: </li><ul><li>Estructuras de DB corresponden con aplicación
    19. 19. Contenido estático corresponde con aplicación(prefijos) </li></ul><li>Disponibilidad de recursos </li><ul><li>Es necesario down-time para actualizar?
    20. 20. Realizar actualizaciones fuera de horas punta
    21. 21. Test de despliegue en entorno controlado </li></ul></ul></ul>
    22. 22. 2.- Control de Versiones: Subversion <ul><li>Qué nos proporciona? </li><ul><li>Trabajo en equipo, desarrollo en paralelo. Archivos compartidos y abiertos al mismo tiempo
    23. 23. Control de cambios en archivos. Rollback rápido
    24. 24. Quién hace qué </li></ul><li>Los más populares: </li><ul><li>CVS => Sustituido por svn
    25. 25. SVN => Estándar de-facto,maneja mejor binarios
    26. 26. GIT => Desarrollado por Linus Torvalds, usado para el kernel de linux. Distribuido.
    27. 27. Mercurial => Distribuido </li></ul></ul>
    28. 28. 2.- Subversion::__init() <ul><li>http://subversion.tigris.org/
    29. 29. Clientes: </li><ul><li>Linux / OS X: consola, rapidSVN
    30. 30. Windows: tortoiseSVN
    31. 31. integrado en IDE: Netbeans, Eclipse,Zend Studio... </li></ul><li>Repositorio central (svnadmin create <path>)
    32. 32. Acceso http:// , https:// , file:/// , svn:// svn+ssh://
    33. 33. Replicacion de repositorio master-slave (svnsync) </li></ul>
    34. 34. 2.- Subversion::main() <ul><li>Un poco de Terminología </li><ul><li>Repositorio
    35. 35. Working copy
    36. 36. Branches
    37. 37. Tags
    38. 38. Trunk
    39. 39. Merge ( --reintegrate )
    40. 40. Conflictos </li></ul><li>Buen tutorial: http://svnbook.red-bean.com/ </li></ul>
    41. 41. 2.- Subversion::main() <ul><li>Uso habitual: Release branches </li><ul><li>trunk/
    42. 42. branches/ </li><ul><li>1.0/
    43. 43. 2.0/ </li></ul><li>tags/ </li><ul><li>1.0.0/
    44. 44. 1.0.1/
    45. 45. 2.0.0/
    46. 46. 2.0.2/ </li></ul></ul></ul>
    47. 47. 2.- Subversion::__main() <ul><li>Practica: </li><ul><li>Instalación de servidor
    48. 48. Crear repositorio
    49. 49. Configurar mod_dav apache
    50. 50. Configuración del cliente en netbeans
    51. 51. casos: </li><ul><li>Branch
    52. 52. Tag
    53. 53. merge </li></ul></ul></ul>
    54. 54. 3.- Scripts de Despliegue: PHING <ul><li>¿Cómo desplegaríamos sin scripts?
    55. 55. Velocidad – no hay olvidos - atomicidad
    56. 56. Sincronismo entre servidores
    57. 57. Script debería anticipar y prever fallos
    58. 58. Posibilidades: </li><ul><li>Bash scripts ( bash version )
    59. 59. Apache Ant (Java: platform-independent)
    60. 60. Make ( maldito espacio antes del tabulador! )
    61. 61. PHING ( PHP: platform independent) </li></ul></ul>
    62. 62. 3.- Scripts de Despliegue: PHING <ul><li>Previsión de fallos
    63. 63. Development => Testing => Live
    64. 64. Políticas de despliegue ”incrementales” </li><ul><li>Al desplegar añadimos un prefijo/sufijo a cada archivo, correspondiente a la versión actual.
    65. 65. En la aplicación o htaccess indicamos el numero de versión </li></ul></ul>
    66. 66. 3.- Scripts de despliegue: PHING <ul><li>Políticas de despliegue ”directa” </li><ul><li>el directorio principal en el servidor www es una wc
    67. 67. Archivos internos de svn
    68. 68. Para volver a versión anterior: directamente sobre el contenido web ( otro down-time )
    69. 69. Fácil aplicar patchs </li></ul></ul>
    70. 70. 3.- Scripts de despliegue: PHING <ul><li>Políticas de despliegue intermedias </li><ul><li>Svn export , aplicar parches para live version
    71. 71. Contenido antiguo sustituido por nuevo
    72. 72. Para volver a version anterior, reemplazar directorio
    73. 73. Down-time? </li><ul><li>Descarga local => no
    74. 74. Descarga y rsync => sí </li></ul><li>Diff patch? </li></ul><li>Y la BD? </li><ul><li>Preparar scripts incrementales : DO vs UNDO </li></ul></ul>
    75. 75. 3.- PHING::__init() <ul><li>PH ing I s N ot G numake
    76. 76. http://phing.info
    77. 77. Basado en Apache Ant
    78. 78. Definición de tareas en XML
    79. 79. Facilmente extensible con clases PHP para crear tareas personalizadas
    80. 80. Scripts intuitivos, curva de aprendizaje muy inclinada </li></ul>
    81. 81. 3.- PHING::main() <ul><li>Phing => phing.php
    82. 82. Phing -f <file> target </li><ul><li>-Dproperty=value , asigna valor a properties
    83. 83. -l , para listar targets
    84. 84. -verbose </li></ul></ul>
    85. 85. 3.- PHING::main() <ul><li>Estructura de un script de PHING </li><ul><li>Tasks: trozo de codigo con una función específica => echo...
    86. 86. Types: estructuras de datos para las tasks => filelist, filterchain, fileset...
    87. 87. Properties: inline, input o fichero de properties
    88. 88. Target: nodo raiz del archivo de build </li></ul><li>http://phing.info/docs/guide/stable/ </li></ul>
    89. 89. 3.- PHING::main() Ejemplo sencillo: <project name=&quot;kernelius&quot; default=&quot;all&quot; basedir=&quot;.&quot;> <property name=”test” value=”testvalue” /> <property file=”build.properties” /> <target name=”all”> <echo msg=”hola mundo!” /> <copy todir=”/tmp”> <fileset dir=”.” includes=”*.txt” /> </copy> </target> <project>
    90. 90. 3.- PHING::main() <ul><li>Algunas properties predefinidas... </li><ul><li>application.startdir
    91. 91. host.arch
    92. 92. project.name
    93. 93. project.basedir
    94. 94. host.machine
    95. 95. host.name
    96. 96. line.separator
    97. 97. host.os.version
    98. 98. ... </li></ul></ul>
    99. 99. 3.- PHING::main() <ul><li>Algunas estructuras de control: </li><ul><li>If ( if – elseif – else )
    100. 100. Depends
    101. 101. Unless
    102. 102. Conditions </li><ul><li>Not, and, or, available, equals, isset, istrue... </li></ul></ul></ul>
    103. 103. 3.-PHING::main() <ul><li>Modificaciones sobre el proyecto </li><ul><li>Datos => <filterchain> </li><ul><li>Copy, move, append...
    104. 104. Eliminar comentarios, cambiar valores, </li></ul><li>Nombres de archivo => <mapper> </li><ul><li>Change all php to html... <globmapper>
    105. 105. Obtener todos los archivos en el mismo dir <flattenmapper>
    106. 106. Expresiones regulares <regexmapper> </li></ul></ul></ul>
    107. 107. 3.- PHING::main() <ul><li>Otras tareas </li><ul><li><pdo> acepta transactions
    108. 108. <phpdoc> para generar la documentación
    109. 109. <phpunit> para ejecutar unit test
    110. 110. <php> podemos llamar funciones y asignar el resultado a una property </li></ul></ul>
    111. 111. 3.-PHING::main() <ul>Ejercicios! Por fin! http://www.fpg81.es/phing-examples.tar.gz </ul>

    ×