So automatisieren Sie die Kompilierung

Seit 4D v19 können Sie die Kompilierung eines Projekts mit einem einfachen Befehl starten. Sie fragen sich vielleicht, wofür Sie das nutzen können!

Ihr Team besteht vielleicht aus mehreren Entwicklern, warum also nicht die Kompilierung bei jedem Code-Push auf Ihrem Versionskontrollserver automatisieren? Es ist immer einfacher, einen Fehler zu finden, wenn er schnell entdeckt wird.

Ein anderer Fall ist, wenn Ihr Projekt aus mehreren Komponenten besteht. Sie können eine Methode schreiben, die kompiliert, baut und dann die Komponente in die Host-Datenbank kopiert.

In diesem Blog werden wir die verschiedenen technischen Aspekte erörtern, die für die Erstellung Ihrer eigenen Automatisierungswerkzeuge sehr nützlich sind, und eine Beispielanwendung vorstellen.

Starten einer 4D Anwendung über die Kommandozeile

Sie können 4D über die Befehlszeile starten, indem Sie das zu öffnende Projekt angeben und die zu aktivierenden Optionen auswählen. Im Folgenden finden Sie eine Übersicht über einige Optionen, die für die Automatisierung von Aktionen sehr nützlich sein können.

Kopflos

Für die Ausführung von sich wiederholenden und automatisch ausgelösten Aufgaben ist das Vorhandensein einer Schnittstelle nicht erforderlich. Wenn Sie in der Befehlszeile die Option„–headless“ angeben, wird Ihre 4D, 4D Server oder zusammengeführte Anwendung ohne Schnittstelle ausgeführt.

Weitere Einzelheiten finden Sie in diesem Blogbeitrag: Kopflose 4D Anwendungen.

Datenlos

Mit der Option„–dataless“ können Sie 4D auffordern, keine Datendatei zu öffnen. Das Laden einer Datendatei ist zum Beispiel nicht notwendig, wenn Sie ein Skript erstellen, um eine Kompilierung zu starten.

Nur um das klarzustellen, der dataless Modus wird selten verwendet. Wenn Sie 4D im datenlosen Modus öffnen, können Sie nach dem Starten von 4D keine Datendatei mit 4D Befehlen öffnen. Alle Einzelheiten finden Sie in der Dokumentation.

Benutzerparam

Die Automatisierung von sich wiederholenden Aufgaben bedeutet nicht, dass Sie jedes Mal genau dasselbe tun müssen. Sie können zum Beispiel jede Stunde eine Aufgabe mit Optionen für eine schnelle und einfache Überprüfung auslösen und jede Nacht eine andere Aufgabe ausführen, die mehr Zeit und Ressourcen benötigt.

Die Option„–user-param“ erlaubt es Ihnen, eine Zeichenkette in der Kommandozeile zu übergeben. Dann können Sie mit dem Get database parameter und der Konstante user param value können Sie die in der Befehlszeile übergebene Zeichenkette abrufen.

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

Weitere Einzelheiten finden Sie in diesem Blogbeitrag.

Kompilieren Sie ein Projekt mit dem Befehl USING A

Mit Hilfe des Compile project können Sie die Kompilierung eines Projekts starten, indem Sie dessen Pfad übergeben. Der Befehl akzeptiert auch ein Optionsobjekt, mit dem Sie Ihre Kompilierung einrichten können. Sie können zum Beispiel die Abhängigkeiten Ihres Projekts, das Intel- und Silicon-Target usw. angeben.

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

Wenn ein Fehler auftritt, gibt der Befehl ein Objekt mit einer Fehlerliste zurück, die aus der Fehlermeldung, dem Namen der Methode und der Zeilennummer besteht. Zur Erinnerung: Sie können mit dem Befehl METHOD OPEN PATH können Sie den Code-Editor direkt in der betreffenden Zeile öffnen. Um alle Optionen dieses Befehls kennenzulernen, empfehlen wir, diesen Blogbeitrag oder die Dokumentation zu lesen.

Es ist wichtig, die Möglichkeiten zu kennen, die dieser Befehl bietet, und zu wissen, wie man ihn richtig einsetzt. Aber die andere gute Nachricht ist, dass Sie ihn in einem Projekt im interpretierten Modus mit den Optionen„–dataless“ und„–headless“ ausführen können, ohne eine Entwicklungslizenz zu benötigen! Wenn Sie also eine externe Serverlösung verwenden, um Ihre Anwendung zu kompilieren, z. B. mit der git-Aktion auf GitHub, müssen Sie Ihre Lizenz nicht auf dem Server des Drittanbieters eingeben.

Log-Datei generieren

Bei automatischen Aufgaben ist es unerlässlich, über Protokolle zu verfügen, um zu wissen, dass die Aufgabe ausgeführt wurde, und um die Fehler im Falle eines Problems zu beheben. Aber in der Realität ist das nicht so einfach. Die Verwaltung ist bei macOS und Windows unterschiedlich. Die Dateistruktur auf den Servern kann unterschiedlich sein. Und das Skript kann auf einem Ihrer Server oder auf einem externen Server ausgeführt werden.

Die Lösung, die wir vorschlagen, ist die Verwendung des LOG EVENT Befehl mit der Konstante Into system standard outputs zu verwenden. Dann können Sie den Standardstream und den Fehlerstream in eine oder mehrere Dateien in der Befehlszeile umleiten. Auf diese Weise können Sie das Skript problemlos an Ihre Umgebung anpassen, ohne es zu ändern.

Nicht zuletzt kann es nützlich sein, zu wissen, wann das Skript ausgeführt wurde und wann der Fehler aufgetreten ist. Der Timestamp Befehl ist hierfür perfekt geeignet; er gibt eine Zeichenkette zurück, die leicht in eine Protokolldatei mit Millisekundengenauigkeit eingefügt werden kann.

LOG EVENT(Into system standard outputs; Timestamp+" - Ich bin eine Information"; Error information)
LOG EVENT (Into system standard outputs; Timestamp+" - Ich bin ein Fehler"; Error message)

Konkrete Beispiele

Voilà! Nach all den vorherigen Tipps haben wir ein Projekt erstellt, das auf GitHub verfügbar ist, um ein Projekt zu kompilieren. Wir übergeben ein stringifiziertes Objekt an„–user-param, das drei Attribute enthält:

  • path: der Pfad des zu kompilierenden Projekts (Pflichtattribut)
  • options: Optionsobjekt, das an den Befehl Compile Project übergeben wird (optionales Attribut)
  • quit: Übergeben Sie false, um 4D nach der Kompilierung nicht zu schließen, nützlich für Tests; standardmäßig wird 4D nach der Ausführung geschlossen (optionales Attribut)

Kompilierungsprojekt automatisieren

Hier sind einige Beispiele von Befehlszeilen, vergessen Sie nicht, die Pfade anzupassen.

Starten Sie eine Syntaxprüfung:

  • 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

Hier ist der Inhalt unserer infolog.txt-Datei; die errlog.txt ist leer:

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

Kompilieren mit den Standardeinstellungen:

  • 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

Kompilieren mit den Optionen, die an den Befehl „Projekt kompilieren“ übergeben wurden:

  • 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

Wie geht es weiter?

Jetzt liegt es an Ihnen. Zögern Sie nicht, auf GitHub oder im Forum Ihre Ideen oder Lösungen zur Automatisierung von Aufgaben mitzuteilen.

Vanessa Talbot
Product Owner - Vanessa Talbot kam im Juni 2014 zum 4D Programmteam. Als Product Owner ist sie für das Schreiben der User Stories und deren Umsetzung in funktionale Spezifikationen zuständig. Ihre Aufgabe ist es auch, sicherzustellen, dass die Implementierung der Funktionen den Anforderungen des Kunden entspricht. Seit ihrer Ankunft hat sie an der Definition der wichtigsten Funktionen in 4D gearbeitet. Sie hat an den meisten der neuen Funktionen für präemptives Multi-Threading gearbeitet und auch an einem sehr komplexen Thema: der neuen Architektur für erstellte Anwendungen. Vanessa hat einen Abschluss von der Telecom Saint-Etienne. Sie begann ihre Karriere am Criminal Research Institute als Entwicklerin für die audiovisuelle Abteilung. Sie hat auch in den Bereichen Medien und Medizin als Expertin für technischen Support, Produktion und die Dokumentation neuer Funktionen gearbeitet.