【问题标题】:TeamCity build runner not recognizing executableTeamCity 构建运行程序无法识别可执行文件
【发布时间】:2013-05-02 00:59:17
【问题描述】:

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

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

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

【问题讨论】:

    标签: command-line gruntjs


    【解决方案1】:

    这是一个奇怪且非常烦人的错误,但我终于找到了解决方法。在%AppData%\Roaming\npm 目录中,有两个文件:“grunt”和“grunt.cmd”。 “grunt”是一个 unix 文件,“grunt.cmd”应该使用节点运行 grunt-cli 应用程序,但它没有。我必须创建一个名为“grunt.bat”(优先于“grunt.cmd”)的新文件,其中包含

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

    现在可以了。不知道为什么。

    【讨论】:

      【解决方案2】:

      我无法让公认的解决方案发挥作用。我的问题是 TeamCity 服务(服务器和代理)在系统帐户下运行。 AFAIK,没有“为操作系统的所有用户全局安装 npm 包”的概念。所以我:

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

      从那里开始,NodeJS、NPM 和 Grunt 任务才刚刚开始工作。

      【讨论】:

      【解决方案3】:

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

      如果您不想在构建服务器上创建用户,您可以编写完整路径来执行 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,但我必须重新启动才能使环境变量对其他用户有效。
      【解决方案4】:

      我遇到了the same problem when trying to get grunt to work with TFS,它将由 tfsservice 用户运行。正如克里斯托弗的回答所暗示的那样,以不同的用户身份运行我们的构建不是我们的选择。在我将 C:\Users\tfsservice\AppData\Roaming\npm 添加到 tfsservice 用户的路径后,当我以 tfsservice 身份手动登录时,它能够找到 grunt-cli ,但不是在 TFS 构建代理执行构建时。起初我只是将构建过程更改为使用 grunt.cmd 文件的完整路径。

      所以我改变了使用这个:

      grunt deploy
      

      使用这个:

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

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

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

      我假设 Zeke Lu 的回答显示的修剪过的 node.js 安装程序描述会说其他用户需要更新他们的 Path 环境变量。

      【讨论】:

      • 我可以确认重启使这个问题从我身上消失了,现在一切正常,没有任何麻烦。
      【解决方案5】:

      确保 %AppData%\Roaming\npm 路径在您的 windows GLOBAL 路径变量上,重新启动团队代理服务并且可以正常工作

      【讨论】:

      • 我不知道为什么它被否决了,事实上我就是这样做的。影响最小的东西..谢谢
      • 我不相信 %AppData% 在全局环境变量中工作(在 Server 2019 1809 上测试)- 它需要在 user 环境路径变量中。
      • 我从用户路径变量中获取路径“C:\Users\\AppData\Roaming\npm”并将其添加到系统路径变量中。然后我不得不使用 Services windows 应用重新启动 TeamCity Build Agent 服务。
      【解决方案6】:

      您无需将 TeamCity 帐户从系统更改为本地 like Christoper wrote。更简单的方法:

      1.[构建代理机器]确保你的PATH中有node目录和本地npm包目录,例如:

       C:\Users\'yourUserName'\AppData\Roaming\npm;C:\Program Files\nodejs 
      1. [构建代理机器] 全局安装 grunt:npm install grunt-cli
      2. [构建步骤] 在您的项目目录中运行 cmd:npm install -g grunt-cli您只能执行一次此步骤(在本地计算机上)并将文件更改提交到 repo
      3. [构建步骤] 在项目目录中运行 cmd:npm install
      4. [构建步骤] 运行 grunt build 作为 powershell 脚本:powershell -Command "grunt build"

      由于某种原因,在系统帐户上运行的构建代理无法通过 cmd 访问C:\Users\'yourUserName'\AppData\Roaming\npm,但通过 powershell 可以。

      【讨论】:

        【解决方案7】:

        我知道这个问题有点老了。但是我现在在同样的问题上苦苦挣扎,找不到解决方案……但最终我做到了。给你。

        TeamCity 构建步骤应包括:

        1) 安装 grunt-cli 命令行 命令:npm install grunt-cli

        2) 运行 grunt build 任务 命令行 命令:node "node_modules/grunt-cli/bin/grunt" build

        这两种情况的工作目录都应该是您的 grountfile.js 所在的位置。

        【讨论】:

          【解决方案8】:

          您应该在安装 NPM 后重新启动 TeamCity 构建代理。

          【讨论】:

            猜你喜欢
            • 2018-08-29
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-09-06
            • 2019-07-30
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多