Я использую Azure Devops для развертывания моего проекта SSDT. Я пытаюсь обновить свое хранилище данных SQL Azure, где у меня есть DATABASE SCOPED CREDENTIAL
и EXTERNAL DATA SOURCE
.
Я нашел эту статью и выполнил эти шаги. https://techcommunity.microsoft.com/t5/azure-synapse-analytics/how-to-securely-manage-load-credentials-with-ssdt-azure-key/bc-p/1397979 < / а>
В моем конвейере выпуска у меня есть этот параметр для развертывания моего проекта SSDT. Как видите, я использую значения из своего хранилища ключей Azure.
- task: AzureKeyVault@1
inputs:
azureSubscription: '<My Azure Subscription>'
KeyVaultName: '<My Key Vault>'
SecretsFilter: '*'
...
- task: SqlAzureDataWarehouseDacpacDeployment@1
inputs:
azureSubscription: '<My Azure Subscription>'
AuthenticationType: 'server'
ServerName: 'ABC.database.windows.net'
DataWarehouse: '$(SynapseName)'
SqlUsername: '$(SynapseSQLUsername)'
SqlPassword: '$(SynapseSQLPassword)'
deployType: 'DacpacTask'
DeploymentAction: 'Publish'
DacpacFile: 'SQL_ASynapse\bin\Release\SQL_ASynapse.dacpac'
AdditionalArguments: '/p:IgnoreAnsiNulls=True /p:IgnoreComments=True /v:DatabaseScopeCredentialSecret=$(DatabaseScopeCredentialSecret) /v:DatabaseScopeCredentialIdentity=$(DatabaseScopeCredentialIdentity) /v:ExternalDataSourceMarineTrafficLocation=$(ExternalDataSourceMarineTrafficLocation)'
IpDetectionMethod: 'AutoDetect'
Я передаю три значения для трех моих переменных в двух сценариях удара.
$(DatabaseScopeCredentialSecret)
$(DatabaseScopeCredentialIdentity)
$(ExternalDataSourceMarineTrafficLocation)
У меня есть код ниже в двух отдельных файлах SQL.
ADLSCredential.sql:
CREATE MASTER KEY;
GO
CREATE DATABASE SCOPED CREDENTIAL ADLSCredential
WITH
IDENTITY = '$(DatabaseScopeCredentialIdentity)',
SECRET = '$(DatabaseScopeCredentialSecret)'
;
AzureDataLakeStoreMarineTraffic.sql:
CREATE EXTERNAL DATA SOURCE AzureDataLakeStoreMarineTraffic
WITH (
TYPE = HADOOP,
LOCATION='$(ExternalDataSourceMarineTrafficLocation)',
CREDENTIAL = ADLSCredential
);
Когда у меня нет этих объектов в моем DW (Synapse), мой конвейер может находить значения из Azure Key Vault, назначать их параметрам и создавать оба объекта, но в следующий раз у меня будет ошибка ниже.
##[error]*** Could not deploy package.
##[error]Warning SQL72013: The following SqlCmd variables are not defined in the target scripts: DatabaseScopeCredentialSecret DatabaseScopeCredentialIdentity ExternalDataSourceMarineTrafficLocation.
Error SQL72014: .Net SqlClient
Кажется, что мне не нужно запускать эти сценарии, передавая значения моим параметрам, у SQLCMD есть проблемы с поиском этих переменных, потому что он их не создавал.
Есть ли способ где-то иметь общедоступную переменную или сказать SQLCMD не передавать значения в течение секундного времени?