Nuestro querido servidor de desarrollo es el encargado de generar las versiones de nuestros productos, los publica en la web, nos avisa por e-mail de que se han generado nuevas versiones, etc. Además se encarga de que desde el mismo código salgan dos versiones diferentes de la aplicación. La versión de producción, sólo para clientes finales, y la de pre-producción donde se prueban todas las funcionalidades antes de ser pasadas a producción.

Las diferencias entre ambas versiones son mínimas pero delicadas, así que hace tiempo programamos una serie de bash scripts que hacían los cambios automáticamente en Hudson. Nada elegante pero muy útil para evitar errores al subir archivos de configuración a nuestro sistema de control de versiones.

Hace unos días, a raíz de este post de Francho, Pedro pensó que igual podíamos mejorar dichos scripts para incluir ese proceso de definición en la propia aplicación. Nosotros no usamos Ant a nivel del servidor de integración continua, sino Maven. Me tocó desempolvar el recomendable libro que me dio a conocer Maven y me puse manos a la obra.

Así descubrí el Resource filtering, plugin de Maven que permite filtrar archivos y sustituir variables definidas en el pom.xml (archivo de configuración de Maven). A continuación os muestro lo sencillo que fue deshacerme de tres o cuatro scripts y pasar a definir dicho proceso desde el propio archivo de configuración de Maven.

Para ello en primer lugar se definen las variables.

...

   false
   UA-********
   http://*******/tiendatek/prebuilds/latest.apk
   frogtek

...

Después hay que especificar qué fichero queremos filtrar y dónde queremos que lo deje después de filtrar.

...

   
	diffs
	${project.basedir}/assets
	true
	
		*.xml
	
   

...

Sin olvidarnos de definir adecuadamente el fichero que queremos que sea filtrado.

...





...

De esta forma conseguimos que por defecto aplique las variables definidas en el properties de arriba. Pero, ¿y cómo hacemos que aplique otros valores diferentes si por ejemplo queremos la versión de producción? Ahora entran en acción los profiles de Maven.

...

  production

  	true
  	http://**********/tiendatek/builds/latest.apk
  

...

Ahora ya con solo activar el profile o no cuando compilemos con Maven conseguiremos tener versión de producción o no.

De momento solo hemos aplicado el resource filtering aquí, un caso sencillo. Pero seguro que de aquí a un tiempo empezamos a encontrar sitios susceptibles de ser filtrados y mejorados con esta herramienta.