【问题标题】:Is it safe to run "Node.js Tool installer task" multiple times on Azure Devops hosted agent?在 Azure Devops 托管代理上多次运行“Node.js 工具安装程序任务”是否安全?
【发布时间】:2020-12-07 19:31:17
【问题描述】:
我们有一个用于 Azure Devops 托管代理的专用服务器。服务器运行我们拥有的所有管道。现在我们遇到了一个问题,一个项目需要 node.js 版本 8,而一个项目需要版本 10 或 12。
所以我们不能只更新服务器上的 node.js 安装。
Microsoft 提供了Node.js Tool installer task,但描述说它将把它添加到 PATH 环境变量中。我们还没有运行安装程序任务(不想破坏构建)。
有没有人尝试在一台服务器上安装多个版本的 node.js?可能吗?还是该任务仅用于托管(短期)构建代理?
【问题讨论】:
标签:
node.js
azure-devops
azure-pipelines
【解决方案1】:
这很好,troubleshoot section 中也提到了
如果您使用 nvm 管理不同版本的 Node.js,请考虑改用 Node Tool Installer 任务。 (由于历史原因,在 macOS 映像上安装了 nvm。)nvm 通过添加 shell 别名和更改 PATH 来管理多个 Node.js 版本,这与 Azure Pipelines 在新进程中运行每个任务的方式交互不佳。节点工具安装程序任务正确处理此模型。但是,如果您的工作需要使用 nvm,您可以在每个管道的开头添加以下脚本:
steps:
- bash: |
NODE_VERSION=12 # or whatever your preferred version is
npm config delete prefix # avoid a warning
. ${NVM_DIR}/nvm.sh
nvm use ${NODE_VERSION}
nvm alias default ${NODE_VERSION}
VERSION_PATH="$(nvm_version_path ${NODE_VERSION})"
echo "##vso[task.prependPath]$VERSION_PATH"
然后节点和其他命令行工具将用于管道作业的其余部分。在需要使用 nvm 命令的每个步骤中,您需要使用以下命令启动脚本:
- bash: |
. ${NVM_DIR}/nvm.sh
nvm <command>
总之,使用Node Tool Installer 很好,但如果您决定使用nvm,请记住上面的cmets。
【解决方案2】:
如何使用nvm
它是支持多个版本的 node.js 的好工具。用的比较多。
例如
nvm install v8
nvm install v10
nvm install v12
# first terminal
nvm use 8
npm install
node node_v8_server.js
# second terminal
nvm use 10
npm install
node node_v10_server.js
# third terminal
nvm use 12
npm install
node node_v12_server.js