我正在使用Octopus来部署由TeamCity构建的一些Topshelf服务。 Octopus部署运行一个powershell脚本,用于从nuget包安装/重新安装该服务并启动它。
我的问题是这些服务可能处于不应被新部署中断的关键活动中。我想等到服务完成后才能部署我的新版本。我没能找到一个很好的解决方案。处理这种情况的典型方法是什么?目前我的章鱼触手设置为“聆听”模式。
答案 0 :(得分:0)
一种选择是使您的第一个部署任务成为用户干预任务。这意味着新版本已构建并准备就绪,部署正在运行,但已暂停。授权用户干预任务后,部署将正常进行。
如果您希望自动化,那么您可以编写一个Powershell脚本来轮询您的服务(或其作业队列等),并在服务繁忙时处于循环中;这可能是您的第一个部署步骤。一旦您的服务空闲,脚本可以退出代码0,您的部署将继续。
答案 1 :(得分:0)
我们不得不通过Octopus在Topshelf卸载/安装过程中对顽固或锁定的进程进行相关考虑。对于您的情况,您是否查看了“之前”和“之后”自定义安装操作?除此之外,我喜欢詹姆斯关于通过任何方式轮询这个过程的概念。最后,一个可能不太方便的答案可能是在应用程序或数据库中编写Quiesce例程。
自定义安装操作: https://topshelf.readthedocs.io/en/latest/configuration/config_api.html#service-start-modes