在VSTS的deploy dacpac步骤中,您可以将数据库设置为仅基于自定义条件运行。条件示例基于VSTS构建信息,我找不到有关使用连接的Azure订阅或dacpac元数据中的条件的任何文档。在conditional page中,它们有一个版本变量,看起来可能有用,但我找不到有关它的其他信息。
基本上,当触发dacpac步骤时,我想根据现有数据检查元数据,有条件地运行构建步骤,并更新元数据。这是通过VSTS构建步骤实现的吗?
答案 0 :(得分:2)
是的,有可能。您可以在VSTS构建定义中添加用户定义的变量(例如变量result
,其默认值为0
)。使用值1
运行dacpac步骤,使用值0
跳过该步骤。
详细步骤如下:
在dacpac步骤之前添加 PowerShell任务并执行两项操作:
检查现有数据是否有新的更改。
如果元数据仅存储在Azure中,您可以在PowerShell中引用this way以与Azure连接。如果元数据也存储在您构建的存储库(例如git repo)中,您还可以检查存储库中的更新。
根据元数据是否更新来设置result
变量值。
如果数据已更新,请更改值为result
的{{1}}变量:
1
否则,请勿更改值(使用Write-Host ("##vso[task.setvariable variable=result]1")
保留值)
由于数据是在git VCS中管理的,因此您可以在git repo中检查数据是否更新。如果数据已更改,请将变量0
更改为result
。详细的powershell脚本如下:
1
为dacpac步骤设置条件:
在任务中,为运行此任务选择自定义条件。如果要在成功时运行此任务且变量$files=$(git diff HEAD HEAD~1 --name-only)
echo "changed files as below: $files"
if ($files -contains 'filename')
Write-Host ("##vso[task.setvariable variable=result]1")
变量为result
,则可以表达:
1
现在,如果and(succeeded(), eq(variables['result'], '1'))
的值为result
,则跳过dacpac步骤,0
的值为result
,dacpack将被执行。