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.