Mostrando las entradas con la etiqueta maven. Mostrar todas las entradas
Mostrando las entradas con la etiqueta maven. Mostrar todas las entradas

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.

viernes, 20 de mayo de 2022

Deployar aplicación BWCE con Maven en Azure Kubernetes - Container Registry desde Jenkins

Cómo deployar aplicación BWCE con Maven en Azure Kubernetes - Container Registry desde Jenkins

Hola

Diferente al post anterior, en esta ocasión voy a describir cómo desplegar un servicio REST de TIBCO BusinessWorks Container Edition desde Jenkins usando el plugin de Maven. El deployment será en Azure Kubernetes con un Container registry también en Microsoft Azure.

Prerrequisitos


-Código fuente de la aplicación en un repositorio de git  
-Maven 3.8.5
-Jenkins instalado y configurado con Maven plugin y ruta de instalación de Maven
-Microsoft Azure CLI conectado a Microsoft Azure
-Docker (En este ejercicio no se requiere ya que no estoy creando ninguna imagen). Se da por entendido que la imagen ya existe en el Azure Container Registry

Procedimiento


1.- Agregar plugin de Maven: Maven Integration plugin

2.- Ir a Administrar Jenkins > Configuración de herramientas
  • En la sección Maven, clic en el botón Maven Installations
  • Ingresar un Nombre 
  • Ingresar la ruta de instalación de Maven (ej. /usr/local/Cellar/maven/3.8.5/libexec/)
3.- Desde Jenkins crear un proyecto de tipo Maven

En la configuración del proyecto, ingresar los siguiente información:

General
Github project: Liga al repositorio git donde se encuentra el código de la aplicación (ej. https://github.com/compensar/streaming/)

Source Code Management
Git > Repositories > Repository URL: Liga al repositorio git donde se encuentra el código de la aplicación (ej. https://github.com/compensar/streaming/)
Branches to build: Nombre del branch (ej. */master)

Build
Root POM: Path al archivo POM principal (ej. OrderMgmt.application.parent/pom.xml)
Goals and options: Maven goals a ejecutar (initialize com.tibco.plugins:bw6-maven-plugin:bwfabric8json fabric8:resource fabric8:apply -e -X)

4.- Guardar el proyecto

5.- Con esas configuraciones clic en Build Now para ejecutar el proyecto.


Les dejo un video de cómo hacerlo.




Espero les sirva.



miércoles, 18 de mayo de 2022

Desplegar aplicación BWCE con Maven en Azure Kubernetes - Container Registry desde TIBCO Business Studio

Cómo desplegar aplicación BWCE con Maven en Azure Kubernetes - Container Registry desde TIBCO Business Studio

Hola

En este post voy a describir cómo desplegar una servicio REST de TIBCO BusinessWorks Container Edition desde TIBCO Business Studio usando el plugin de Maven en Azure Kubernetes con un Container registry también en Microsoft Azure.

Prerrequisitos

-TIBCO BusinessWorks Container Edition 2.7.0 con Maven plugin.
-Microsoft Azure CLI conectado a Microsoft Azure
-Maven 3.8.5 (Si se quiere ejecutar fuera de TIBCO Business Studio)
-Docker (En este ejercicio no se requiere ya que no estoy creando ninguna imagen). Se da por entendido que la imagen ya existe en el Azure Container Registry

Procedimiento

Es necesario generar el archivo POM del proyecto para poder realizar un despliegue con Maven. 

1.- Clic derecho sobre la aplicación y seleccionar Generate POM for Application

Ingresar la información referente al proyecto.

  • Deploy options: Docker
  • Image name: Imagen de Docker (ej. miazureregistry.azurecr.io/imagename:tag)
  • BWCE image: Imagen base de Docker (ej. miazureregistry.azurecr.io/imagename:tag)
  • Run on Docker host. Ingresar puertos usados por la aplicación.
  • Select platform: Kubernetes/Openshift (Para un servicio de AKS)
  • Deployment name
  • Service name
  • Service Type
  • Container Port
Los siguientes archivos de propiedades son generados sobre la carpeta de la aplicación:
  • docker-dev.properties
  • docker-host-env-dev.properties
  • docker-host-env-prod.properties
  • docker-prod.properties
  • k8s-dev.properties
  • k8s-prod.properties
2.- Desde TIBCO Business Studio seleccionar Run > Run configurations

3.- Crear un Maven build configuration con los siguientes goals:

clean initialize com.tibco.plugins:bw6-maven-plugin:bwfabric8json fabric8:resource fabric8:apply -Ddocker.property.file=docker-dev.properties -Dk8s.property.file=k8s-dev.properties

Los goals arriba especificados van a realizar las siguientes tareas:

Clean: Borra los archivos, folders generados de una construcción anterior de recursos.
Initialize: Carga los valores especificados en los archivos de configuración (docker-dev.properties,
k8s-dev.properties)
com.tibco.plugins:bw6-maven-plugin:bwfabric8json:  Genera los templates .yml para el deployment
fabric8:resource: Crea los archivos yml para el deployment (target/classes/META-INF/fabric8/kubernetes/kubernetes.yml) 
fabric8:apply: Ejecuta el deployment en Kubernetes

Las properties se especifican en el formato -Dpropiedad:

-Ddocker.property.file=docker-dev.properties
-Dk8s.property.file=k8s-dev.properties
-e -X son parámetros para ver logs con detalles y errores

4.- Clic en Ejecutar

5.- Opcionalmente se puede ejecutar el despliegue fuera de TIBCO Business Studio teniendo instalado Maven.

Para esto, ir a la ruta donde se encuentra el archivo POM principal sobre la carpeta de aplicación.parent y ejecutar la misma linea de goals con el prefijo de Maven (mvn)

mvn clean initialize com.tibco.plugins:bw6-maven-plugin:bwfabric8json fabric8:resource fabric8:apply -Ddocker.property.file=docker-dev.properties -Dk8s.property.file=k8s-dev.properties


6.- Verificar que el despliegue haya sido exitoso en Azure Kubernetes

Les dejo un video de cómo realizar este procedimiento.



Espero les sirva