Devops 关闭服务
Devops Shutdown services
我正在尝试在管道上的 DevOps 中找到一种方法,以便能够在安全的情况下关闭 Windows 服务。
例如。我们有一项服务 运行 不断,但有时我们需要优雅地关闭它,我们通过 MSSQL 通过将 table 中的某些内容设置为 true 来做到这一点,然后该服务将优雅地关闭其连接,然后将更新 table 表示可以停止服务,手动这没问题,但我们希望通过 DevOps 管道发布
自动化该过程
所以我的想法是:
- 在 table 上发送更新设置命令以设置为真以便可以关闭
- 监控 table 直到它有使用 where name = service name
的服务行
- 从 PowerShell 或管道发送命令以表示可以关闭服务
1 和 3 看起来很简单,但是对于我来说,我似乎无法弄清楚如何不断检查 table 直到它有一行
我发现我可以做到
SELECT CASE WHEN EXISTS(SELECT 1 FROM ShutdownLog WHERE Name = 'ServiceName') THEN 0 ELSE 1 END AS IsEmpty;
这基本上显示一次是空的,但是我如何循环这个查询直到它有数据?
我的计划是 运行 执行选项 1 的存储过程,然后 运行 循环选项 2 然后 return 如果满足则为真,然后在 DevOps 中我将发送一个命令存储过程以查看 if = true
我猜..
您可以使用 powershell Invoke-Sqlcmd
(documentation)
使用以下查询:
UPDATE Table
SET Column = 'True'
Where Name = 'StopService'
等待查询:
-- Loop until there is a row with value = 'ServiceName'
DECLARE @ServiceName VARCHAR(100) = 'YourServiceName'
DECLARE @Index INT = 0
DECLARE @MaxTries INT = 10
WHILE NOT EXISTS (SELECT 1 FROM ShutdownLog WHERE Name = @ServiceName)
BEGIN
IF @Index > @MaxTries
BEGIN
SELECT 'Max retries exceeded' as Message
BREAK;
END
-- sleep for 10 Seconds
WAITFOR DELAY '00:00:10'
SET @Index = @Index + 1
END
SELECT CONCAT(@ServiceName, ' was stopped') as Message
您可以尝试 Azure Functions,Azure Functions 是一种事件驱动的按需计算体验,它扩展了现有的 Azure 应用程序平台,具有实现由 Azure 或第三方服务中发生的事件触发的代码的功能以及本地系统。 Azure Functions 允许开发人员通过连接到数据源或消息传递解决方案来采取行动,从而使处理和响应事件变得容易。
我们可以使用 Azure 函数绑定存储队列消息轻松做到这一点。
我正在尝试在管道上的 DevOps 中找到一种方法,以便能够在安全的情况下关闭 Windows 服务。 例如。我们有一项服务 运行 不断,但有时我们需要优雅地关闭它,我们通过 MSSQL 通过将 table 中的某些内容设置为 true 来做到这一点,然后该服务将优雅地关闭其连接,然后将更新 table 表示可以停止服务,手动这没问题,但我们希望通过 DevOps 管道发布
自动化该过程所以我的想法是:
- 在 table 上发送更新设置命令以设置为真以便可以关闭
- 监控 table 直到它有使用 where name = service name 的服务行
- 从 PowerShell 或管道发送命令以表示可以关闭服务
1 和 3 看起来很简单,但是对于我来说,我似乎无法弄清楚如何不断检查 table 直到它有一行
我发现我可以做到
SELECT CASE WHEN EXISTS(SELECT 1 FROM ShutdownLog WHERE Name = 'ServiceName') THEN 0 ELSE 1 END AS IsEmpty;
这基本上显示一次是空的,但是我如何循环这个查询直到它有数据?
我的计划是 运行 执行选项 1 的存储过程,然后 运行 循环选项 2 然后 return 如果满足则为真,然后在 DevOps 中我将发送一个命令存储过程以查看 if = true
我猜..
您可以使用 powershell Invoke-Sqlcmd
(documentation)
使用以下查询:
UPDATE Table
SET Column = 'True'
Where Name = 'StopService'
等待查询:
-- Loop until there is a row with value = 'ServiceName'
DECLARE @ServiceName VARCHAR(100) = 'YourServiceName'
DECLARE @Index INT = 0
DECLARE @MaxTries INT = 10
WHILE NOT EXISTS (SELECT 1 FROM ShutdownLog WHERE Name = @ServiceName)
BEGIN
IF @Index > @MaxTries
BEGIN
SELECT 'Max retries exceeded' as Message
BREAK;
END
-- sleep for 10 Seconds
WAITFOR DELAY '00:00:10'
SET @Index = @Index + 1
END
SELECT CONCAT(@ServiceName, ' was stopped') as Message
您可以尝试 Azure Functions,Azure Functions 是一种事件驱动的按需计算体验,它扩展了现有的 Azure 应用程序平台,具有实现由 Azure 或第三方服务中发生的事件触发的代码的功能以及本地系统。 Azure Functions 允许开发人员通过连接到数据源或消息传递解决方案来采取行动,从而使处理和响应事件变得容易。
我们可以使用 Azure 函数绑定存储队列消息轻松做到这一点。