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