【问题标题】:Running a Node.js server in Azure Release Pipeline在 Azure 发布管道中运行 Node.js 服务器
【发布时间】:2021-09-13 12:35:12
【问题描述】:

我有一个 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 结束运行,服务器就不再可用——节点进程消失了。

你能帮我弄清楚这是为什么吗?还有另一种方法可以实现这一目标吗?我想这是一个非常常见的用例,因此必须有关于如何完成此操作的最佳实践。

【问题讨论】:

  • 为什么要将此应用程序作为管道的一部分运行?
  • @KrzysztofMadej - 我认为将应用程序部署到暂存环境是一个非常常见的用例,这样您就可以在将其部署到生产环境之前对其进行测试。有关 Release Pipelines 的文档充满了这一点。
  • 是的,但管道基础设施不是您的暂存环境,据我了解,您尝试在构建代理上运行它。
  • 我尝试在部署组中配置的服务器上运行它
  • 好的。知道了。很抱歉造成误解。

标签: azure-devops azure-pipelines


【解决方案1】:

实现此目的的另一种方法是使用成熟的 Web 服务器来托管和管理节点进程。 IE。在 Windows 上,您可以使用 IIS with iisnode module。这更可靠,并为您带来了一些其他好处:

  • 进程管理(自动启动、故障重启等)
  • 安全性 - 您可以配置节点进程运行的用户
  • 多核 CPU 上的可扩展性

那么应用程序部署的过程将只是将文件复制到正确的目录 - Web 服务器应该会自动获取更改。

【讨论】:

    【解决方案2】:

    默认情况下,管道作业在退出时会清理它启动的所有子进程。这正在杀死您的节点服务器。

    Process.Clean 变量设置为false 以覆盖默认行为。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-13
      • 1970-01-01
      • 2019-06-12
      • 1970-01-01
      • 1970-01-01
      • 2020-01-08
      • 1970-01-01
      • 2017-10-20
      相关资源
      最近更新 更多