Secciones

Liquibase: El control de versiones para BBDD

Si en la anterior entrada escribía sobre Mercurial y los sistemas de control de versiones distribuidos, hoy hablaré de LiquiBase, un sistema similar pero para bases de datos.

En la mayoría de proyectos en los que he participado, existía un repositorio para gestionar las diferentes versiones de código, pero no pasaba lo mismo con los cambios que se realizaban en la base de datos. Para trazar estos cambios, se utilizaban mecanismos bastante primarios, como por ejemplo crear ficheros upgrades para actualizar los datos entre las diferentes versiones de proyecto.

Liquibase se presenta en su web de la siguiente forma:
You never develop code without version control, why do you develop your database without it?
Y en la mayoría de casos es cierto que lo que sucede es que una de las primeras tareas que se realizan es crear el repositorio de código, y en cambio no se hace lo mismo para los cambios en la BBDD. Esto provoca algunos inconvenientes:
  • faltan tablas, campos incorrectos, faltan columnas...
  • es necesario hacer una carga mínima de datos y nadie sabe cual debería ser.
  • se ha cambiado la versión del proyecto y es necesario cargar una nueva versión de base de datos.
  • el equipo de desarrollo utiliza mysql y el entorno de integración oracle
  • ...
Para mitigarlos, liquibase ofrece una serie de herramientas que permite:
  • Merging changes from multiple developers
  • Code branches
  • Managing production data as well as various test datasets
  • Cluster-safe database upgrades
  • Automated updates or generation of SQL scripts that can be approved and applied by a DBA
  • Database ”diff“s
  • Generating starting change logs from existing databases
LiquiBase permite a los desarrolladores almacenar los cambios de BBDD en archivos XML en sus entornos de desarrollo para luego aplicarlas al resto de BBDD.  Como los cambios se encuentran almacenados en el sistema de control de código fuente y se distribuyen al resto de desarrolladores, los cambios se pueden aplicar de forma simple al resto de entornos de BBDD; entorno de desarrollo local, entorno de integración, BBDD de pruebas, e incluso a BBDD de producción.  
Estos cambios pueden ser aplicados a través de varios métodos, ya sea a través de una Ant, Maven, línea de comandos o de forma automática durante la aplicación o el inicio del servidor de aplicaciones.
 
LiquiBase Migrator es el núcleo del sistema que permite de forma simple el desarrollo de aplicaciones de base de datos utilizando una metodología ágil. Como los cambios se aplican a la base de datos local durante el desarrollo, las diferentes revisiones se almacenan en un archivo de registro XML.

Cada cambio que se produce está identificado por:
  • un id
  • un autor
  • el nombre 
  • y la ubicación del archivo de cambio 
Cuando el proceso de migración se ejecuta, compara cada uno de los cambios con los que se encuentran en la tabla DatabaseChangeHistory. Esta tabla debe estar en cada una de las BBDD que forman parte del proyecto. Esta tabla contiene el "id", el "autor", y el "archivo" de identificación de todos los cambios que se han ejecutado. Si al ejecutar el proceso de migración hay cambios que no han sido aplicados, el proceso Migrator ejecuta y registra el cambio para que se omitirá en las siguientes ejecuciones del proceso Migrator.

Primeros pasos con Liquibase en Maven.

Para comenzar a utilizar liquibase en nuestros proyectos con Maven, podemos seguir los siguientes pasos:
  1. Agregar al pom.xml las dependencias del driver de BBDD que necesitemos.
  2. Agregar al pom.xml el plugin de liquibase.
  3. Crear el fichero src/main/resources/liquibase.properties
  4. Crear el fichero src/main/resources/org/liquibase/change_log.xml
  5. Por último, ejecutar mvn liquibase:update
El detalle lo podéis encontrar en:
 Una vez finalizado con éxito los pasos, tendremos en la BBDD test la siguiente información:

Más información.
Saludos,
JK.

2 comentarios:

  1. JK, buen post!... Control de versiones de BDs es el gran olvidado en el SDLC.
    He visto el apartado de "Wishlist" y parece que ya están trabajando en:

    1. generación de diagrama de BDs
    2. plugins para los IDEs
    3. generación de datos de prueba

    he visto el ejemplo de DOC del modelo de dato, es un simple JavaDoc, aunque completo, es poco "vendible" internamente en las organizaciones.

    Una cosa que no he visto es si es posible hacer "reverse engineer", en fin, a esperar la siguiente release :)

    ResponderEliminar
  2. Gracias Roger por tu comentario.

    Estaba buscando una opción para gestionar el versionado de cambios en BBDD y me encontré con esta grata sorpresa. Las pruebas que he estado realizando, han dado muy buen resultado. además de sencilla de usar y muy intuitiva.

    Una de las herramientas que estoy esperando que liberen es el plugin para eclipse, de forma que sea simple hacer cambios en la BBDD y que estos generen automáticamente el changelog.

    También puedes echar un vistazo http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=liquibase

    Hasta pronto.

    ResponderEliminar