Отсрочка развертывания Octopus в зависимости от состояния приложения

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

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


person JHawk    schedule 20.01.2016    source источник


Ответы (2)


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

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

person James    schedule 21.01.2016
comment
Я рассматривал возможность добавления шага ручного вмешательства, но чувствую, что это сведет на нет некоторые цели CI/CD, и с ним будет сложно справиться при масштабировании. Я решил выбрать второй вариант: скрипт powershell опрашивает мои сервисы, пока они не придут в приемлемое состояние, прежде чем продолжить развертывание. Возможно, это не лучший способ сделать это, но я добился этого, заставив каждую службу записывать в файл service.status, который проверяется powershell. - person JHawk; 21.01.2016

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

Действия по выборочной установке: https://topshelf.readthedocs.io/en/latest/configuration/config_api.html#service-start-modes

person user5015546    schedule 07.07.2016