Как развернуть выпуск DACPAC с известной (и принятой) потерей данных Потеря данных

#azure-devops #database-migration #azure-pipelines-release-pipeline #dacpac

#azure-devops #база данных-миграция #azure-pipelines-release-pipeline #dacpac

Вопрос:

Я управляю базой данных SQL Server с помощью выпусков DACPAC в Azure DevOps. В настоящее время мой проект находится в разработке, но я ожидаю продолжения разработки после запуска Prod.

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

Но, естественно, я ожидаю, что будут НЕКОТОРЫЕ случаи, когда миграция сознательно отбрасывает данные, и что это ожидаемо и нормально.


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

Моим идеалом было бы что-то, что по сути говорило бы: «Да, разверните этот выпуск… Да, я знаю, что это приведет к потере данных, это нормально. «

У меня есть одна идея, которую я опубликую в качестве ответа. Но я ищу другие идеи или любые «стандартные» или «официальные» подходы. (Или просто идеи получше: D )

Комментарии:

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

Ответ №1:

DevOps позволяет передавать параметры SqlPackage.exe , один из которых определяет, как DACPAC реагирует на потенциальную потерю данных:

/p:BlockOnPossibleDataLoss=false

Поскольку конвейеры выпусков DevOps сами по себе поддаются параметризации с помощью «Переменных» выпуска, и переменные можно редактировать в конкретном выпуске, не влияя на настройки по умолчанию.

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


Редактировать: работал нормально

Комментарии:

1. хм, это касается: github.com/microsoft/azure-pipelines-tasks/issues/11191

2. Мы развертываем dacpac с помощью /p:BlockOnPossibleDataLoss=false together with /p:IncludeTransactionalScripts=true для отката изменения при сбое

3. Хм, какие-либо обновления для этой проблемы? Похоже, вы сами получили решение, вы могли бы принять его как ответ . Это может быть полезно для других участников сообщества, читающих эту тему, и мы можем заархивировать эту тему для вас. Спасибо ~

4. Кстати, я думаю, что ваш ответ — хорошая идея 🙂 Рекомендуется определить настраиваемую переменную AllowDatalossOrNot со значением по умолчанию false , чтобы отключить потерю данных. Аргументы команды: /p:BlockOnPossibleDataLoss=$(AllowDatalossOrNot) .

5. Затем мы можем использовать параметр времени выполнения (для конвейеров yaml) или настраиваемые переменные (для классических конвейеров выпуска пользовательского интерфейса) для выполнения условного развертывания.