SSDT 项目的 Azure DevOps 管道在不需要创建对象时找不到变量
Azure DevOps pipeline for SSDT project can not find the variables when it does not need to create object
我正在使用 Azure Devops 部署我的 SSDT 项目。我正在尝试更新我的 Azure SQL 数据仓库,其中我有 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 Key Vault 中的值。
- 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'
我正在为我的两个 blow 脚本中的三个变量传递三个值。
$(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 无法找到那些变量,因为它没有创建它们。
有没有办法在某处设置 public 变量或告诉 SQLCMD 不要第二次传递值?
我发现了我遇到的问题。
我忘了在 SSDT 项目中创建变量。创建它们后,一切正常。
我正在使用 Azure Devops 部署我的 SSDT 项目。我正在尝试更新我的 Azure SQL 数据仓库,其中我有 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 Key Vault 中的值。
- 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'
我正在为我的两个 blow 脚本中的三个变量传递三个值。
$(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 无法找到那些变量,因为它没有创建它们。
有没有办法在某处设置 public 变量或告诉 SQLCMD 不要第二次传递值?
我发现了我遇到的问题。
我忘了在 SSDT 项目中创建变量。创建它们后,一切正常。