8

CI にHudson バージョン 1.324を使用していますが、いくつかの問題があります。

環境:

  • Windows Server 2008
  • Powershell v1.0
  • サービスとして実行されている Hudson 1.324
  • Hudson Powershell プラグインがインストールされています
  • Psake (別名 "Powershell Make/Rake" は Github から入手可能) 0.23 (この最初の投稿時点でのすべての現在/最新バージョン)

コンパイルして NUnit テストを実行し、成功した場合は出力の 7z ファイルを作成する Powershell (PS) スクリプトがあります。PS スクリプトは、私のローカル開発ボックスと Hudson がインストールされている CI サーバーの両方で、コマンド ラインから動作します。

1) Powershell による実行ポリシー。

最初に、サーバー上で PS コンソールをSet-ExecutionPolicy Unrestricted実行した run 、これにより、任意のスクリプトを実行できます。(はい、ここでセキュリティ上の懸念があることは理解しています。私は何かを機能させようとしています。Unrestricted はセキュリティの問題を取り除く必要があるため、他の問題に集中できます。)

[これは機能し、昨日 Hudson から PS ビルド スクリプトを起動することができました。その後、別の問題に遭遇しましたが、それについては項目 2 で詳しく説明します。]

Hudson が PS スクリプトを起動できるようになると、次のエラーが表示されます。

"C:\Windows\system32\WindowsPowerShell\v1.0\powershell "& 'OzSystems.Tools\psake\psake.ps1' '.\oz-build.ps1'" 'OzSystems.Tools\psake\psake.ps1' という用語' は、コマンドレット、関数、操作可能なプログラム、またはスクリプト ファイルとして認識されていません。用語を確認して、もう一度やり直してください。行:1 文字:2 + & <<<< 'OzSystems.Tools\psake\psake.ps1' ' .\oz-build.ps1'"

同じコマンド ラインを使用して、コマンド ラインから PS スクリプトを手動で正常に実行できます。ただし、ハドソンは PS に同じことをさせることができません。追加のPSドキュメントを見た後、これも試しました:

"& 'OzSystems.Tools\psake\psake.ps1' '.\oz-build.ps1'"

同様のエラーが発生しました。Hudson 用の Powershell プラグインに関するドキュメントはないようです。すべての Powershell プラグイン ファイルを確認しましたが、構成可能なものは何もありません。Hudson が追加情報を取得するためのログ ファイルが見つかりません。

誰かがこれを過ぎて私を助けることができますか?

2)私は昨日 #1 とレスリングをしました。私はこの午前に来て、Hudson サーバー/サービスを再起動した後、再度掘り下げようとしましたが、ExecutionPolicy が制限付きにリセットされたようです。昨日うまくいったことをして、PSコンソールを開いSet-ExecutionPolicyUnrestricted. PS コンソールに表示Unrestrictedされますが、ハドソン氏によると、PS スクリプトを実行する権限はありません。新しい PS コンソールを再度開いて、ExecutionPolicyまだ残っていることを確認しましたUnrestriced。しかし、ハドソンは明らかにこの変化に気づいていません。Hudson サービスを再起動しても、Hudson のポリシーに対する見方は変わりません。

ここで何が起こっているか知っている人はいますか?

ありがとう、デレク

4

5 に答える 5

7

hudson で powershell スクリプトを実行する際に問題が発生しました。問題は、Java の 32 ビット プロセスを実行していて、Hudson を 32 ビットではなく 64 ビット用に構成したことです。Microsoft で作成した次のスレッドを参照してください。

http://social.technet.microsoft.com/Forums/en/winserverpowershell/thread/a9c08f7e-c557-46eb-b8a6-a19ba457e26d

あなたの怠け者なら。1. 管理者権限でスタートメニューからpowershell(x86)を起動 2. 実行ポリシーをremotesignedに設定

これを一度実行すると、ホームフリーになります。

于 2011-02-07T15:17:14.797 に答える
2

スケジュールされたタスクまたは Hudson から PowerShell を実行する場合:

  1. -ExecutionPolicy パラメーターを指定します (あなたの場合: -Ex Unrestricted)
  2. どちらを意味するかを指定せずに、どちらか -Command { ... }または-File NOT BOTHを使用してそのコマンドを指定します。

これを試してください(ただし、相対パスの使用はお勧めしません):

PowerShell.exe -Ex Unrestricted -Command "C:\Path\To\OzSystems.Tools\psake\psake.ps1" ".\oz-build.ps1"

明確にするために、これも機能します。

PowerShell.exe -Ex Unrestricted -Command "&{&'OzSystems.Tools\psake\psake.ps1' '.\oz-build.ps1'}"

-Command の後の最初の文字列はコマンドの名前として解釈され、その後のすべてのパラメーターはそのコマンドにパラメーターとして渡されます。文字列はスクリプトではなく、コマンド (この場合はスクリプト ファイル) の名前です... 入れることはできませんが、スペースが含まれていても入れる"&'OzSystems.Tools\psake\psake.ps1'"ことができます。"OzSystems.Tools\psake\psake.ps1"

ヘルプ (実行PowerShell -?) 強調鉱山から引用するには:

-Command

NoExit が指定されていない限り、Windows PowerShell コマンド プロンプトで入力されたかのように、指定されたコマンド (および任意のパラメーター) を実行し、終了します。Command の値は、文字列 "-" にすることができます。またはスクリプト ブロック。

Command の値が "-" の場合、コマンド テキストは標準入力から読み取られます。

Command の値がスクリプト ブロックの場合は、スクリプト ブロックを中かっこ ({}) で囲む必要があります。スクリプト ブロックを指定できるのは、Windows PowerShell で PowerShell.exe を実行している場合のみです。スクリプト ブロックの結果は、ライブ オブジェクトではなく、逆シリアル化された XML オブジェクトとして親シェルに返されます。

Command の値が文字列の場合、 Command は command の最後のパラメーターである必要があります。これは、コマンドの後に入力されたすべての文字がコマンド引数として解釈されるためです。

于 2009-12-14T19:32:20.563 に答える
1

私はちょうどこの正確な問題を乗り越えました。なんて痛い!

64 ビット Windows で 32 ビット JVM を実行している場合は、32 ビット Powershell インターフェイスの実行ポリシーを設定していることを確認してください。ここで32ビットの実行可能ファイルを見つけました:

C:\Windows\syswow64\Windowspowershell\v1.0\powerhsell.exe

32 ビットと 64 ビットの Powershell 環境は完全に異なるため、一方で実行ポリシーを設定しても他方には影響しません。

于 2011-01-25T19:35:43.690 に答える
1

私はあなたと同じ問題を抱えています(私のコメントからわかるように)。私は、powershell ランチャーをあきらめて、バッチ ファイル ランチャーを使用して実行することにしました。システムを無制限に設定していたにもかかわらず、その設定は hudson のランチャーには関係ないようでした。他のコンテキストまたは何かで実行されるかどうかはわかりませんが、グローバル profile.ps1 に何かを追加しても役に立たなかったようです。私がやったことは実行していました

powershell " set-executionpolicy Unrestricted; & 'somefile.ps1'" 

理想的ではありませんが、これは必要なことを行います。これについてプラグインの作成者に電子メールを送り、更新します。

于 2009-09-25T16:43:10.047 に答える
1

質問 #1 については、これを試してください (PowerShell 2.0 を使用していると仮定します)。

"C:\Windows\system32\WindowsPowerShell\v1.0\powershell -executionPolicy Unrestricted -file OzSystems.Tools\psake\psake.ps1 C:\{path}\oz-build.ps1"

「。」を使用しています。oz-build.ps1 へのパス。これを機能させるには、oz-build.ps1 ファイルへのフル パスを指定する必要があると思います。上記のコマンドを実行するインフラストラクチャで現在のディレクトリが正しく設定されていない限り。また、「プロセス」に対して正しく設定されていても、それは .NET/Win32 API 呼び出しにのみ関係し、PowerShell コマンドレットには関係ありません。PowerShell では複数の実行空間を同時に実行できるため、PowerShell の現在のディレクトリは、プロセスの現在のディレクトリとは異なる方法で追跡されます。この種のグローバルで変更可能な値は、この同時実行シナリオでは機能しません。

質問 2 についてですが、Hudson サービスはどのアカウントで実行されていますか? アカウントが Set-ExecutionPolicy RemoteSigned (または無制限) を実行したことを確認します。

于 2009-09-24T20:29:04.423 に答える