我想在运行 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 参数。
在您的
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'
管道输出值:
您可以在任务指南中找到更多详细信息。