Node.js 在自托管VSO代理上运行NPM

Node.js 在自托管VSO代理上运行NPM,node.js,azure,npm,azure-devops,azure-pipelines,Node.js,Azure,Npm,Azure Devops,Azure Pipelines,我已经使用Azure VM和Azure上的Visual Studio发布插件设置了VSO代理。我还安装了node.js的最新版本(使用NVM for windows)。我在安装VSO代理时使用了默认帐户,因为我用于远程桌面的凭据无法工作 我可以远程进入机器并运行我试图从VSO运行的构建脚本。我也可以用它运行纯粹的.NET构建,而且很好。我的问题在于使用npm安装我的软件包并运行构建 我对构建提出了如下要求: npm|存在 我已从控制面板在VSO代理上设置了如下功能: npm|C:\Program

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

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

我对构建提出了如下要求:

npm|存在

我已从控制面板在VSO代理上设置了如下功能:

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

也尝试过

npm|C:\Program Files\nodejs

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

重新启动服务器,并多次执行“更新所有代理”。我的路径中也有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的
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.cmd
C:\Program Files\nodejs\nodejs
都存在,网络服务对它们拥有权限。(以及管理员、系统和我的登录名)

尝试从以下位置添加运行npm命令构建任务:

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

并将安装添加为命令,将web项目的根目录添加为工作目录

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

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


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

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

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

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


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

这两个选项都没有成功。。。您知道是否有办法访问服务用户的PATH变量吗?提示:如果您已将VSOagent服务作为服务安装,请确保重新启动该服务,以便在生成中注册路径更新。@TetraDev在安装NodeJS并重新启动该服务后,我们的代理获得了新功能,谢谢!当使用npm任务对构建进行排队时,您会收到什么错误消息?@Eddie MSFT将错误消息添加到我的问题中我刚刚遇到了这个问题。事实证明,如果您重新启动代理服务,代理将自动选择节点和npm作为功能。不需要手动添加它们。谢谢您的帮助,但同样的错误。当我以创建服务器时生成的帐户登录时,我可以从该文件夹运行(远程访问服务器时)npm。当我安装VSO代理时,我无法使用这些凭据(无法工作并给我错误),因此选择了“默认服务帐户”。默认情况下,命令行安装程序使用的帐户。作为实际用户,我远程登录,一切正常。从VSO build运行脚本时,它不会。。还有其他想法吗?谢谢again@justsayno因此,生成代理正在使用网络服务帐户运行。似乎nvm并没有为所有用户全局安装npm。检查nodejs是否安装在以下路径:“C:\Users\UserName\AppData\Roaming\nvm\NodeJSVersion”。如果是,尝试使用此路径查看是否有效。运气不好。。。如何以网络服务帐户登录?或者更好的做法是让VSO代理使用由Azure i创建的默认帐户,即该脚本所适用的帐户。。。抱歉,如果这些都是愚蠢的问题,我不是一个网络/系统管理员!仅供参考,我正在使用nvm,因为我发现这是在Windows上轻松管理升级节点的唯一方法。我可能会使用常规安装程序在此服务器上全局安装node?@justsayno配置代理时,您可以选择为要配置服务的帐户指定用户名和密码。网络服务只是默认设置。@ChrisPatterson我尝试过,但如果我不使用默认设置,就会出现错误。您需要重新启动代理服务(在services.msc下称为
VSTS agent
),或者如果以交互方式运行代理,只需重新启动它。
$env:Path += ";C:\Program Files\nodejs\"