在VSTS中部署dacpac步驟中,可以將數據庫設置爲僅基於自定義條件運行。條件示例基於VSTS構建信息,並且我無法找到有關使用關聯的Azure訂閱或dacpac元數據中的條件的任何文檔。在conditional page,他們有一個版本變量,似乎它可能是有用的,但我無法找到關於它的其他信息。僅當自上次部署後修改dacpac時,才通過VSTS部署dacpac
基本上,當dacpac步驟被觸發時,我想根據現有數據檢查元數據,有條件地運行構建步驟並更新元數據。這可能通過VSTS構建步驟嗎?
在VSTS中部署dacpac步驟中,可以將數據庫設置爲僅基於自定義條件運行。條件示例基於VSTS構建信息,並且我無法找到有關使用關聯的Azure訂閱或dacpac元數據中的條件的任何文檔。在conditional page,他們有一個版本變量,似乎它可能是有用的,但我無法找到關於它的其他信息。僅當自上次部署後修改dacpac時,才通過VSTS部署dacpac
基本上,當dacpac步驟被觸發時,我想根據現有數據檢查元數據,有條件地運行構建步驟並更新元數據。這可能通過VSTS構建步驟嗎?
是的,這是可能的。您可以在VSTS構建定義中添加一個用戶定義的變量(例如變量result
,其默認值爲0
)。並且值1
運行dacpac步驟,值爲0
跳過此步驟。
詳細信息如下步驟:
的dacpac步驟之前,有兩個操作添加PowerShell的任務:
檢查是否有對現有數據的新變化。
如果元數據僅存儲在Azure中,則可以參考this way與PowerShell中的Azure進行連接。如果元數據也存儲在您使用的存儲庫(如git倉庫)中,則還可以檢查存儲庫中的更新。
根據是否更新元數據來設置result
變量值。
如果數據被更新,然後用價值1
改變result
變量:
Write-Host ("##vso[task.setvariable variable=result]1")
否則,不改變值(跟上0
值)
由於數據在git VCS中管理,你可以檢查數據是否更新或不在git倉庫中。如果數據更改,則將變量result
更改爲1
。如下面詳細PowerShell腳本:
$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")
設置條件爲dacpac步:
在任務中,選擇自定義條件用於運行此任務。如果你想運行此任務成功和可變result
變量是1
時,可以明確:
and(succeeded(), eq(variables['result'], '1'))
現在,如果result
與價值0
,該dacpac一步可以跳過,是result
與價值1
,dacpack將被執行。
什麼是檢查新變更的好方法?我想我可以爲存儲表中的每個數據庫存儲最近的dacpac部署的散列,並將其與當前數據庫的散列進行比較,然後對其進行更新,但是如果VSTS或Azure具有某種內置版本控制會更好 – user3364161
數據是否也在源代碼管理(git或TFVC)中管理?如果在VCS中管理數據,那麼確實有更簡單的方法。否則你可以像你提到的那樣使用這種方式。 –
數據在git中管理,並通過VSTS – user3364161