Как включить сквозные тесты для разных микросервисов в несколько конвейеров непрерывной доставки?

Моя команда разрабатывает три микросервиса. Три работают вместе, чтобы обеспечить бизнес-сценарий. Они общаются с REST и RabbitMQ. Похоже на презентацию Тоби Клемсона о микросервисном тестировании.

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

Как включить в конвейеры доставки сквозной тест для бизнес-сценария, т. Е. Для всех микросервисов?

Моя команда предложила это:

Мы добавили одну общую сквозную стадию, которая развертывает все три микросервиса и запускает на них сквозное тестирование. Каждый раз, когда один из конвейеров достигает этой стадии, он развертывается и тестируется. Семафор гарантирует, что трубопроводы проходят стадию один за другим. Отказ останавливает все три трубопровода.

Общий сквозной этап

Мне кажется, это жертвует всей независимостью, которую в первую очередь выигрывает архитектура микросервиса:

  • Сквозная стадия является узким местом. Быстрый конвейер может помешать медленным конвейерам, потому что он чаще резервирует сквозную стадию, заставляя остальных ждать, прежде чем они смогут запустить свои тесты.

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

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

  • Сквозная стадия показывает только узкий результат, потому что это подтверждает только то, что одна точная комбинация версий микросервиса работает вместе. Если продукция содержит разные версии, это не гарантирует, что это будет работать.

  • Этап также находится в противоречии с решением об окончательном выпуске вручную: что если сборка прошла сквозную, но мы решили не выпускать ее в производство? В этом случае производство будет содержать другую версию этого микросервиса, чем сквозную, что приведет к искаженным результатам.

Так какой же лучший способ сделать это?

1 ответ

Решение

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

Более длинное объяснение:

Архитектурный стиль Microservices был придуман для того, чтобы помочь крупным организациям управлять большими приложениями и избежать накладных расходов на связь и зависимости между командами. Так что если вы хотите следовать этому стилю, у вас должно быть 3 независимых команды - по одной на каждую услугу. Каждая из этих команд будет нести полную ответственность за весь жизненный цикл соответствующей службы. Теперь, когда вы хотите провести сквозное тестирование (часто называемое интеграционным тестированием), вы должны создать четвертую группу, которая будет отвечать за эти тесты. И у вас будет один человек, который будет ответственным менеджером релизов, который владеет промежуточным / тестовым кластером и решает, когда тестирование окажется достаточным для выпуска новой версии сервиса в жизнь. Ваша цель должна состоять в том, чтобы максимально разделить группы с точки зрения зависимостей и циклов выпуска их услуг. Если вам нужна полная независимость сервисных команд, вы также можете сделать интеграционное тестирование частью каждой команды. Это означает, что у вас есть кластер тестирования / подготовки для каждой команды и ответственная роль менеджера тестирования / выпуска в каждой команде.

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