【问题标题】:Running NPM on a self-hosted VSO Agent在自托管 VSO 代理上运行 NPM
【发布时间】:2016-05-01 16:20:45
【问题描述】:

我已经使用 Azure VM 和 Azure 上的 Visual Studio Release 插件设置了 VSO 代理。我还安装了最新版本的 node.js(使用 NVM for windows)。我在安装 VSO 代理时使用了默认帐户,因为我用于远程桌面的凭据不起作用。

我可以远程进入机器并运行我试图从 VSO 运行的构建脚本。我也可以使用它运行纯粹的 .NET 构建,而且效果很好。我的问题在于使用 npm 安装我的包并运行构建。

我已经对构建提出了这样的要求:

npm | exists

我已经通过控制面板在 VSO 代理上设置了一项功能,如下所示:

npm | C:\Program Files\nodejs\npm.cmd

也试过

npm | C:\Program Files\nodejs

我可以在该文件夹中看到 npm.cmd,并且可以在远程使用该路径时运行 npm。我还根据这个问题重新启动了 VSO 代理服务:

TFS build agent cannot locate npm

重新启动服务器并多次“更新所有代理”。我的路径中也有 npm,登录后可以正常执行。

编辑:

错误信息:

npm : The term 'npm' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the 
spelling of the name, or if a path was included, verify that the path is correct and try again.
At C:\work-folder\1\s\azure-deploy.ps1:24 char:1
+ npm update
+ ~~~
+ CategoryInfo : ObjectNotFound: (npm:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException

我也尝试过添加如下所述的行:

$env:Path += ";C:\Program Files\nodejs\"

同样的错误。在该命令给出之后,我的 $env:Path 的 Write-Host 写入:

C:\Application Intallers\agent (1)\agent\worker\Modules\Microsoft.TeamFoundation.DistributedTask.Task.Internal\NativeBinaries\amd64;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\Microsoft\Web Platform Installer\;C:\Users\propertyplotdev\AppData\Roaming\nvm;C:\Program Files\nodejs;C:\Program Files\Git\cmd;C:\Program Files\Git\mingw64\bin;C:\Program Files\Git\usr\bin;C:\Program Files\Microsoft SQL Server\120\Tools\Binn\;C:\Program Files (x86)\Windows Kits\8.1\Windows Performance Toolkit\;C:\Program Files (x86)\Microsoft SDKs\Azure\CLI\wbin;C:\Program Files (x86)\Microsoft SDKs\Azure\AzCopy;C:\Program Files\nodejs;C:\Windows\ServiceProfiles\LocalService\.dnx\runtimes\dnx-clr-win-x86.1.0.0-rc1-update1\bin;C:\Windows\ServiceProfiles\LocalService\.dnx\bin;C:\Program Files\nodejs\

C:\Program Files\nodejs\npm.cmdC:\Program Files\nodejs\node.js 都存在并且 NETWORK SERVICE 对它们具有权限。 (以及管理员、SYSTEM 和我的登录名)

【问题讨论】:

  • 使用 npm 任务对构建进行排队时会收到什么错误消息?
  • @Eddie-MSFT 在我的问题中添加了错误消息
  • 我刚刚遇到了这个问题。事实证明,如果您重新启动代理服务,代理将自动选择节点和 npm 作为功能。无需手动添加。

标签: node.js azure npm azure-devops azure-pipelines


【解决方案1】:

解决方案是使用常规安装程序安装 node.js:

https://nodejs.org/en/download/

然后就可以了。还有其他问题,但这个问题的直接问题是通过不使用 nvm 安装节点来解决的。然后我可以在 VSO 构建定义界面中添加一个 npm 任务。

【讨论】:

  • 您需要重新启动代理服务(在 services.msc 下它将被称为 VSTS Agent),或者如果以交互方式运行代理,只需重新启动它。
【解决方案2】:

确保 npm 安装在“C:\Program Files\nodejs\”文件夹中,然后在您的 PowerShell 脚本中添加以下内容:

$env:Path += ";C:\Program Files\nodejs\"

【讨论】:

  • 谢谢你,但同样的错误。当我以创建服务器时生成的帐户登录时,我可以从该文件夹运行(远程访问服务器时)npm。当我安装 VSO 代理时,我无法使用这些凭据(不起作用并给我错误),因此选择了“默认服务帐户”。命令行安装程序默认使用的帐户。作为我远程访问的实际用户,一切正常。从 VSO 运行脚本时构建它没有.. 任何其他想法?再次感谢
  • @justsayno 所以构建代理正在使用网络服务帐户运行。似乎 nvm 并没有为所有用户全局安装 npm。检查 nodejs 是否安装在此路径中:“C:\Users\UserName\AppData\Roaming\nvm\NodeJSVersion”。如果是,请尝试使用此路径查看是否有效。
  • 没有运气...如何以网络服务帐户登录?或者更好的是让 VSO 代理使用由 Azure 创建的默认帐户,即脚本适用的帐户...抱歉,如果这些问题很愚蠢,我不是网络/系统管理员!仅供参考,我正在使用 nvm,因为我发现这是在 Windows 上轻松管理升级 nodejs 的唯一方法。我大概可以在此服务器上使用常规安装程序全局安装节点?
  • @justsayno 配置代理时,您可以选择为要在其下配置服务的帐户指定用户名和密码。网络服务只是默认设置。
  • @ChrisPatterson 我试过了,但是当我做任何事情但使用默认设置时它会给我错误
【解决方案3】:

尝试添加 run npm command 构建任务:

添加构建步骤 -> 添加任务 -> 包 -> npm(运行 npm 命令)

添加installcommandweb-project的根工作目录

否则,请尝试添加以下功能:

node.js | C:\Program Files\nodejs\node.exe

和:

   npm | C:\Program Files\nodejs\npm.cmd

【讨论】:

  • 任何一个选项都没有运气...您知道是否有某种方法可以访问服务用户的 PATH 变量吗?
  • 提示:如果您已将 VSOagent 服务安装为服务,请确保重新启动它,以便在构建中注册 PATH 更新。
  • @TetraDev 在安装 NodeJS 并重新启动服务后,我们的代理获得了新功能,谢谢!
猜你喜欢
  • 1970-01-01
  • 2016-01-14
  • 2018-03-21
  • 1970-01-01
  • 2018-10-29
  • 2020-05-16
  • 1970-01-01
  • 2022-08-15
  • 1970-01-01
相关资源
最近更新 更多