Describiré brevemente en esta entrada una serie de scripts auxiliares que también me cree para apoyar toda la infraestructura de generación de un proyecto, pero sin entrar en detalles sobre el código. Este lo puedes descargar del RubyForge y está documentado.
Recapitulando
He mostrado los scripts que más nos alivian el trabajo a la hora de generar la infraestructura para un proyecto nuevo, tan solo queda automatizar pequeñas tareas asociadas. A continuación comento brevemente cada uno de ellos sin ahondar en explicaciones.
Objetivos
Crear un conjunto de pequeños scripts para automatizar pequeñas tareas rutinarias. En concreto:
- Al crear los servidores virtuales para todos los usuarios, el Apache se queja de las carpetas no existentes. Para evitar esto, se debe hacer un checkout inicial del proyecto para cada usuario en su carpeta /home.
- Crear una o varias bases de datos MySQL necesarias para el proyecto.
- En la carpeta /etc del servidor de desarrollo está la lista de proyectos, utilizada por otros scripts para realizar backups u otras operaciones. Hay que añadir una entrada en esta lista para cada nuevo proyecto.
- Los repositorios subversion generalmente se estructuran en torno a 3 ramas principales, trunk, branch y tags. Crear esta estructura inicial.
- Cuando se genera el código inicial de un proyecto, por ejemplo Rails, hay que se agregar al repositorio los ficheros generados, excepto aquellos que variarán para cada desarrollador (caché, logs, configuración de base de datos local).
- A veces se necesita actualizar del repositorio los cambios introducidos en todos los proyectos para estar al día.
Automatización
checkout_proyectos.rb <nombre proyecto>
Este script hace un checkout del proyecto especificado como argumento en todas las carpetas de los usuarios del sistema, lista que lee del fichero de configuración. De esta manaera el Apache no se quejará cada vez que carga la configuración indicando que hay hosts virtuales en los que no encuentra la carpeta, ya que el script para crear estos hosts visto en otro artículo crea uno para cada usuario, aunque este no haya creado la carpeta para alojar el código
crear_databases.rb <id de proyecto> [tipo de proyecto] [password de mysql]
Este script tiene como argumento obligatorio el nombre del proyecto, y como opcionales el tipo (php o rails) y la contraseña de root de mysql. Esto último argumento es opcional tan solo si no hay contraseña del usuario root de la base de datos. Ahorra un poco de tecleado o clicks a la hora de crear las bases de datos necesarias.
crear_entrada_lista.rb <id de proyecto>
Este script añade automáticamente la entrada correspondiente a un nuevo proyecto en el fichero con la lista de proyectos.
crear_estructura.rb <id de proyecto> [nombre de usuario]
Crea la estructura clásica de un proyecto en subversion (carpetas trunk, branch y tags)
generar_proyecto_rails.rb <ruta a carpeta>
A la hora de crear un proyecto y añadirlo al repositorio, hay que ignorar los logs, los ficheros de tmp y demás. Además hay que copiar el fichero database.yml con otro nombre para que cada desarrollador utilice el adecuado para su configuración. Todo esto y más (borrar el index.html de public, por ejemplo), ya lo hace este script.
update_projects.rb <usuario> [ruta hacia fichero con lista de proyectos]
Este lo uilizamos cuando queremos actualizar nuestra versión de todos los proyectos para estar al día.
Conclusión
Haber invertido tiempo en estos scripts nos ha ahorrado bastante tiempo y aburrimiento en nuestro departamento de desarrollo, y los utilizamos frecuentemente.
Sin embargo, recientemente he descubierto el Chef, potente framework de integración de sistemas que permite mediante recetas creadas (Ruby) desplegar todo tipo de servidores y ajustar su configuración de manera totalmente automatizada y eficiente.
Por otro lado me he pasado al Git como sistema de control de versiones, mucho más eficiente y cómodo que el Subversion.
Ya hablaré de todo esto más adelante, en próximos artículos voy a tratar un poco más de la parte humana de la automatización y la eficiencia.

0 comentarios:
Publicar un comentario en la entrada