TeamCity构建运行器不识别可执行文件

Cal*_*res 23 command-line gruntjs

我正在尝试运行一个简单的操作,gruntfile.js作为我在TeamCity中构建的一部分.但是,即使在将grunt和grunt-cli安装为全局节点包之后,TeamCity仍然无法识别它们.我可以输入grunt命令行并且它可以工作,但是当我在TeamCity中通过命令行运行程序或带参数的可执行文件运行它时,它仍然给出

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

我还尝试安装TeamCity.Node,这是一个用于运行grunt脚本的插件,但它也找不到grunt.有任何想法吗?

Chr*_*her 33

我无法获得可接受的解决方案.对我来说问题是TeamCity服务(服务器和代理)在系统帐户下运行.AFAIK,没有"为操作系统的所有用户全局安装npm包"的概念.所以我:

  1. 创建了一个TeamCity Windows用户
  2. 将TeamCity服务更改为以该用户身份运行
  3. 以TeamCity用户身份登录操作系统
  4. 跑了npm install -g grunt-cli
  5. 重新启动了服务.

从那里开始,NodeJS,NPM和Grunt任务刚刚开始工作.


Zek*_* Lu 14

这是克里斯托弗答案的补充(我没有足够的声誉来发表评论).

如果您不想在构建服务器上创建用户,可以编写完整路径来执行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安装程序的屏幕截图:

  • 只是把它扔到那里,对我来说,Nodejs安装程序为每个用户安装了npm,但是justr必须重新启动才能使环境变量对其他用户有效. (2认同)

dea*_*dog 5

当我尝试使用TFS工作时,我遇到了同样的问题,它将由tfsservice用户运行.像Christopher的回答所说的那样,以不同的用户身份运行我们的构建对我们来说不是一个选择.在我将t:\ Users\tfsservice\AppData\Roaming \npm添加tfsservice用户的路径后,当我手动以tfsservice身份登录时,它能够找到grunt-cli,但是在TFS Build代理执行构建时却找不到.起初我刚刚更改了构建过程以使用grunt.cmd文件的完整路径.

所以我改变了使用它:

grunt deploy
Run Code Online (Sandbox Code Playgroud)

使用这个:

"C:\Users\tfsservice\AppData\Roaming\npm\grunt.cmd" deploy
Run Code Online (Sandbox Code Playgroud)

我想为你的Team City用户做同样的事情也可以解决问题.当然,如果您这样做,您必须确保grunt-cli安装在所有构建服务器上的相同位置.

事实证明,我刚刚错过了重新启动我的PC的最后一步(以便tfsservice将重新启动),然后构建能够找到grunt而不指定完整路径.

我假设Zeke Lu的答案所显示的修剪后的node.js安装程序描述将说明其他用户需要更新其Path环境变量.