azure-devops - 在 Azure 发布管道中运行 Node.js 服务器
问题描述
我有一个 Node.js Web 服务器,作为 CD 流程的一部分,我想使用 Azure Release Pipeline 将其部署到登台服务器。问题是,如果我只运行一个 Powershell 脚本:
# Run-Server.ps1
node my-server.js
由于节点进程阻止了 Powershell 会话,因此管道将保持不变。我想要的是能够启动该服务,然后在下一次部署中只需终止节点进程并使用新代码再次运行它。
所以我想我会用Start-Process
. 如果我在本地运行它:
> Start-Process node -ArgumentList ./server.js
我现在可以退出 Powershell 会话,服务器将继续运行。所以我想我可以在我的发布管道中以同样的方式实现它。
但事实证明,一旦 Release Pipeline 结束运行,服务器就不再可用——节点进程消失了。
你能帮我弄清楚这是为什么吗?还有另一种方法可以实现这一目标吗?我想这是一个非常常见的用例,因此必须有关于如何完成此操作的最佳实践。
解决方案
实现此目的的另一种方法是使用成熟的 Web 服务器来托管和管理节点进程。即在 Windows 上,您可以将IIS 与 iisnode 模块一起使用。这更可靠,并为您提供了一些其他好处:
- 进程管理(自动启动、故障重启等)
- 安全性 - 您可以配置节点进程将运行的用户
- 多核 CPU 上的可扩展性
Then the process of app deployment would be just copying files to the right directory - the web server should pick up the change automatically.
推荐阅读
- python - python更新查询 - 没有这样的列
- join - 当我使用 aj 函数连接两个表时出现错误
- javascript - 我正在为我的项目进行分页。如何通过下拉选项中的用户选择获取每页的记录数?
- r - 右 | 根据其他数据框中的条件更新数据框中的列
- mongoose - 在 Mongoose 中连接文档,其中一个文档具有不同的模式
- .net - 表单提交剃须刀页面上的 400 错误(但仅在 2 分钟后)
- javascript - 两个脚本拒绝一起运行
- sml - 有没有办法在 if - else 语句中将两个动作作为 then 的结果?
- c - 不兼容的指针类型 Eclipse 函数
- c# - 这个符号在c#中是什么意思(^=)