web-dev-qa-db-ja.com

TeamCityビルドランナーが実行可能ファイルを認識しない

TeamCityでのビルドの一部として単純なgruntfile.jsを実行しようとしています。ただし、gruntおよびgrunt-cliをグローバルノードパッケージとしてインストールした後でも、TeamCityはそれらを認識しません。コマンドラインでgruntと入力すると機能しますが、TeamCityでコマンドラインランナーまたはパラメーター付きの実行可能ファイルを使用して実行すると、

'grunt' is not recognized as an internal or external command

TeamCity.Node もインストールしてみました。これは、うなり声スクリプトを実行するためのプラグインですが、うなり声も見つかりません。何か案は?

23
Caleb Jares

承認されたソリューションを機能させることができませんでした。私にとっての問題は、TeamCityサービス(サーバーとエージェント)がシステムアカウントで実行されていることでした。私の知る限り、「OSのすべてのユーザーに対してnpmパッケージをグローバルにインストールする」という概念はありません。だから私:

  1. teamCity Windowsユーザーを作成しました
  2. teamCityサービスをそのユーザーとして実行するように変更しました
  3. teamCityユーザーとしてOSにログイン
  4. npm install -g grunt-cliを実行しました
  5. サービスを再開しました。

そこから、NodeJS、NPM、およびGruntタスクが機能し始めました。

33
Christopher

これがクリストファーの答えの補足です(コメントをするのに十分な評判がありません)。

ビルドサーバーでユーザーを作成したくない場合は、フルパスを記述してnpmパッケージを実行できます。ビルドサーバーに専用ユーザーを作成せずに Weyland を実行するコマンドラインランナーを次に示します。

  • コマンド実行可能ファイル:"C:\Program Files\nodejs\node.exe"
  • コマンドパラメータ:c:\users\Administrator\AppData\Roaming\npm\node_modules\weyland\bin\cli.js build

ところで、Node.jsのインストーラーには別の解決策があるようです。残念ながら、トリミングされています!

Node.jsインストーラーのスクリーンショットは次のとおりです。

14
Zeke Lu

私は TFSで動作するようにうなり声を出そうとしたときと同じ問題 に遭遇しましたtfsserviceユーザーによって実行されます。クリストファーの回答が示唆するように、別のユーザーとしてビルドを実行することは私たちにとって選択肢ではありませんでした。 C:\ Users\tfsservice\AppData\Roaming\npmtfsserviceユーザーのパスに追加した後、 TFSビルドエージェントがビルドを実行したときではなく、tfsserviceとして手動でログインしたときのgrunt-cli。最初は、grunt.cmdファイルへのフルパスを使用するようにビルドプロセスを変更しました。

だから私はこれを使うことから変更しました:

grunt deploy

これを使用する:

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

Team Cityユーザーに対しても同じようにすると問題が解決すると思います。もちろん、これを行う場合は、すべてのビルドサーバーの同じ場所にgrunt-cliがインストールされていることを確認する必要があります。

(tfsserviceが再起動されるように)PCを再起動する最後の手順を逃しただけで、フルパスを指定せずにビルドが不平を見つけることができたことが判明しました。

Zeke Luの回答で示されたトリミングされたnode.jsインストーラーの説明では、他のユーザーがPath環境変数を更新する必要があると言っていたと思います。

5
deadlydog

%AppData%\ Roaming\npmパスがWindowsのグローバルパス変数上にあることを確認し、チームエージェントサービスを再起動すると機能します

3
user1688046

NPMをインストールした後、TeamCityビルドエージェントを再起動する必要があります。

2
thebfactor

この質問はちょっと古いです。しかし、私は最近同じ問題に苦しんでいて、解決策を見つけることができませんでした...しかし、最後に私は見つけました。はい、どうぞ。

TeamCityのビルドステップには、次のものが含まれます。

1)インストールgrunt-cliコマンドラインコマンド:npm install grunt-cli

2)grunt build taskコマンドラインコマンドの実行:node "node_modules/grunt-cli/bin/grunt" build

どちらの場合も、作業ディレクトリはgrountfile.jsが置かれている場所にする必要があります。

1
Kath

これは奇妙で非常に迷惑なバグでしたが、ようやく回避策を見つけました。の中に %AppData%\Roaming\npmディレクトリには、「grunt」と「grunt.cmd」の2つのファイルがあります。 「grunt」はUNIXファイルであり、「grunt.cmd」はノードを使用してgrunt-cliアプリケーションを実行することになっていますが、そうではありません。 「grunt.bat」(「grunt.cmd」よりも優先されます)という新しいファイルを作成する必要がありました。

node "%~dp0\node_modules\grunt-cli\bin\grunt" %*

今では動作します。なぜだかわかりません。

0
Caleb Jares

TeamCityアカウントをシステムからローカルに変更する必要はありません Christoperが書いたように 。より簡単な方法です:

1. [ビルドエージェントマシン] PATHにノードディレクトリとローカルnpmパッケージディレクトリがあることを確認します。例:

 C:\ Users\'yourUserName'\AppData\Roaming\npm; C:\ Program Files\nodejs 
  1. [ビルドエージェントマシン]グローバルにgruntをインストールします:npm install grunt-cli
  2. [ビルドステップ]プロジェクトディレクトリでcmdを実行します:npm install -g grunt-cli。 この手順は(ローカルマシンで)1回だけ実行でき、ファイルの変更をリポジトリにコミットします
  3. [ビルドステップ]プロジェクトディレクトリでcmdを実行します:npm install
  4. [ビルドステップ] powershellスクリプトとしてgruntビルドを実行します:powershell -Command "grunt build"

何らかの理由で、システムアカウントで実行されているビルドエージェントは、cmdを介してC:\Users\'yourUserName'\AppData\Roaming\npmにアクセスできませんが、Powershellを介してアクセスできます。

0
Michał Jarzyna