miércoles, 13 de julio de 2022

Desplegar Aplicación TIBCO BusinessWorks Container Edition en Docker con Azure Artifacts

Cómo desplegar Aplicación TIBCO BusinessWorks Container Edition en Docker con Azure Artifacts

Hola.

En este post voy a describir cómo desplegar una aplicación REST con TIBCO BusinessWorks Container Edition usando Docker container con Azure Artifacts.

Mi aplicación es un servicio REST que recibe un request y publica un mensaje a una queue de EMS con la información recibida. 

En este caso requiero que las librerías de TIBCO EMS se encuentren en el repositorio y que sean descargadas al momento de construir la aplicación e incluidas en la imagen de Docker generada. Con esto al iniciar mi contenedor estas dependencias son resueltas y la aplicación se ejecute correctamente. 

Conexión a Azure Artifacts

Lo primero que tienen que tener configurado en el proyecto es una conexión a un Feed Artifact de Azure.

En la sección de Azure Artifacts, seleccionar el feed deseado y la opción Connect to Feed para ver la información de conexión al Feed desde nuestro proyecto. En esta sección se encuentra toda la información referente a la configuración de la conexión del Feed al proyecto.

1.- Editar el archivo settings.xml (Este se encuentra en la instalación de Maven: /opt/apache-maven-3.5.0/conf o también en el user home ${user.home}/.m2, se puede crear si no existe). Agregar el elemento de server siguiente: 

<servers>
.
.
<server>
<id>MiFeed</id>
<username>miusuario</username>
<password>[PERSONAL_ACCESS_TOKEN]</password>
</server>
</servers>

El Personal Access Token se genera desde ahi mismo siguiendo las instrucciones para generarlo con Packaging read & write scopes.

2.- Colocar los elementos: repositories y repository dentro del archivo POM de la aplicación. Los datos de conexión de estos elementos están disponibles en Azure Artifacts > Connect to Feed. Algo similar a lo siguiente

<project>
.
.
<repositories>
<repository>
<id>MiFeed</id>
<url>https://pkgs.dev.azure.com/micompany/miservicio/_packaging/MiFeed/maven/v1</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
</project>


Hasta este punto tenemos conexión al Artifact Feed de Azure desde nuestro proyecto de TIBCO BusinessWorks Container Edition.

Subir plugins al feed con mvn deploy:deploy-file

Para subir los archivos hacia el repositorio se utiliza la instrucción de Maven deploy-file. En el caso particular de las librerías de EMS, es necesario primero empaquetar las librerías de la siguiente manera

1.- Copiar las carpetas desde /opt/tibco/ems/8.6/components/shared/1.0.0/plugins hacia una carpeta temporal con la siguiente estructura: runtime/plugins

2.- Crear un archivo zip de la carpeta runtime y asignarle un nombre descriptivo para las librerías como en la siguiente imagen: TIB_bwpluginjms_8.6.0_bwce-runtime.zip

Este nombre se usará en la instrucción deploy-file

*Podría ser también un archivo con extensión .jar

La estructura de directorios y archivo zip final deben verse como en la siguiente imagen.

EMS libraries runtime plugins

3.- Para subir el archivo zip antes generado con las librerías de EMS se utiliza la siguiente instrucción desde la carpeta donde se encuentra el archivo:
Los nombres de groupId, artifactId y versión dependen del paquete que se suba así como de la organización de nombres de archivos que se requiera.

mvn deploy:deploy-file -Dpackaging="zip" -DrepositoryId="MiFeed" -Durl="https://pkgs.dev.azure.com/micompany/miservicio/_packaging/MiFeed/maven/v1" -DgroupId="com.tibco.jms" -DartifactId="plugin" -Dversion="8.6.0.004" -Dfile="TIB_bwpluginjms_8.6.0_bwce-runtime.zip"

Agregar dependencias al proyecto en el POM application


Después de subir las librerías al repositorio o Feed ya pueden ser referenciadas desde un proyecto de BWCE. Para lograr esto, dentro del archivo POM de la aplicación es necesario agregar las dependencias que se encuentran en el repositorio externo.

1.- Ir a la URL del repositorio y seleccionar el Artifact deseado.
2.- En la pestaña Overview > Get this Package > Maven
Seleccionar el fragmento de XML para agregar al archivo POM de la aplicación. Algo similar a lo siguiente:

<dependency>
<groupId>com.tibco.jms</groupId>
<artifactId>plugin</artifactId>
<version>8.6.0.004</version>
<type>zip</type>
</dependency>


3.- Ir al proyecto de BWCE y pegar el fragmento XML en el POM de la aplicación (ej. MiProyecto.application/pom.xml). Agregar el elemento type como zip porque en este caso las librerías fueron subidas en ese formato. El valor por default es jar

<project>
.
.
<dependencies>
<dependency>
<groupId>com.tibco.jms</groupId>
<artifactId>plugin</artifactId>
<version>8.6.0.004</version>
<type>zip</type>
</dependency>
</dependencies>
</project>

Al momento de incluirlo en el archivo, y estar configurada la conexión a Azure Artifacts - Feed, la dependencia es descargada automáticamente en el folder local ${user.home}/.m2/repository con lo que se vuelve disponible para el proyecto.

Agregar dependencias en Docker image build


Con las dependencias incluidas en el proyecto, es necesario referenciarlas en el build de la imagen Docker que se genera al ejecutar el goal docker:build

Para esto hay que modificar el archivo POM de la aplicación (ej. MiProyecto.application/pom.xml) agregando el elemento de assembly como en el ejemplo siguiente:


<image>
.
.
<assemblies>
<assembly>
<basedir>/</basedir>
<descriptorRef>artifact</descriptorRef>
</assembly>
<assembly>
<name>plugins</name>
<descriptorRef>dependencies</descriptorRef>
<targetDir>/resources/addons/plugins</targetDir>
</assembly>
</assemblies>
</image> 

Esta configuración va a producir la siguiente estructura de directorios y Dockerfile. 

target-build-dockerfile

Posteriormente la imagen de Docker será construida incluyendo las dependencias del repositorio y las colocará en la ruta del contenedor especificada en el elemento XML assembly/targetDir. En este caso: /resources/addons/plugins

En el caso de las librerías EMS es necesario colocarlas en el folder plugins (/resources/addons/plugins) con el formato comprimido pues de ahí son tomadas y copiadas al momento de desplegar la aplicación en el contenedor.

Desplegar aplicación BWCE desde Business Studio


Con todos los cambios de arriba realizados y probada la conexión al repositorio de Artifacts de Azure desde el proyecto de BWCE, realizar el despliegue utilizando los siguientes goals de Maven:

docker:build

clean package initialize com.tibco.plugins:bw6-maven-plugin:bwfabric8json docker:build

docker:start

initialize docker:start -Ddocker.property.file=docker-dev.properties

Con todo esto hecho ya deben poder ver su contenedor iniciado con las dependencias de EMS resueltas exitosamente.

Les dejo un video de cómo desplegar Aplicación TIBCO BusinessWorks Container Edition en Docker con Azure Artifact.


Espero les sirva.

No hay comentarios.:

Publicar un comentario