Есть много вопросов по этому вопросу. Вот один - SSDT не удалось опубликовать sh: «Невозможно подключиться к главному или целевому серверу» . Я получаю ту же ошибку:
2020-03-03T13:51:28.5079081Z *** Could not deploy package.
2020-03-03T13:51:28.5080013Z Unable to connect to master or target server 'databasename'. You must have a user with the same password in master or target server 'databasename'.
2020-03-03T13:51:28.6466638Z ##[error]Publishing to database 'databasename' on server 'server'.
Initializing deployment (Start)
Initializing deployment (Failed)
Я развертываю через Azure DevOps. Он отлично работает, когда я развертываюсь в двух наших нижних средах (которые работают на одном сервере разработки), но сегодня утром это было наше первое производственное развертывание. SQL Сервер 2016 работает на обоих серверах. Есть разница в версиях, хотя. Сервер разработки работает Microsoft SQL Server 2016 (RTM) - 13.0.1601.5 (X64)
, а производство работает Microsoft SQL Server 2016 (RTM-CU5) (KB4013105) - 13.0.2197.0 (X64)
. Для обоих уровней совместимости установлено значение 130.
YAML для этапа выпуска в разработке выглядит следующим образом:
steps:
- task: SqlDacpacDeploymentOnMachineGroup@0
displayName: 'Deploy using : dacpac'
inputs:
DacpacFile: '$(System.DefaultWorkingDirectory)/database/Database.dacpac'
TargetMethod: publishProfile
PublishProfile: '$(System.DefaultWorkingDirectory)/Database/develop.publish.xml'
Единственное различие между этапом разработки и этапом производства заключается в том, что публикация sh профиль отличается. И единственные различия между этими двумя файлами * publi sh profile XML - это имя сервера и имя базы данных.
Вот профиль разработки:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<IncludeCompositeObjects>True</IncludeCompositeObjects>
<TargetDatabaseName>develop</TargetDatabaseName>
<DeployScriptFileName>develop.sql</DeployScriptFileName>
<ProfileVersionNumber>1</ProfileVersionNumber>
<TargetConnectionString>validconnectionstring</TargetConnectionString>
<BlockOnPossibleDataLoss>False</BlockOnPossibleDataLoss>
<GenerateSmartDefaults>True</GenerateSmartDefaults>
</PropertyGroup>
<ItemGroup>
<SqlCmdVariable Include="dbEnvironment">
<Value>develop</Value>
</SqlCmdVariable>
<SqlCmdVariable Include="migratedLegacyDatabase">
<Value>Migration-Develop</Value>
</SqlCmdVariable>
<SqlCmdVariable Include="migrationSource">
<Value>false</Value>
</SqlCmdVariable>
</ItemGroup>
</Project>
Тот же профиль был использован, когда мы использовали Jenkins, но процесс был немного другим. Когда я использую учетные данные в производственном профиле, я могу успешно подключиться к базе данных.
Чувствую, что я упускаю что-то очевидное, но я не уверен, что это такое. Я знаю, что это не легко воспроизводимая проблема, но если у кого-то есть какие-то идеи, я весь слух.