Выравнивание внешнего и внутреннего CI и CD - PullRequest
0 голосов
/ 01 апреля 2020

У нас есть два git репозитория:

  • внешний интерфейс (в основном, TypeScript)
  • внутренний интерфейс (предоставляет HTTP API)

Пример:

  1. Разработчик отправляет код в веб-репозиторий. Frontend теперь имеет версию 0.5
  2. CI тестирует изменения в бэкэнде версии 1.1.
  3. Все хорошо, все тесты пройдены.
  4. Код веб-интерфейса развертывается в производственной системе
  5. Произошел серьезный сбой, так как производственный бэкэнд все еще находится в версии 1.0

Как этого избежать?

Обновление

В пакете "Мир" вы можете определить зависимости. Например, с помощью rpm / dpkg / pip / npm. В приведенном выше сценарии frontend / backend вам также необходимо определить зависимость:

Frontend v0.5 требуется backend v1.1.

1 Ответ

1 голос
/ 11 апреля 2020

Если вы хотите получить полный CI / CD, тогда контрактное тестирование и / или функциональное тестирование абсолютно необходимо.

Если система следует более строгому проекту по контракту , ясно, что это контракт между частями, взаимное соглашение о том, как подсистемы взаимодействуют, например, каковы Ответы API от бэкэнда, которые требует ваш внешний интерфейс.

Если одному потребителю требуется, например, новая схема для одного указанного c API или если один производитель обновляет схему одного указанного c API , как вы описываете, вещи будут sh. Вот почему контракты должны проверяться каждый раз, когда обновляется любая из подсистем.

Как это сделать?

  1. Сначала вам нужно подумать о своем рабочем процессе разработки .

    • Некоторые люди применяют потребительские контракты . Это просто заявляет о философской позиции, которая выступает за то, чтобы потребители API были в центре процесса проектирования.
    • Некоторые другие предпочитают запускать бэкэнд-диск.
    • В некоторых случаях это непредсказуемо, и потребителям или поставщикам может потребоваться изменить ситуацию в разные моменты, или в некоторых микросервисах, например, sh, потребители являются производителями, а производители - потребителями.
  2. Вам необходимо иметь любой инструмент для любого из API-тестирования, функционального тестирования, контрактного тестирования . Очень нормальные, которые дали мне много душевного спокойствия, это REST-Assured и Runscope (который теперь принадлежит Blazemeter , так что вы можете использовать мониторинг API, функциональное тестирование и многие другие функции). Кроме того, я не использовал их, но вы можете посмотреть pact.io и pactflow.io , и некоторые люди, похоже, добились хороших результатов, выполняя потребительский контракт тестирование с почтальоном и вообще непрерывное API тестирование с почтальоном с помощью newman

  3. И, наконец, реализовать тестирование в вашем CICD . В зависимости от вашего рабочего процесса и доступных инструментов, вам нужно будет

    • решить, где хранить контракты, это может быть как схема в одном из репозиториев (т. Е. Интерфейс, бэкэнд) или в отдельном репо только для схем API или описания теста, или в самом инструменте.
    • решить, как запустить тесты. Для этого, поскольку вы уже запускаете тесты (я полагаю, по крайней мере, модуль / интеграцию) в своих конвейерах CI / CD, вам просто нужно добавить необходимые шаги для проверки всех контрактов при развертывании любой подсистемы. Таким образом, go не будет запущено, если какая-либо из других подсистем не находится в требуемой версии, создавая ожидаемые схемы.
    • обновляйте свои схемы ПЕРВЫМ, когда одна из подсистем использует новые требования. Т.е. в вашем случае веб-интерфейсу требуется бэкэнд-версия 1.1, поэтому, когда вы пишете изменения в веб-интерфейсе, вы уже знаете, что это за изменения, поэтому вы можете обновить схемы, использованные в тестировании. При развертывании в любой среде развертывание будет успешным только в средах, в которых проходит тестовый контракт. Т.е. он может работать в средах с песочницей / dev / QA, если бэкэнд 1.1 уже существует, но если в работе его нет, CICD остановится, так как тест по контракту не пройдет.
...