2016-01-20 88 views
0

我正在使用Octopus部署由TeamCity构建的一些Topshelf服务。 Octopus部署运行一个PowerShell脚本,用于从nuget包安装/重新安装服务并启动它。延迟基于应用程序状态的Octopus部署

我的问题是这些服务可能处于不应该被新部署中断的关键活动中。我希望等到服务完成后才能部署我的新版本。我一直无法找到一个很好的解决方案。处理这种情况的典型方法是什么?目前,我的章鱼触手设置为“聆听”模式。

回答

0

一种选择是将您的第一个部署任务作为用户干预任务。这意味着新版本已经构建并准备就绪,部署正在运行,但已暂停。一旦授权用户干预任务,部署将按正常进行。

如果你想让它自动化,那么你可以编写一个Powershell脚本来轮询你的服务(或者它的工作队列等),并且在服务忙的时候坐在一个循环中;这可能是您的第一个部署步骤。一旦您的服务空闲,脚本可以退出代码0,您的部署将继续。

+0

我也考虑增加人工干预的一步,但我觉得这会破坏一些CI/CD的目的,可能很难处理,因为我扩展。我决定继续第二个选项,让PowerShell脚本轮询我的服务,直到它们处于可接受状态,然后再继续部署。这可能不是一个很好的方法,但是我已经通过让每个服务写入由powershell检查的“service.status”文件来实现此目的。 – JHawk

0

在Topshelf通过Octopus卸载/安装期间,我们不得不对固执或锁定的进程进行相关考虑。针对您的情况,您是否查看了“之前”和“之后”自定义安装操作?除此之外,我喜欢詹姆斯以任何方式轮询过程本身的概念。最后,一个不太方便的答案可能是在应用程序或数据库中编写一个Quiesce例程。

自定义安装操作: https://topshelf.readthedocs.io/en/latest/configuration/config_api.html#service-start-modes