Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Taller de Phing - phpconference 2009 barcelona

2,807 views

Published on

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

Published in: Technology
  • Be the first to comment

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>

×