ISN AutoIt Studio CI/CD Buildpipeline Integration

Du möchtest Feedback losweden oder hast Vorschläge für das ISN AutoIt Studio? Dann bist du hier richtig!
Antworten
SebbiUltimate
Beiträge: 3
Registriert: Mo 4. Jan 2021, 17:47
Kontaktdaten:

ISN AutoIt Studio CI/CD Buildpipeline Integration

Beitrag von SebbiUltimate »

Wie schon im Bugtracker unter https://www.isnetwork.at/bugtracker/ind ... ask_id=306 erwähnt, bin ich momentan dabei, meine größten Softwareprojekte in GitLab zu übertragen, um durch Continuous Integration eine automatische Kompilierung und durch Continuous Delivery eine automatische Paketierung bzw. Ausbringung der Software zu erzielen. Es gibt ja schon das Commandline Tool ISN_cmd.exe, aber aufgrund der im Bugtracker erwähnten Probleme bin ich dazu übergegangen, als Workaround die AutoIt3Wrapper.au3 zum automatischen Kompilieren zu nutzen.
Momentan sieht daher das Powershell-Skript für den Buildschritt wie folgt aus:

Code: Alles auswählen

$au3path=Get-ItemPropertyValue -Path "HKLM:\SOFTWARE\WOW6432Node\AutoIt v3\AutoIt" -Name InstallDir
Start-Process -FilePath "$au3path\AutoIt3_x64.exe" -ArgumentList "`"$pwd\AutoIt3Wrapper.au3`" /autoit3dir `"$au3path`" /in project.au3 /out project.exe" -NoNewWindow -PassThru -RedirectStandardError compiler_err.log -RedirectStandardOutput compiler_out.log -Wait
Get-Content compiler_out.log
Get-Content compiler_err.log
Eigentlich würde der Code mit dem ISN AutoIt Studio ungefähr so aussehen (mit Workaround wegen fehlendem Autoit_Studio.exe Start und Changelog-Dialog):

Code: Alles auswählen

$isnpath=Get-ItemPropertyValue -Path "HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{7AAAE763-9EE4-448D-994F-94B52EEAA180}_is1" -Name "InstallLocation"
$proc=Start-Process -FilePath "$isnpath\Autoit_Studio.exe" -PassThru -Verbose
Start-Sleep -Seconds 30
& "$isnpath\Data\ISN_cmd.exe" "/isn_open_project project.isn" /isn_compile_project /isn_close_project /isn_shutdown
Stop-Process -Id $proc.Id -Force -Verbose
Außerdem gibt es noch eine Besonderheit bei 64-bit Windows im Systemkontext:
Der Fehler

Code: Alles auswählen

Aut2exe.exe ended with errors because the target exe wasn't created, abandon build.
tritt auf, wenn ein 32-Bit Prozess also z.B. eine AutoIt3.exe die eine AutoIt3Wrapper.au3 aufruft oder eine 32-Bit kompilierte Autoit_Studio.exe die Aut2Exe startet, die als 64-Bit Prozess läuft. Der Temp-Pfad für die Aut2Exe im Systemkontext ist durch die Umgebungsvariable %LOCALAPPDATA%=C:\WINDOWS\system32\config\systemprofile\AppData\Local\ auf C:\WINDOWS\system32\config\systemprofile\AppData\Local\AutoIt v3\Aut2exe\ gesetzt. Durch die Wow6432-Redirection wird jedoch der 32-Bit Prozess auf C:\WINDOWS\syswow64\config\systemprofile\AppData\Local\AutoIt v3\Aut2exe\ umgeleitet, sodass die kompilierte Temp-Exe nicht gefunden wird.
Zur Behebung gibt es 3 Möglichkeiten:
  • Immer 64-Bit Anwendungen nutzen, siehe oben die AutoIt3Wrapper.au3 mit der AutoIt3_x64.exe aufrufen, wenn ich das 32-Bit AutoIt Studio habe, funktioniert das nicht
  • Immer 32-Bit Anwendungen nutzen, laut "ISN AutoIt Studio\Data\AutoIt3Wrapper\AutoIt3Wrapper.au3" Zeile 743ff müsste die $AUT2EXE_PGM durch einen Eintrag in der AutoIt3Wrapper.ini unter [AutoIt] aut2exe=... mit der 32-Bit Version überschrieben werden.
  • Die Umgebungsvariable %LOCALAPPDATA% temporär im Skript in einen Pfad ändern, der nicht von der Redirection betroffen ist
Hat noch jemand schon versucht, AutoIt3 Builds zu automatisieren?
Benutzeravatar
ISI360
Administrator
Beiträge: 284
Registriert: Fr 11. Okt 2013, 13:06
Kontaktdaten:

Re: ISN AutoIt Studio CI/CD Buildpipeline Integration

Beitrag von ISI360 »

Hallo

Wie im Bugtracker erwähnt, hab ich einige deiner Wünsche bereits in meine Testversion einarbeiten können.
Folgendes hab ich bis jetzt umgesetzt:

- Neuer Parameter "/isn_start_allowed": Ist dieser gesetzt, darf das Command line Tool eine neue ISN instanz starten (falls keine gefunden wurde)
- Bei kompilieren, skript testen und projekt testen wird die ausgabe der ISN Console nun in das Command Line Tool übergeben.
- Neuer Parameter "/isn_trigger_macroslot": Triggert einen der 7 Makroslots im ISN. Dies ist besonders nützlich für Automatisierungen. So kannst du dir ein Makro nach deinen wünschen zusammenstelle, und direkt ausführen lassen. Evtl. anfalende Debug Meldungen werden wieder in die Console umgeleitet.
- Diverse Parameter wie "/isn_open_project" warten nun, biss die Aktion im ISN beendet ist.

Was würdest du dazu sagen?
(Ich stelle gerade eine Testversion für dich zusammen, Link folgt per PN)

Edit: Zu folgenden würde ich noch gerne deine Meinung hören: Beim kompilieren (oder anderen Aktionen) können natürlich Fehler auftreten. Das ISN zeigt in diesem Fall eine MsgBox an. Dies würde aber die automatisierung anhalten, da hier auf eine Eingabe gewartet wird.
Was wäre hier der beste Weg? Einfach überspringen? Die verarbeitung stoppen? Oder lassen wie es ist und auf eine Benutzereingabe warten?
SebbiUltimate
Beiträge: 3
Registriert: Mo 4. Jan 2021, 17:47
Kontaktdaten:

Re: ISN AutoIt Studio CI/CD Buildpipeline Integration

Beitrag von SebbiUltimate »

Danke für die schnelle Umsetzung, das hört sich gut an.
Zu folgenden würde ich noch gerne deine Meinung hören: Beim kompilieren (oder anderen Aktionen) können natürlich Fehler auftreten. Das ISN zeigt in diesem Fall eine MsgBox an. Dies würde aber die automatisierung anhalten, da hier auf eine Eingabe gewartet wird.
Was wäre hier der beste Weg? Einfach überspringen? Die verarbeitung stoppen? Oder lassen wie es ist und auf eine Benutzereingabe warten?
Es kommt ja drauf an, ob es für alle Fehlermeldungen eine Funktion im Sourcecode des ISN AutoIt Studios gibt, dann würde ich da eine Verzweigung einbauen und statt einer Meldung einen Fehler an die ISN_cmd.exe zurückgeben wenn es nicht interaktiv läuft.
Ansonsten besteht ja auch die Möglichkeit, es so zu machen wie bei AutoIt3Wrapper.au3 Zeile 2396ff:

Code: Alles auswählen

If WinExists("Aut2Exe Error", "Error adding file") Then
    Local $errtxt = StringReplace(WinGetText("Aut2Exe Error", "Error adding file"), @LF, " ")
    $errtxt = StringReplace($errtxt, "OK", "")
    WinClose("Aut2Exe Error", "Error adding file")
    Write_RC_Console_Msg("Aut2exe.exe encountered an error ended with error: " & $errtxt & ".", 2)
    Write_RC_Console_Msg("Target exe is not created, abandon build.", 2)
    Exit 1
EndIf
Hier wird geprüft, ob eine Fehlermeldung erscheint, dann wird dieser Text aus dem Fenster in die Standardausgabe geschrieben, die MsgBox geschlossen und der Fehlercode mit dem Exitcode zurückgegeben. So könnte man das auch in der ISN_cmd.exe umsetzen.
SebbiUltimate
Beiträge: 3
Registriert: Mo 4. Jan 2021, 17:47
Kontaktdaten:

Re: ISN AutoIt Studio CI/CD Buildpipeline Integration

Beitrag von SebbiUltimate »

Ich würde ja gerne auf die PN antworten, aber ich darf das nicht (siehe Screenshot).

Danke, die Testversion sieht gut aus und soweit passt jetzt alles wenn es keinen Kompilierungsfehler gibt:
- Das ISN AutoIt Studio wird gestartet wenn es nicht läuft
- Der Changelog Dialog wird übersprungen
- Die Ausgabe beim Kompilieren wird in der Konsole ausgegeben

Allerdings öffnet sich eine MsgBox bei Compiler-Fehlern, daher würde ich diese in dem Fall ausblenden und den Fehler in der Standardausgabe ausgeben, das ISN AutoIt Studio beenden falls angegeben und die ISN_cmd.exe mit einem Exitcode !=0 beenden.

Der Pfad der ISN_cmd.exe ist anscheinend nicht ganz egal. Wenn ich die ISN_cmd.exe nicht im Data-Ordner starte kommt die Fehlermeldung

Code: Alles auswählen

ERROR: Cannot start new ISN instance! AutoIt_Studio.exe not found!
Dateianhänge
Bild_2021-01-11_190709.png
Bild_2021-01-11_190709.png (28.9 KiB) 1369 mal betrachtet
Benutzeravatar
ISI360
Administrator
Beiträge: 284
Registriert: Fr 11. Okt 2013, 13:06
Kontaktdaten:

Re: ISN AutoIt Studio CI/CD Buildpipeline Integration

Beitrag von ISI360 »

SebbiUltimate hat geschrieben: Mo 11. Jan 2021, 19:19 ERROR: Cannot start new ISN instance! AutoIt_Studio.exe not found!
Aja stimmt danke, den Plan die "ISN_cmd.exe" aus dem Data verzeichnis zu entfernen hab ich wohl nach einfügen dieser Funktion getroffen. :lol:
Ich werde aber für den Parameter "/isn_start_allowed" einfach einen optionalen Parameter anhängen...so kann der Pfad zur AutoIt_Studio.exe per Hand hinzugefügt werden. (zb. "/isn_start_allowed C:\test\AutoIt_Studio.exe")

Betreffend den MsgBoxen im ISN hätte ich mir noch folgendes überlegt:
Ein neuer Parameter (zb. "/isn_error_behavior 0") mit dem die gewünschte verhaltensweise des ISN justiert werden kann. Die zahlt "0" in dem beispiel kann halt dann durch verschiedene Varianten ersetzt werden.
z.B:
0 = normales verhalten (msgBoxen werden angezeigt und pausieren die verarbeitung) (default)
1 = Bei Fehlern abbrechen. Weitere verarbeitung der ISN_cmd stoppen, ISN_Cmd beendet mit exit code != 0
2 = Alle Fehler ignorieren und anstehende Aktionen weiter verarbeiten
Benutzeravatar
ISI360
Administrator
Beiträge: 284
Registriert: Fr 11. Okt 2013, 13:06
Kontaktdaten:

Re: ISN AutoIt Studio CI/CD Buildpipeline Integration

Beitrag von ISI360 »

@SebbiUltimate
Habe deinen Link zur Testversion mit dem aktuellen Build aktualisiert. (Link ist der gleiche)
Darin kannst du den neuen Parameter /isn_error_behavior testen.
Und auch der Pfad zur AutoIt_Studio.exe kann mit /isn_start_allowed nun angegeben werden. ("/isn_start_allowed C:\isn\Autoit_studio.exe")

Bitte wieder um dein Feedback
Antworten