2017-09-12 60 views
0

在VSTS中部署dacpac步驟中,可以將數據庫設置爲僅基於自定義條件運行。條件示例基於VSTS構建信息,並且我無法找到有關使用關聯的Azure訂閱或dacpac元數據中的條件的任何文檔。在conditional page,他們有一個版本變量,似乎它可能是有用的,但我無法找到關於它的其他信息。僅當自上次部署後修改dacpac時,才通過VSTS部署dacpac

基本上,當dacpac步驟被觸發時,我想根據現有數據檢查元數據,有條件地運行構建步驟並更新元數據。這可能通過VSTS構建步驟嗎?

回答

2

是的,這是可能的。您可以在VSTS構建定義中添加一個用戶定義的變量(例如變量result,其默認值爲0)。並且值1運行dacpac步驟,值爲0跳過此步驟。

詳細信息如下步驟:

  • 的dacpac步驟之前,有兩個操作添加PowerShell的任務

    1. 檢查是否有對現有數據的新變化。

      如果元數據僅存儲在Azure中,則可以參考this way與PowerShell中的Azure進行連接。如果元數據也存儲在您使用的存儲庫(如git倉庫)中,則還可以檢查存儲庫中的更新。

    2. 根據是否更新元數據來設置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將被執行。

+0

什麼是檢查新變更的好方法?我想我可以爲存儲表中的每個數據庫存儲最近的dacpac部署的散列,並將其與當前數據庫的散列進行比較,然後對其進行更新,但是如果VSTS或Azure具有某種內置版本控制會更好 – user3364161

+0

數據是否也在源代碼管理(git或TFVC)中管理?如果在VCS中管理數據,那麼確實有更簡單的方法。否則你可以像你提到的那樣使用這種方式。 –

+0

數據在git中管理,並通過VSTS – user3364161