Можете ли вы остановить один конвейер Spinnaker на основе другого запущенного конвейера? - PullRequest
0 голосов
/ 12 февраля 2019

У меня есть два конвейера как часть моего развертывания.

  • Развертывание : Этот конвейер запекает манифест Kubernetes и развертывает / тестирует контейнер, включая анализ канареек.Он запускается при публикации новой версии контейнера.
  • Очистить : этот конвейер очищает все оставшиеся канареечные ошибки развертывания и сбрасывает все сетевые / неконтейнерные компоненты по умолчанию.Он запускается при успехе ИЛИ сбое конвейера развертывания.В конце концов, верните вещи в нормальное состояние, если они иначе остались в несовместимом состоянии.

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

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

Как обеспечить, чтобы Deploy запускалась только в том случае, если очистка не выполняется и если никакое другое развертывание не запущено?


ОБНОВЛЕНИЕ : Однако я понимаю, что все это может быть частью одного конвейера, чтобы выяснить, почему это отдельные конвейеры,Я добавлю контекст.

Конвейер развертывания имеет около 20 шагов, некоторые из которых выполняются параллельно.Это было бы упрощенно:

Bake and Deploy
Manifest as Canary
         |
  +------+------+
  |      |      |
Tests  Tests  Tests
  |      |      |
  +------+------+
         |
Enable Some Prod Traffic
         |
  +------+------+
  |      |      |
Tests  Tests  Tests
  |      |      |
  +------+------+
         |
Enable More Prod Traffic
         |
Automated Canary Analysis
         |
Enable More Prod Traffic
         |
Automated Canary Analysis
         |
Finish Rolling New Version
Into Production

Очистка состоит из пяти шагов, но сводится к:

Ensure No Network Traffic Remains
Pointed at Canary Instances (Reset
Networking)
    |
Delete Any Remaining Canary Instances

В конвейере развертывания, если какой-либо изпервоначальные наборы параллельных тестов не пройдены, мне нужно запустить очистку - перезагрузить сеть и уничтожить канарейку.Если какой-либо из запусков Automated Canary Analysis завершится неудачно, мне нужно запустить очистку.В конце успешного развертывания ... Мне нужно запустить очистку, чтобы убедиться, что там нет никаких канарейок.

Рабочий процесс, насколько я могу судить, на самом деле не процедурный.Я не могу "GOTO" очистить.Я также действительно, действительно не хочу копировать / вставлять набор из пяти шагов в каждое место, где это может быть успешным или неудачным.Я также хочу убедиться, что если что-то не получится - возможно, шаг, который разрешает трафик prod или что-то еще - что очистка будет запущена.У меня не всегда есть простой способ просто «подключиться», который я могу найти.

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

Мое идеальное решение было бы в псевдокоде:

try {
  // do the deploy steps
}
finally {
  // whether success or fail
  // run the clean up steps
}

ОднакоУчитывая ограничение, которое я вижу в связи с невозможностью попробовать / наконец в конвейере, я запускаю конвейер очистки всякий раз, когда развертывание завершается (успех или неудача).Тем не менее, я не вижу ничего, что могло бы «заблокировать» запуск Deploy во время работы Clean Up, поэтому, если есть набор резервных копий изменений, которые все ожидают развертывания, утилита очистки может вычистить вещи из-под меня..

1 Ответ

0 голосов
/ 25 февраля 2019

Я не думаю, что у Spinnaker есть такая особенность, но одну вещь, которую вы могли бы сделать, это сделать так, чтобы ваши Deploy и Clean Up ступени все части одного и того же конвейера работали параллельно и не допускали одновременных запусков.См. Пример на снимке экрана ниже.

Таким образом, если этапы Deploy или Clean Up уже запущены, конвейер не должен запускаться.Если ваша канарейка терпит неудачу, очистка должна продолжаться.Если ваша канарейка пройдет, очистка все равно будет продолжена, и произойдет развертывание.

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...