如何将变量传递给devops上的sql部署?
Posted
技术标签:
【中文标题】如何将变量传递给devops上的sql部署?【英文标题】:How to pass a variable to sql deploy on devops? 【发布时间】:2022-01-08 21:22:37 【问题描述】:我需要部署后脚本(数据库项目的一部分)来设置一些具体的东西,具体取决于它将运行的环境。
如何传递脚本可以访问的环境变量?
这就是我想要做的。 yaml文件:
- task: SqlDacpacDeploymentOnMachineGroup@0
displayName: Install database
inputs:
TaskType: 'dacpac'
DacpacFile: '**/app-db.dacpac'
TargetMethod: 'server'
ServerName: '(localdb)\MSSQLLocalDB'
DatabaseName: 'app-dev'
AuthScheme: 'windowsAuthentication'
日志:
Starting: Install database
==============================================================================
Task : SQL Server database deploy
Description : Deploy a SQL Server database using DACPAC or SQL scripts
Version : 0.3.23
Author : Microsoft Corporation
Help : https://docs.microsoft.com/azure/devops/pipelines/tasks/deploy/sql-dacpac-deployment-on-machine-group
==============================================================================
*** Could not deploy package.
Warning SQL72013: The following SqlCmd variables are not defined in the target scripts: env.
Error SQL72014: .Net SqlClient Data Provider: Msg 137, Level 15, State 2, Line 14 Must declare the scalar variable "@env".
Error SQL72045: Script execution error. The executed script:
IF (@env = 'DEV')
BEGIN
...
END
【问题讨论】:
【参考方案1】:这里是我在任何地方都找不到的完整解决方案:
为 dacpac 声明一个变量。在 Visual Studio 中,转到属性项目页面,选项卡SQLCMD Variables
。像这样添加环境变量:
在 sql 脚本中,将变量写入字符串中,这样就不会因 SQL 语法错误而中断构建。它不是 SQL 变量。字符串'$(env)'
在运行前将被替换为令牌:
if ('$(env)' = 'DEV') ...
您仍然可以通过发布项目在 Visual Studio 中对其进行测试。
最后去部署任务定义并像这样设置变量:
- task: SqlDacpacDeploymentOnMachineGroup@0
displayName: Install database
inputs:
TaskType: 'dacpac'
DacpacFile: '**/app-db.dacpac'
TargetMethod: 'server'
ServerName: '(localdb)\MSSQLLocalDB'
DatabaseName: 'app-dev'
AuthScheme: 'windowsAuthentication'
AdditionalArguments: /v:env=DEV
【讨论】:
以上是关于如何将变量传递给devops上的sql部署?的主要内容,如果未能解决你的问题,请参考以下文章
PHP 通过 SQL 查询中的 Href 链接将变量传递给弹出页面