无法使TeamCity构建步骤执行grunt-cli

5
我正在尝试在TeamCity服务器上自动构建我的项目。我使用grunt定义和配置任务,在本地工作正常。然而,我在Windows Server 2008上运行的TeamCity无法将grunt识别为可执行文件,因此当调用grunt时,构建将失败,因为它不可用。
我已经在服务器上安装了grunt-cli,并且可以在通过ssh登录时执行它(当我以这种方式触发构建脚本时,构建脚本也会成功)。
在调用grunt之前,我运行npm install,并尝试使用package.json中的preinstall指令强制安装grunt-cli,例如:
{
  "name": "someName",
  "version": "0.0.1",
  "private": true,
  "scripts" : {
    "preinstall" : "npm install grunt-cli -g"
  },
  "devDependencies": {
    "grunt": "~0.4.1",
    "grunt-contrib-jshint": "~0.6.3",
    "grunt-contrib-less": "~0.8.1",
    "grunt-contrib-watch": "~0.5.3",
    "grunt-contrib-requirejs": "~0.4.1",
    "grunt-strip": "~0.2.1",
    "grunt-bump": "0.0.11"
  } 
}

我看到npm正在安装grunt-cli,但在下一步中却找不到grunt。

我还尝试将其包装成一个bat文件或使用多个构建步骤来安装依赖项并运行grunt任务。

有人对此有任何意见吗?


2个回答

6

当我尝试让我们的TFS构建代理运行grunt-cli时,我遇到了同样的问题。最终,我只是改变了我的构建过程,使用完整路径来运行grunt-cli可执行文件。

所以我从这个改成了:

grunt deploy

使用这个:

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

我知道这只是一个权宜之计,而不是真正的解决方案,但它应该足以让您继续进行。希望这能帮到你。
-- 更新 --
我只需要将“C:\ Users \ tfsservice \ AppData \ Roaming \ npm”(即grunt.cmd文件所在位置)添加到我的系统路径中,然后重新启动我的构建服务器,便能使其正常运行。 由于tfsservice既是用户又是正在运行的服务,因此需要重新启动计算机;仅重新启动服务可能就足够了,但我没有测试过。
在这之后,我们使用grunt部署来执行构建工作,一如既往。

我最终(就像标记为重复的问题一样)让我的BuildAgent作为独立用户运行,并拥有自己安装的grunt-cli。现在我遇到了其他问题:grunt进程随机失败(它只是停止),但返回0,因此部署将继续。你是否有类似的问题? - m90
@m90 我昨天刚实现了这个功能,目前还没有发现任何问题。如果后续我发现了问题,我会告诉你的。感谢提醒。 - deadlydog

2
你正在Windows服务器上运行Teamcity代理程序吗? 有一个用于Teamcity的Node.js/Grunt插件:https://github.com/jonnyzzz/TeamCity.Node 就我使用而言,使用这个插件来运行grunt和Teamcity没有任何问题。

我没有成功安装那个。我把ZIP文件放到文件夹里并重新启动了服务,但什么也没有发生。 - m90
你在谈论插件吗?你使用的Teamcity版本是什么?在Teamcity管理>插件列表中,你是否看到了“Node.js构建运行器”? - PotOfTea

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接