Cómo automatizar la compilación

Traducido automáticamente de Deepl

Desde 4D v19, puede iniciar la compilación de un proyecto con un simple comando. Se preguntará para qué puede utilizar esto.

Su equipo puede estar formado por varios desarrolladores, así que ¿por qué no automatizar la compilación en cada empuje de código en su servidor de control de origen? Siempre es más fácil identificar un error cuando se detecta rápidamente.

Otro caso es cuando su proyecto consta de varios componentes. Puedes escribir un método que compile, construya y luego copie el componente a la base de datos anfitriona.

Este blog discutirá los diferentes puntos técnicos que son muy útiles para crear sus propias herramientas de automatización, junto con una aplicación de ejemplo.

Lanzar una aplicación 4D con una línea de comandos

Puede lanzar 4D a través de la línea de comandos especificando el proyecto a abrir y eligiendo las opciones a activar. A continuación le recordamos algunas opciones que pueden ser muy útiles para automatizar una acción.

Headless

Para la ejecución de tareas repetitivas y activadas automáticamente, la presencia de una interfaz es innecesaria. Si pasa la opción«–headless» en la línea de comandos, su aplicación 4D, 4D Server o fusionada se ejecutará sin interfaz.

Para más detalles, puede leer esta entrada del blog: Aplicaciones 4D sin cabeza.

Sin datos

La opción«–dataless» le permite pedir a 4D que no abra un archivo de datos. Por ejemplo, cargar un archivo de datos es innecesario si crea un script para lanzar una compilación.

Para que quede claro, el modo dataless se utiliza raramente. Si abre 4D en modo sin datos, no puede abrir un archivo de datos utilizando los comandos de 4D después de lanzar 4D. Encontrará todos los detalles en la documentación.

Parámetros de usuario

Automatizar tareas repetitivas no significa hacer exactamente lo mismo cada vez. Por ejemplo, puede lanzar una tarea cada hora con opciones para una comprobación rápida y sencilla, y cada noche, ejecutar otra tarea que requiera más tiempo y recursos.

La opción«–user-param» te permite pasar una cadena en la línea de comandos. Entonces, con el Get database parameter y la constante user param value, puedes obtener la cadena pasada en la línea de comandos.

$result:=Get database parameter(User param value;$userParam)

Para más detalles, puedes leer esta entrada del blog.

Compilar un proyecto utilizando un comando

Gracias al comando Compile project se puede lanzar la compilación de un proyecto pasando su ruta. El comando también acepta un objeto de opciones que permite configurar la compilación. Por ejemplo, puede especificar las dependencias de su proyecto, el objetivo Intel y Silicon, etc.

$status:=Compile project($file; $options )

Si hay un error, el comando devuelve un objeto con la lista de errores compuesta por el mensaje de error, el nombre del método y el número de línea. Como recordatorio, puede utilizar el comando METHOD OPEN PATH para abrir el editor de código directamente en la línea en cuestión. Para descubrir todas las opciones de este comando, le recomendamos que lea esta entrada del blog o la documentación.

Es importante conocer las posibilidades que ofrece este comando, y cómo utilizarlo correctamente. Pero la otra gran noticia es que puedes ejecutarlo en un proyecto en modo interpretado, con las opciones «–dataless» y«–headless«, ¡sin licencia de desarrollo! Así que si usas una solución de servidor externo para compilar tu aplicación, por ejemplo, usando la acción git en GitHub, no necesitas inyectar tu licencia en el servidor de terceros.

Generar archivo de registro

Con las tareas automáticas, es esencial tener registros para saber que la tarea se ha ejecutado, y para recuperar los errores en caso de un problema. Pero en realidad, no es tan sencillo. La gestión es diferente entre macOS y Windows. La arquitectura de archivos en los servidores puede ser diferente. Y el script puede ser ejecutado en uno de sus servidores o en un servidor externo.

La solución que proponemos es utilizar el comando LOG EVENT con la constante Into system standard outputs. Entonces, puede redirigir el flujo estándar y el flujo de error a uno o varios archivos en la línea de comandos. Así, es sencillo adaptarse a tu entorno sin cambiar el script.

Por último, pero no por ello menos importante, puede ser útil saber cuándo se ejecutó el script, cuando se produjo el error. El comando Timestamp es perfecto para esto; devuelve una cadena de caracteres que puede añadirse fácilmente a un archivo de registro con precisión de milisegundos.

LOG EVENT(Into system standard outputs; Timestamp+" - Soy una información"; Error information)
LOG EVENT (Into system standard outputs; Timestamp+" - Soy un error"; Error message)

Ejemplos concretos

Ya está. Siguiendo todos los consejos anteriores, hemos creado un proyecto disponible en GitHub para compilar un proyecto. Pasamos un objeto stringificado a«–user-param», que contiene tres atributos

  • path: la ruta del proyecto a compilar (atributo obligatorio)
  • options: objeto de opciones que se pasa al comando Compile Project (atributo opcional)
  • quit: pase false para no cerrar 4D después de la compilación, útil para las pruebas; por defecto, 4D se cierra después de la ejecución (atributo opcional)

Automatizar la compilación del proyecto

Aquí hay algunos ejemplos de líneas de comando, no olvide adaptar las rutas.

Lanza una comprobación de sintaxis:

  • macOS
/.../Contents/MacOS/4D 
--structure /.../Tool_Compilation.4DProject 
--user-param "{\"path\":\"/.../myProject.4DProject\",\"options\":{\"targets\":[]}}"
--headless --dataless 
2>.../errlog.txt 1>.../infolog.txt
  • Windows
C:\...DD.exe 
--structure C:\...\Tool_Compilation.4DProject 
--user-param "{\"path\":\"/.../myProject.4DProject\",\"options\":{\"targets\":[]}}"
--headless --dataless 
2>C:\...\errlog.txt 1>C:\...\infolog.txt

Aquí está el contenido de nuestro archivo infolog.txt; el errlog.txt está vacío:

2021-08-25T17:38:52.197Z - Start script
2021-08-25T17:38:54.961Z - user-param: {"path":"/.../myProject.4DProject","options":{"targets":[]}}
2021-08-25T17:38:54.964Z - {"success":true,"errors":[]}
2021-08-25T17:38:54.999Z - End script

Compilando con la configuración por defecto:

  • macOS
/.../Contents/MacOS/4D 
--structure /.../Tool_Compilation.4DProject 
--user-param "{\"path\":\"/.../myProject.4DProject\"}" 
--headless --dataless 
2>.../errlog.txt 1>.../infolog.txt
  • Windows
C:\...DD.exe
--structure C:\...\Tool_Compilation.4DProject 
--user-param "{\"path\":\"/.../myProject.4DProject\"}" 
--headless --dataless 
2>C:\...\errlog.txt 1>C:\...\infolog.txt

Compilando con las opciones pasadas al comando Compilar proyecto:

  • macOS
/.../Contents/MacOS/4D 
--structure /.../Tool_Compilation.4DProject 
--user-param "{\"path\":\"/.../myProject.4DProject\",\"options\":{\"targets\":[\"x86_64_generic\"]}}" 
--headless --dataless 
2>.../errlog.txt 1>.../infolog.txt
  • Windows
C:\...DD.exe
--structure C:\...\Tool_Compilation.4DProject 
--user-param "{\"path\":\"/.../myProject.4DProject\",\"options\":{\"targets\":[\"x86_64_generic\"]}}" 
--headless --dataless 
2>C:\...\errlog.txt 1>C:\...\infolog.txt

¿Qué es lo siguiente?

Ahora depende de ti. No dudes en compartir en GitHub o en el foro tus ideas o soluciones para automatizar tareas.

Vanessa Talbot
• Propietario de producto - Vanessa Talbot llegó al equipo de 4D Program en junio de 2014. Como Propietario de producto, está a cargo de escribir las historias de los usuarios y luego traducirlas a especificaciones funcionales. Su papel es también asegurarse de que la implementación de la funcionalidad entregada cumpla con las necesidades del cliente. Desde su llegada, ha trabajado en la definición de funcionalidades claves en 4D. Ha trabajado en la mayoría de las nuevas funcionalidades de multi hilo apropiativo y también en un tema muy complejo: la nueva arquitectura para la aplicación engined. Vanessa es licenciada por Telecom Saint-Etienne. Comenzó su carrera en el Instituto de Investigación Criminal como desarrolladora del departamento audiovisual. También ha trabajado en medios de comunicación y en el ámbito médico como experta en soporte técnico, producción y documentación de nuevas funcionalidades.