TFS生成找不到Grunt

我在我们的TFS构build服务器上安装了npm和grunt。 我使用npm install -g grunt-cli安装了grunt-cli ,然后能够在以我自己的身份login时从命令行运行grunt deploy

出TFS生成作为tfsservice用户虽然运行,当它试图做的grunt部署它会得到一个错误消息:

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

所以,当我自己在构build服务器上login时,如果我运行命令提示符作为tfsservice我得到相同的错误。 所以我尝试从该命令提示符下执行npm install -g grunt-cli ,它看起来已经正确安装并在C:\ Users \ tfsservice \ AppData \ Roaming \ npm中创build了grunt文件,但是仍然得到相同的错误运行grunt部署时

所以它看起来像grunt-cli没有得到安装tfsservice ? 当我得到tfsservice%homepath%时,我发现它被设置为\ Windows \ system32 ,而不是预期的\ Users \ tfsservice ; 也许这是一个服务帐户有什么关系呢?

我发现类似的问题已经被要求在Team City中使用grunt-cli ,但是它build议使用Team City特定的插件。

还有一个post说,他们改变了团队城市作为一个不同的用户运行,然后一切都开始正常工作。 改变我们的版本,作为一个不同的用户运行,而不是tfs服务,但对我来说不是一个真正的select。

任何build议表示赞赏。 谢谢。

tfsservice身份login并运行npm install -g grunt-cli后,它将所有grunt文件放在C:\ Users \ tfsservice \ AppData \ Roaming \ npm中 ,但找不到C:\ Users \ tfsservice \ AppData \ Roaming \ npm \ grunt.cmd文件,直到我将C:\ Users \ tfsservice \ AppData \ Roaming \ npm添加到系统path; 你也许能够为tfsservice用户的variables创build一个新的Pathvariables,但是我希望它也可以像其他用户一样login。

在这里输入图像描述

一旦我做了这个grunt部署工作,当我手动login为tfsservice并打开一个新的命令提示符,但仍然不会工作时,实际的TFS构build执行构build为tfsservice。 起初,我只是修改了我的构build过程,使用其完整path从命令行调用grunt.cmd,如下所示:

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

并确保我在所有构build机器上运行了npm install -g grunt-cli作为tfsservice,以确保每个构build服务器上的tfsservice用户的AppData目录中都存在grunt。 这工作,但更多的是解决方法的解决方法。

原来最后一步是我只需重新启动TFS生成服务器。 一旦我做了这个grunt部署按预期工作的构build,所以我不需要指定完整的path了:)只要重新启动tfs服务可能已经足够,但我只是重新启动电脑是安全的。

我也经历了这个失败。 将npm文件夹添加到全局path并重新启动服务器确实解决了这个问题。

我们面临同样的问题,我们做了以下工作:

首先,我们在我们的系统用户上安装了也用于构build的所有软件。

为了找出将要使用哪个用户,我们添加了一个带有echo%username%的batch file,并将“批处理脚本”任务添加到了构build过程中,并让这个任务执行我们的脚本。

所以我们可以用TFS所用的相同用户在TFS上安装所有需要的软件,如果它正在构build一个人工制品。

我们试过如果npm正在工作,grunt被安装在全球范围内,而且ruby也得到了它的好评。 一切configuration和添加错过的pathvariables后,一切工作正常。

所以我们知道,构build用户是理解所有给定的批处理命令,因为我们也尝试了这个用户插入。

错误=(…每一个构build总是向我们展示:

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

以及npm和rubysass。

所以我们用相同的描述方式执行了一个批处理脚本,只有echo%path%作为其内容。

经过很多失败的构build,并通过批处理脚本和绝对path调用所有工具,我们发现这篇文章,只是重新启动TFS和一切炒作像一个魅力。

所以看来TFScaching了给定的pathvariables,并没有在每个构build中寻找它们。 一些其他的解释,或者提示如何避免TFS的这种行为?

我发现了一个windows cli中同样的行为,可以想象它仍然是一个问题,所以我们可以在每个构build之前运行这个脚本。 但是对于我的观点来说,这看起来有点不好意思。

Thx家伙的好post。