Задержка развертываний Octopus в зависимости от состояния приложения

Я использую Octopus для развертывания некоторых сервисов Topshelf, созданных TeamCity. Развертывание Octopus запускает скрипт powershell, который устанавливает / переустанавливает службу из пакета nuget и запускает его.

Моя проблема заключается в том, что эти службы могут быть в центре критических действий, которые не должны прерываться новым развертыванием. Я хотел бы подождать, пока служба не будет завершена с этими вещами для развертывания моей новой версии. Я не смог найти хорошее решение для этого. Каков был бы типичный способ справиться с этой ситуацией? В настоящее время мои щупальца осьминога настроены на режим прослушивания.

2 ответа

Один из вариантов - сделать вашу первую задачу развертывания задачей вмешательства пользователя. Это будет означать, что новая версия создана и готова к запуску, развертывание запущено, но приостановлено. Как только вы авторизуете задачу вмешательства пользователя, развертывание будет продолжаться как обычно.

Если вы хотите, чтобы это было автоматизировано, вы можете написать скрипт Powershell, который опрашивает ваш сервис (или его очередь заданий и т. Д.) И сидит в цикле, пока сервис занят; это может быть ваш первый шаг развертывания. Как только ваш сервис простаивает, скрипт может выйти с кодом 0, и ваше развертывание будет продолжено.

При удалении / установке Topshelf через Octopus мы должны были учитывать связанные с этим упорные или заблокированные процессы. Для вашей ситуации, вы смотрели в "До" и "После" пользовательских действий установки? Кроме этого, мне нравится идея Джеймса опрашивать сам процесс любыми средствами. Наконец, возможно, менее удобный ответ может заключаться в написании подпрограммы Quiesce в приложении или базе данных.

Пользовательские действия по установке: https://topshelf.readthedocs.io/en/latest/configuration/config_api.html

Другие вопросы по тегам