Pakete mit Package Recorder mit gepackten sourcen erstellen

Hallo Zusammen, gibt es eine Hilfe wie man Pakete mit dem Package Recorder erstellen kann wo die Quelle gezipt ist? Wie muss man da vorgehen? Bsp ist Oracle Client. Es gibt ihn bei neo42 in der 21er Version. Wir benötigen ihn aber in der 19er und müssen das selber bauen. Kann da jemand unterstützen? Tips wären wilkommen.

Ich konnte in dem 21er Paket in der json sehen das es eine Variable für den Temp Ordner und eine für den Namen des Zips gibt. Und das ganze wird über Powershell als CustomScript entpackt. Sind die Scripte offiziell zu bekommen?

Vielen Dank

G ROBudus

Hallo ROBudus,

viele von euch fragen sich vielleicht, ob und wie sie unsere Paketdepot-Pakete als Vorlage für eigene Projekte nutzen können. Die gute Nachricht: Ja, das ist ausdrücklich erlaubt! Ihr könnt entweder einzelne Skriptzeilen herauskopieren und in eure eigenen Skripte integrieren oder das gesamte Paket als Grundlage nehmen und anpassen.

Nehmen wir als Beispiel den Oracle Client: Bevor ihr loslegt, lohnt es sich zu prüfen, ob die Installationslogik der Version 19 mit der der Version 21 identisch ist. Falls ja, könnt ihr einfach das bestehende Paket für die 21er-Version kopieren. Ändert dann den Ordnernamen, um die neue Version widerzuspiegeln, und passt in der neo42PackageConfig.json die Versionsnummer, das Datum, den Autor und andere Metadaten an. Im Files-Ordner tauscht ihr anschließend die Installationsdateien aus und testet, ob alles wie gewünscht funktioniert.

Ein wichtiger Punkt bei vielen Paketen ist das Entpacken von Dateien. Hier setzen wir in der Regel auf das PowerShell-Cmdlet Expand-Archive, das eigentlich ein einfacher Einzeiler ist. Um jedoch sicherzustellen, dass alles sauber abläuft, bauen wir etwas Logik drumherum. So löschen wir beispielsweise vor dem Entpacken den Zielordner, um sicherzugehen, dass keine alten Dateien übrig bleiben. Nach dem Entpacken prüfen wir, ob der Vorgang erfolgreich war.

Ein einfaches Beispiel, das ihr euch als PowerShell-Snippet im Package Recorder hinterlegen könnt, sieht so aus:

Remove-Folder "$envSystemdrive\TempInstFolder"
Expand-Archive -Path "$dirFiles\NT_213000_client.zip" -DestinationPath "$envSystemdrive\TempInstFolder"
if ( ($LASTEXITCODE -ne 0) -or ($false -eq (Test-Path -Path "$envSystemdrive\TempInstFolder")) ) {
		Exit-NxtScriptWithError -ErrorMessage "Unzip of installation files in temporary folder '$envSystemdrive\TempInstFolder' failed!" -ErrorMessagePSADT $($Error[0].Exception.Message) -MainExitCode $LASTEXITCODE
	}

Zuerst wird der temporäre Ordner gelöscht, dann die ZIP-Datei entpackt und anschließend geprüft, ob alles geklappt hat. Sollte etwas schiefgehen, wird eine Fehlermeldung ausgegeben. Und vergiss nicht: Am Ende des Skripts solltet ihr den temporären Ordner wieder bereinigen.

Remove-Folder "$envSystemdrive\TempInstFolder"

Für mehr Sicherheit und Flexibilität arbeiten wir in einigen Paketen mit New-NxtTemporaryFolder. Dieses Cmdlet erstellt bei jeder Ausführung einen zufällig generierten temporären Ordner mit eingeschränkten Zugriffsrechten. Das macht das Skript aber etwas komplexer, da ihr den Pfad des neuen Ordners in einer Variable speichern und bei allen Pfadangaben entsprechend ersetzen müsst.

Kleine Ergänzung/Korrektur:

Da das CMDlet Expand-Archive im Fehlerfall leider meist keinen brauchbaren ExitCode zurückgibt, ist ein Konstrukt über try/catch hier die bessere Umsetzung:

try {
    Remove-Folder "$envSystemdrive\TempInstFolder"
    Expand-Archive -Path $dirFiles\NT_213000_client.zip -DestinationPath "$envSystemdrive\TempInstFolder" -Force -ErrorAction Stop
}
catch {
    Exit-NxtScriptWithError -ErrorMessage "Unzip of installation files in temporary folder '$envSystemdrive\TempInstFolder' failed!" -ErrorMessagePSADT $($Error[0].Exception.Message) -MainExitCode 69001
}

Der MainExitCode ist hier beispielhaft und kann nach eigenen Bedürfnissen gesetzt werden.

Gruß René.

Grossartig. ich teste mal. Thx