6

TFS ビルド サーバーに npm と grunt をインストールしました。npm install -g grunt- cli を使用して grunt-cli をインストールした後、自分としてログインしたときにコマンドラインからgrunt deployを実行できました。

ただし、 TFS ビルドはtfsserviceユーザーとして実行され、 grunt deployを実行しようとすると、次のエラー メッセージが表示されます。

'grunt' is not recognized as an internal or external command, operable program or batch file.

そのため、ビルド サーバーに自分自身としてログインしているときに、コマンド プロンプトをtfsserviceとして実行すると、同じエラーが発生します。そのコマンド プロンプトからnpm install -g grunt-cliを実行しようとしたところ、正しくインストールされ、C:\Users\tfsservice\AppData\Roaming\npm に grunt ファイルが作成されたように見えましたが、それでも同じエラーが発生します。grunt deployを実行するとき。

grunt-cli がtfsserviceにインストールされていないように見えますか? tfsservice %homepath% を取得すると、予想される\Users\tfsserviceではなく、\Windows\system32に設定されていることがわかります。多分それはサービスアカウントであることがそれと関係がありますか?

Team City で grunt-cli を使用することについて同様の質問が寄せられているようですが、Team City 固有のプラグインの使用が推奨されています。

Team City の実行を別のユーザーとして変更したところ、すべてが適切に機能し始めたというこの投稿もあります。ただし、ビルドをtfsserviceとは別のユーザーとして実行するように変更することは、私にとって実際にはオプションではありません。

任意の提案をいただければ幸いです。ありがとう。

4

3 に答える 3

7

tfsserviceとしてログインし、npm install -g grunt-cliを実行すると、すべての grunt ファイルがC:\Users\tfsservice\AppData\Roaming\npmに配置されましたが、 C:\Users\tfsservice \ AppDataが見つかりませんでしたC:\Users\tfsservice\AppData\Roaming\npmをシステム パスに追加するまで、 \Roaming\npm\grunt.cmdファイル。tfsservice ユーザーの変数だけに新しい Path 変数を作成することで回避できるかもしれませんが、他のユーザーとしてログインしたときにも機能するようにしたかったのです。

ここに画像の説明を入力

手動で tfsservice としてログインし、新しいコマンド プロンプトを開いたときに grunt deploy が機能した後、実際の TFS ビルドが tfsservice としてビルドを実行したときにはまだ機能しませんでした最初に、次のように、フル パスを使用してコマンド ラインから grunt.cmd を呼び出すようにビルド プロセスを変更しました。

"C:\Users\tfsservice\AppData\Roaming\npm\grunt.cmd" deploy

そして、すべてのビルド マシンでnpm install -g grunt-cli as tfsservice を実行して、各ビルド サーバーの tfsservice ユーザーの AppData ディレクトリに grunt が存在することを確認しました。これは機能しましたが、修正というよりも回避策でした。

最後のステップは、TFS ビルド サーバーを再起動するだけでした。grunt deployを実行すると、ビルドで期待どおりに機能したため、完全なパスを指定する必要がなくなりました:) tfsservice を再起動するだけで十分だったかもしれませんが、安全のために PC を再起動しました。

于 2013-11-14T20:03:24.887 に答える
1

私もこの失敗を経験しました。npm フォルダーをグローバル パスに追加し、サーバーを再起動すると、これは修正されました。

于 2014-11-25T15:55:42.317 に答える