Poder definir paquetes de deploy de aplicaciones (ya sea a servidores de aplicaciones en máquinas tradicionales, o servicios en la nube) y que los paquetes puedan armarse automáticamente a partir de esa definición.
Por ejemplo, dado un conjunto de objetos main en una KB de GX, ejecutar el siguiente .bat para generar automáticamente un paquete war con el cual hacer deploy a Bluemix:
rem Crear proyecto MyDeploy.gxdproj a partir de la KB
msbuild C:\GXsalto\Deploy\Deploy.msbuild /p:KBPath=C:\KBs\MyKB;ProjectName=MyDeploy;ObjectNames="MainHome"
rem El resultado es el archivo "C:\KBs\MyKB\Deploy\Java Environment\MyDeploy\MyDeploy.gxdproj"
rem Crear el war a partir de MyDeploy.gxdproj
msbuild "C:\KBs\MyKB\Deploy\Java Environment\MyDeploy\MyDeploy.gxdproj"
rem El resultado es el archivo "C:\KBs\MyKB\Deploy\Java Environment\MyDeploy\MyDeploy.war"
Implementado (en proceso) para las versiones Evo3 y Salto.
Luego de haber hecho el armado de una aplicación con GX, para armar un paquete de deploy son necesarios dos pasos: crear una declaración de qué contiene el deploy, y armar el paquete a partir de esa declaración.
Para declarar qué es lo que se quiere incluir en un determinado paquete de deploy se utiliza un formato estándar basado en MSBuild, al que le llamamos proyecto de deploy.
Es un archivo de texto, en formato XML, al que por convención le asignamos la extensión .gxdproj (forma corta de GeneXus Deploy Project). Aunque por supuesto se puede escribir y modificar con cualquier editor de texto, también existe un mecanismo para generarlo automáticamente a partir de datos básicos como un conjunto de objetos main de una cierta KB, y el tipo de servidor de aplicaciones al que se quiere hacer deploy.
Para crear el archivo de un proyecto de deploy alcanza con ejecutar una línea de comando como esta:
Por más detalles, ver más abajo la sección “Generador de Proyectos”
para crear paquetes de deploy a partir de lo que se construyó en el paso anterior existen componentes que interpretan estas declaraciones y arman los paquetes en forma automática según las tecnologías y plataformas involucradas. Por ejemplo, para crear un war se puede ejecutar lo siguiente:
rem Crear el war a partir de MyDeploy.gxdproj
msbuild "C:\KBs\MyKB\Deploy\Java Environment\MyDeploy\MyDeploy.gxdproj"
El funcionamiento de esto se explica más detalladamente en la sección “Creadores de Paquetes”.
En un proyecto de deploy se declara a partir de qué se quiere armar un paquete. Los datos básicos son:
-
La identificación del lugar en que GX generó la aplicación y algunos datos sobre sus características: lenguaje en que se generó, bases de datos, si se utiliza GAM, si se usa el indexador de texto, etc.
-
La identificación de los nombres de objetos involucrados, incluyendo algunos metadatos sobre ellos: si son main, si implementan servicios REST o SOAP, etc.
Por ejemplo, Deploy Project Sample es la declaración de una unidad de deploy (deploy project) a ser armado a partir de lo que GeneXus generó para una aplicación Java / MySQL:
Para obtener un archivo de proyecto se puede ejecutar un proceso MSBuild que puede generarlos automáticamente a partir de algunos datos. Por ejemplo, ejecutando la siguiente línea de comandos:
msbuild C:\GXsalto\Deploy\Deploy.msbuild /p:ProjectName=Home;KBPath=C:\KBs\SampleKB;ObjectNames="SDMenu;Module_2.Home"
Se generará automáticamente un proyecto de armado Home.gxdproj que permitirá armar un paquete de deploy conteniendo los objetos Module_2.Home (Web Panel) y SDmenu (Dashboard), además de todo lo que sea necesario para soportarlos (transacciones, web panels, SDTs, data providers, etc.)
Las propiedades que están definidas en Deploy.msbuild (y que se pueden pasar como parámetro en la llamada a MSBuild) son:
<!-- Working KB Properties -->
<KBPath></KBPath>
<KBVersion></KBVersion>
<KBEnvironment></KBEnvironment>
<!-- Deploy Project Properties -->
<ProjectName></ProjectName>
<DeployPath></DeployPath>
<ObjectNames></ObjectNames>
Los parámetros requeridos son únicamente ProjectName y KBPath.
Se puede indicar la KBversion y KBEnvironment deseados, o dejar que tome los defaults.
Si no se especifican ObjectNames, se considerarán todos los objetos que sean main.
Si no se especifca un DeployPath, el default es $(KBPath)\Deploy\$(KBEnvironment)\$(ProjectName).
En el DeployPath se creará un archivo llamado $(ProjectName).gxdproj (en el ejemplo sería Home.gxdproj).
Para crear un paquete sólo es necesario llamar a MSBuild pasándole el proyecto como parámetro. Por ejemplo, ejecutando la siguiente línea de comando,
se creará automáticamente un archivo C:\KBs\SampleKB\Deploy\Java Environment\Home\Home.war
Las propiedades que se pueden pasar como parametro son:
<Timestamp></Timestamp>
<ApplicationServer></ApplicationServer>
<ApplicationServerTemplate></ApplicationServerTemplate>
<Application_key></Application_key>
<Target_JRE><Target_JRE>
Timestamp indica el momento en el que se ejecuta la aplicacion, se utiliza para generar el nombre de la carpeta donde se hace el deploy, se debe especificar un valor
ApplicationServer indica el tipo de servidor al que se hace deploy (por ejemplo Generic Servlet versiones 2.3), se debe especificar un valor
ApplicationServerTemplate inidica el template a usar para generar los archivos (por ejemplo Generic_Servlet_v3_1.stg), se debe especificar un valor
Application_key indica la key de encriptacion que se utiliza en genexus, se debe especificar un valor desde genexus 15 upgrade 12.
Target_JRE indica la version de java con la que se va a ejecutar, es un valor entero (ej. Target_JRE=7), se debe especificar un valor desde genexus 15 upgrade 12.
Templates
La implementación de la generación de paquetes está basada en templates, en particular utilizando una tarea MSBuild que permite generar con StringTemplate.
Esto permitirá no solamente facilitar la implementación, sino también la posibilidad de que el usuario final pueda hacer ajustes según necesidades particulares, o contribuir con mejoras al mecanismo general.
Por ejemplo, los .war utilizados para deploy de aplicaciones Java deben incluir un archivo web.xml que declara los servlets incluidos en el war. Este archivo se genera utilizando templates que dependen de cuál es el tipo de application server utilizado (Nota: actualmente sólo está disponible el template para Generic Servlet versiones 2.3, 2.4, y 2.5, pero se irán agregando otros).
Lo necesario para utilizar GeneXus Deploy Projects puede descargarse desde esta carpeta pública. Es necesario:
Inicialmente esto formaba parte de la versión Salto de GeneXus, pero la idea es abrir esto como un desarrollo independiente de GX y open source. Esto contempla tres objetivos:
-
Contemplar el soporte para Evolution 3
-
Facilitar el ciclo de prueba - correcciones - actualizaciones
-
Permitir la colaboración de terceros o la personalización para casos particulares
Los fuentes y todo lo necesario para armar estas cosas ya están disponibles en el repositorio SVN público de GeneXus Tools.
Los siguientes pasos serían pasar esta misma documentación a ese lugar, e incluso crear un proyecto en GeneXus Open, para poder organizar el trabajo y facilitar la comunicación entre quienes participen.
El mejor lugar para mandar feedback sobre este componente es el foro de build & deploy que se encuentra bajo http://www.genexus.com/foros.