在运行 Azure Pipeline 时将变量传递到 SQL Server 实例的 SqlAzureDacpacDeployment@1 任务

问题描述 投票:0回答:1

我想在运行 Azure Pipeline 时将变量传递给 SQL Server 实例的

SqlAzureDacpacDeployment@1
(或
DotNetCoreCLI@2
)任务。

此变量将是管道正在运行的

env
(开发、接受、生产)。

我有一个看起来像这样的管道(不相同):

variables:
  ARMSvcCnnName: YourAzureResourceManagerServiceConnectionName
  AzureSQLServerName: YourAzureSQLSeverName
  AzureSQLDBName: YourAzureSQLDBName
  buildPlatform: 'Any CPU'
  buildConfiguration: 'Release'

pool:
  vmImage: 'windows-latest'

- task: DotNetCoreCLI@2
            displayName: 'Build Project: *.sqlproj'
            inputs:
              command: 'build'
              projects: '**\*.sqlproj'

- task: SqlAzureDacpacDeployment@1
  displayName: 'Deploy Azure SQL DB'
  inputs:
    azureSubscription: '$(ARMSvcCnnName)'
    AuthenticationType: 'servicePrincipal'
    ServerName: '$(AzureSQLServerName).database.windows.net'
    DatabaseName: '$(AzureSQLDBName)'
    deployType: 'DacpacTask'
    DeploymentAction: 'Publish'
    DacpacFile: '**\*.dacpac'
    AdditionalArguments: '/v:ETLUserPassword="$(sql-password)" /v:AppUserPassword="$(sql-password)"'
    IpDetectionMethod: 'AutoDetect'
    DeleteFirewallRule: false

我想知道是否可以动态地将来自 CI/CD 接口的 env 变量传递给每个任务,以便在 T-SQL 查询中使用它,如下所示:

IF @myVariable = 'dev'
BEGIN
    PRINT 'DEV';
END
ELSE if @myVariable = 'acc'
BEGIN
    -- Other commands here
    PRINT 'ACC';
END
ELSE 
BEGIN
    -- Other commands here
    PRINT 'PROD';
END

我正在考虑将

sqlcmd
PublishProfile
一起使用,但我错过了正确的教程

MB:

SqlAdditionalArguments
:# 字符串。选修的。当 TaskNameSelector = SqlTask 时使用。其他 Invoke-Sqlcmd 参数。

InlineAdditionalArguments
:# 字符串。选修的。当 TaskNameSelector = InlineSqlTask 时使用。其他 Invoke-Sqlcmd 参数。

https://learn.microsoft.com/en-us/azure/devops/pipelines/tasks/reference/sql-azure-dacpac-deployment-v1?view=azure-pipelines

sql-server t-sql azure-pipelines sqlcmd publish-profiles
1个回答
0
投票

在您的

SqlAzureDacpacDeployment@1
任务中,您将
publish
dacpac
文件发送到 azure sql,它会调用
SqlPackage.exe
进行部署,它不支持
custom variable
传递给 sql 脚本。

要针对Azure SQL数据库运行SQL脚本文件,您应该为

SqlTask
选择
deployType
,它使用
Invoke-Sqlcmd
命令,您可以指定sql脚本,并在
custom variables
中传递
SqlAdditionalArguments
。任务如下:

- task: SqlAzureDacpacDeployment@1
  inputs:
    azureSubscription: 'ARMConn-NonProd'
    AuthenticationType: 'server'
    ServerName: 'testsqlserver1.database.windows.net'
    DatabaseName: 'testdb1'
    SqlUsername: 'test'
    SqlPassword: '$(sqlpwd)'
    deployType: 'SqlTask'
    SqlFile: '**\test.sql'
    SqlAdditionalArguments: '-Variable "myVariable=$(env)"'
    IpDetectionMethod: 'AutoDetect'

为了在管道控制台中输出变量进行检查,将sql脚本内容更改如下:

DECLARE @OutputMessage VARCHAR(50)

IF '$(myVariable)' = 'dev'
BEGIN
    SET @OutputMessage = 'DEV'
END
ELSE IF '$(myVariable)' = 'acc'
BEGIN
    SET @OutputMessage = 'ACC'
END
ELSE 
BEGIN
    SET @OutputMessage = 'PROD'
END

SELECT @OutputMessage AS 'Environment'

管道输出值:

enter image description here

您可以在任务指南中找到更多详细信息。

© www.soinside.com 2019 - 2024. All rights reserved.