Ich verwende Hudson Version 1.324 für CI und habe ein paar Probleme:
Umgebung:
Ich habe ein Powershell (PS) -Skript, das kompiliert, NUnit-Tests ausführt und bei Erfolg eine 7z-Datei der Ausgabe erstellt. Das PS-Skript funktioniert über die Befehlszeile sowohl in meiner lokalen Entwicklungsumgebung als auch auf dem CI-Server, auf dem Hudson installiert ist.
1) Ausführungsrichtlinie mit Powershell.
Ich habe anfänglich eine PS-Konsole auf dem Server ausgeführt, die Set-ExecutionPolicy Unrestricted
ausgeführt hat, wodurch jedes Skript ausgeführt werden kann. (Ja, ich verstehe die Sicherheitsbedenken hier, ich versuche, etwas zum Laufen zu bringen und Unrestricted sollte die Sicherheitsprobleme entfernen, damit ich mich auf andere Probleme konzentrieren kann.)
[Das hat funktioniert und mir erlaubt, gestern das PS-Build-Skript von Hudson abzufeuern. Ich bin dann auf ein anderes Problem gestoßen, aber wir werden das mehr in Punkt # 2 besprechen.]
Sobald Hudson ein PS-Skript auslösen konnte, klagte es mit dem folgenden Fehler:
"C: \ Windows \ system32 \ WindowsPowerShell \ v1.0 \ powershell" & amp; 'OzSystems.Tools \ psake \ psake.ps1' '. \ Oz-build.ps1' "Der Begriff 'OzSystems.Tools \ psake \ psake.ps1' wird nicht als Cmdlet, funct erkannt ion, ausführbares Programm oder Skriptdatei. Überprüfen Sie den Begriff und versuchen Sie es erneut. Bei Zeile: 1 Zeichen: 2 + & amp; & lt; & lt; & lt; & lt; 'OzSystems.Tools \ psake \ psake.ps1' '. \ Oz-build.ps1' "
Mit derselben Befehlszeile kann ich das PS-Skript manuell von der Befehlszeile aus ausführen. Hudson kann PS jedoch nicht dazu bringen, dasselbe zu tun. Nachdem ich zusätzliche PS-Dokumentation angeschaut habe, habe ich das auch versucht:
%Vor%und bekam einen ähnlichen Fehler. Es scheint keine Dokumentation für das Powershell-Plugin für Hudson zu geben. Ich habe alle Powershell-Plugin-Dateien durchgesehen und sehe nichts, was konfigurierbar ist. Ich kann keine Protokolldatei für Hudson finden, um zusätzliche Informationen zu erhalten.
Kann mir jemand hinterher helfen?
2) Ich habe gestern mit # 1 gekämpft. Ich kam in diesem AM und versuchte, nach dem Neustart des Hudson-Servers / Dienstes erneut zu graben, und jetzt scheint es, dass die ExecutionPolicy auf Restricted zurückgesetzt wurde. Ich habe getan was gestern funktioniert hat, eine PS Konsole geöffnet und Set-ExecutionPolicy
bis Unrestricted
. Es zeigt Unrestricted
in der PS-Konsole an, aber Hudson sagt, dass es keine Rechte für die Ausführung von PS-Skripten hat. Ich habe eine neue PS-Konsole wieder geöffnet und bestätigt, dass das ExecutionPolicy
immer noch Unrestriced
ist - das ist es. Aber Hudson ist sich dieser Veränderung offensichtlich nicht bewusst. Wenn Sie den Hudson-Dienst erneut starten, ändert sich Hudsons Ansicht der Richtlinie nicht.
Weiß jemand, was hier vor sich geht?
Danke, Derek
Ich bin gerade auf das Problem mit dem Ausführen von Powershell-Skripten in Hudson gestoßen. Die Sache ist, dass Sie einen 32-Bit-Prozess von Java ausführen, und Sie haben Hudson für 64-Bit konfiguriert, aber nicht für 32-Bit. Sehen Sie sich den folgenden Thread an, den wir bei Microsoft erstellt haben.
Wenn du faul bist. 1. Starten Sie Powershell (x86) aus dem Startmenü als Administrator 2. Setzen Sie die Ausführungsrichtlinie auf remotesigned
Führen Sie dies einmal und Ihre Homefree.
Beim Ausführen von PowerShell von einer geplanten Aufgabe oder Hudson möchten Sie:
-Ex Unrestricted
) -Command { ... }
oder -File
NICHT BEIDE und nicht ohne zu spezifizieren, was Sie meinen. Versuchen Sie es (abgesehen davon, dass ich die Verwendung relativer Pfade nicht empfehle):
%Vor%Um klar zu sein, das funktioniert auch:
%Vor% Die erste Zeichenfolge nach -Command wird als DER NAME EINES BEFEHLS interpretiert, und jeder nachfolgende Parameter wird als Parameter an diesen Befehl übergeben. Die Zeichenfolge ist KEIN Skript, sondern der Name eines Befehls (in diesem Fall eine Skriptdatei) ... Sie können% /%> "&'OzSystems.Tools\psake\psake.ps1'"
nicht setzen, aber Sie können "OzSystems.Tools\psake\psake.ps1"
auch setzen, wenn Leerzeichen vorhanden sind .
Um aus der Hilfe zu zitieren (run PowerShell -?
) betone meine:
-Command
Führt die angegebenen Befehle (und alle Parameter) so aus, als ob sie es wären an der Windows PowerShell-Eingabeaufforderung eingegeben und dann beendet, sofern nicht NoExit ist angegeben. Der Wert von Command kann "-", eine Zeichenkette sein. oder ein Skriptblock.
Wenn der Wert von "-" lautet, wird der Befehlstext vom Standard gelesen Eingabe.
Wenn der Wert von Befehl ein Skriptblock ist, muss der Skriptblock beigefügt werden in geschweiften Klammern ({}). Sie können einen Skriptblock nur angeben, wenn Sie PowerShell.exe ausführen in Windows PowerShell . Die Ergebnisse des Skriptblocks werden zurückgegeben in der Parent-Shell als deserialisierte XML-Objekte, nicht als Live-Objekte.
Wenn der Wert von Command eine Zeichenfolge ist, muss Command der letzte Parameter sein im Befehl, weil alle nach dem Befehl eingegebenen Zeichen sind interpretiert als die Befehlsargumente.
Ich habe die gleichen Probleme wie Sie (wie Sie aus meinen Kommentaren gesehen haben). Ich habe den Powershell-Launcher aufgegeben und bin mit dem Batch-Datei-Launcher zum Ausführen von Dingen übergegangen. Obwohl ich das System auf uneingeschränkt eingestellt hatte, schien diese Einstellung für Hudsons Launcher keine Rolle zu spielen. Ich weiß nicht, ob es in einem anderen Kontext oder etwas läuft, sogar Dinge zum globalen Profil hinzuzufügen. PS1 schien nicht zu helfen. Am Ende habe ich
ausgeführt %Vor%was tut, was ich brauche, obwohl es nicht ideal ist. Ich habe den Plugin-Autor darüber per E-Mail informiert und werde ihn aktualisieren.
Bei Frage 1 versuchen Sie dies (vorausgesetzt, Sie verwenden PowerShell 2.0):
"C: \ Windows \ system32 \ WindowsPowerShell \ v1.0 \ powershell -executionPolicy Unbeschränkte Datei OzSystems.Tools \ psake \ psake.ps1 C: \ {Pfad} \ oz-build.ps1"
Sie verwenden "." für den Pfad zu oz-build.ps1. Ich vermute, dass Sie den vollständigen Pfad zu Ihrer oz-build.ps1-Datei angeben müssen, damit dies funktioniert. Es sei denn, die Infrastruktur, die den obigen Befehl ausführt, hat das aktuelle Verzeichnis korrekt eingestellt. Und selbst wenn es für den "Prozess" korrekt eingestellt ist, ist dies nur für .NET / Win32-API-Aufrufe und nicht für PowerShell-Cmdlets von Bedeutung. Das aktuelle Verzeichnis in PowerShell wird anders als das aktuelle Verzeichnis des Prozesses verfolgt, da in PowerShell mehrere Runspaces gleichzeitig ausgeführt werden können. Diese Art von globalem, veränderbarem Wert funktioniert in diesem Szenario nicht gleichzeitig.
Wie für Frage # 2, unter welchem Konto läuft der Hudson-Dienst? Stellen Sie sicher, dass das Konto Set-ExecutionPolicy RemoteSigned (oder uneingeschränkt) ausgeführt hat.
Ich habe gerade genau dieses Problem durchgemacht. Was für ein Schmerz!
Wenn Sie eine 32-Bit-JVM unter einem 64-Bit-Windows ausführen, stellen Sie sicher, dass Sie die Ausführungsrichtlinie für die 32-Bit-Powershell-Schnittstelle festlegen. Ich habe meine 32-Bit-Programmdatei hier gefunden:
%Vor%Die 32- und 64-Bit-Powershell-Umgebungen sind vollständig voneinander getrennt, sodass das Festlegen der Ausführungsrichtlinie in der einen keine Auswirkungen auf die andere hat.
Tags und Links powershell hudson execution policy