Что такое управление конфигурацией?

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

CI/CD-пайплайн объединяет несколько сред для тестирования ПО перед релизом. Чтобы тесты и пайплайн в целом работали эффективно, препродакшн-окружение должно максимально точно воспроизводить продакшн и оставаться неизменным между запусками тестов.

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

В результате появляются «серверы-снежинки». А самое плохое — если информация обо всех изменениях нигде не зарегистрирована. В этом случае воссоздать то же самое окружение, если сервер отказал или вам нужна его реплика для тестирования, гораздо сложнее. Управление конфигурацией помогает решить эту проблему.

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

Если информация о конфигурации хранится в структурированном виде, например в файле YAML или XML, можно двигаться дальше и автоматизировать конфигурирование серверов.

При сохранении изменений в системе контроля версий они автоматически применяются ко всем соответствующим машинам.

Подход «инфраструктура как код» позволяет автоматически сбрасывать и создавать заново виртуальные машины. Таким образом, вы можете настроить обновление окружений в CI/CD-пайплайне между развертываниями. При этом можно использовать много машин и легко создавать дополнительные реплики окружений для тестирования.

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