CI / CD Azure DevOps и отделение строк подключения от контроля версий

Таким образом, я следовал за многими различными идеями / стратегиями во многих блогах /SO сообщениях, но я не смог найти решение моей идеи.

Что я использую

  • Visual Studio 2017 v15.9.6
  • Git (контроль версий)
  • CI/CD Azure DevOps
  • Служба приложений Azure (для размещения веб-API)

Цель

Цель состоит в том, чтобы использовать инструменты DevOps Azure для фиксации изменений в моем проекте, передать (через Git) изменения в репозиторий DevOps Azure, заставить CI/CD собрать проектируемый проект в соответствии с правилами конвейера для развертывания в dev/production/etc. Все это время держите строки подключения вне контроля исходного кода.

В настоящее время у меня есть веб-сайт (устаревшее веб-приложение), в котором есть определения строк локального подключения в файле строки внешнего подключения (на основе этой статьи Строки подключения и файлы конфигурации). Он размещается как служба приложений в Azure. В моем .gitignore Файл, который я сделал, Git игнорирует файл конкретной строки подключения, так что он не находится под контролем исходного кода. Используя развертывание Azure из GitHub, сайт обновляется с использованием исходного кода в GitHub. Однако мне пришлось вручную загрузить файл строки подключения с ложными / неверными данными. Я использую настройки приложения Azure для определения самих строк подключения. Этот процесс работает отлично.

Эта проблема

У меня новый проект.Net Web API, запущенный в.Net Framework 4.7.2. Я также следовал статье, чтобы разделить строки подключения на отдельные файлы, чтобы я мог также игнорировать файл в системе контроля версий. Когда Azure DevOps создает проект, он терпит неудачу, говоря:

C: \ Program Files (x86) \ Microsoft Visual Studio \ 2017 \ Enterprise \ MSBuild \ Microsoft \ VisualStudio \ v15.0 \ Web \ Microsoft.Web.Publishing.targets (2603,5): Ошибка: копирование файла ConnectionStrings.config в Ошибка obj\Release\Package\PackageTmp\ConnectionStrings.config. Не удалось найти файл ConnectionStrings.config.

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

Вопрос

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

3 ответа

Решение

Краткий ответ: не помещайте секреты в конфигурационные файлы.

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

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

Задача VSRM для публикации веб-приложений поддерживает переопределение значений в Web.config. Вы можете хранить свои секреты в VSRM и заменять их во время развертывания. См. Преобразования файлов и подстановка переменных # Подстановка переменных XML

Если вам действительно нужно поместить ваш фактический файл connectionstring в свой проект для отладки и, следовательно, добавить свой путь для connectionString в .gitignore, вы можете позволить Pipeline создать фиктивную строку подключения перед задачей VSBuild. Это можно сделать с помощью File Creator , доступного в Visual Studio Marketplace . После этого вы просто вставляете фактическую строку подключения в конфигурацию для службы приложений в Azure.

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