只有在自上次部署

时间:2017-09-12 15:23:50

标签: build azure-devops

在VSTS的deploy dacpac步骤中,您可以将数据库设置为仅基于自定义条件运行。条件示例基于VSTS构建信息,我找不到有关使用连接的Azure订阅或dacpac元数据中的条件的任何文档。在conditional page中,它们有一个版本变量,看起来可能有用,但我找不到有关它的其他信息。

基本上,当触发dacpac步骤时,我想根据现有数据检查元数据,有条件地运行构建步骤,并更新元数据。这是通过VSTS构建步骤实现的吗?

1 个答案:

答案 0 :(得分:2)

是的,有可能。您可以在VSTS构建定义中添加用户定义的变量(例如变量result,其默认值为0)。使用值1运行dacpac步骤,使用值0跳过该步骤。

详细步骤如下:

  • 在dacpac步骤之前添加 PowerShell任务并执行两项操作:

    1. 检查现有数据是否有新的更改。

      如果元数据仅存储在Azure中,您可以在PowerShell中引用this way以与Azure连接。如果元数据也存储在您构建的存储库(例如git repo)中,您还可以检查存储库中的更新。

    2. 根据元数据是否更新来设置result变量值。

      如果数据已更新,请更改值为result的{​​{1}}变量:

      1

      否则,请勿更改值(使用Write-Host ("##vso[task.setvariable variable=result]1") 保留值)

    3. 由于数据是在git VCS中管理的,因此您可以在git repo中检查数据是否更新。如果数据已更改,请将变量0更改为result。详细的powershell脚本如下:

      1
    4. 为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将被执行。