【发布时间】:2020-07-10 17:34:12
【问题描述】:
我正在尝试在管道上的 DevOps 中找到一种方法,以便能够在安全的情况下关闭 Windows 服务。 例如。我们有一个持续运行的服务,但有时我们需要优雅地关闭它,我们通过 MSSQL 将表中的某些内容设置为 true,然后服务将优雅地关闭其连接,然后更新表以表示可以停止服务,手动这没问题,但我们想通过 DevOps 管道发布自动化流程
所以我的想法如下:
- 在表上发送 update set 命令以设置为 true 以便可以关闭
- 使用 where name = service name 监视表,直到它有该服务的行
- 从 PowerShell 或管道发送命令,表示可以关闭服务
1 和 3 看起来很简单,但是对于我来说,我似乎无法弄清楚如何不断检查表格直到它有一行
我发现我可以做到
SELECT CASE WHEN EXISTS(SELECT 1 FROM ShutdownLog WHERE Name = 'ServiceName') THEN 0 ELSE 1 END AS IsEmpty;
这基本上显示一次是空的,但是我如何循环这个查询直到它有数据?
我的计划是运行一个存储过程,它会执行选项 1,然后运行循环选项 2,如果满足则返回 True,然后在 DevOps 中我只需发送一个命令到存储过程以查看 if = true 我猜..
【问题讨论】:
-
我猜你可以在 powershell 中循环来轮询表格。
-
更好的方法是在您的服务中实现取消支持。如果操作系统出于某种原因决定停止您的服务,则不会触发您的自定义代码以正常关闭。 docs.microsoft.com/en-us/dotnet/standard/threading/…
标签: sql-server powershell loops devops azure-pipelines-release-pipeline