[SQL][VSTS]透過 VSTS 將資料庫專案發佈到 Azure SQL Database 上

透過簡單的設定,讓 VSTS 可以來幫我們將資料庫專案,佈署到指定的 Azure SQL Database 上

在前面幾篇的文章中,有介紹到我們團隊常用的 VSTS 佈署功能,最近為了希望整體可以一氣呵成,因此研究了一下如何透過 VSTS 來幫我們佈署資料庫的專案。

首先我們先建立一個資料庫專案,在這個專案內我們建立了兩個範例的資料表在當中。

接下來我們希望透過 VSTS 來幫我們來發行該資料庫專案到 Azure SQL Database ,當我們在建立一個新的 Build 組態的時候,並沒有一個是針對 Azure SQL Database 的發佈樣板,因此我們就選擇標準的 Vsiual Studio 來開始。

接著我們將暫時用不到的三個 Task 先取消 Enabled 的屬性

因此我們就把目前設定好的存起來,並且來執行看看是否 OK。從輸出結果中看起來 dacpac 的封裝檔案有產出出來,並且被複製到 $(build.artifactstagingdirectory) 的目錄下面去了,看起來一切都很順利,整個執行過程大約花費 10s 就完成了。

測試完成後,我們繼續回來修改這個 Build 的組態設定,我們加入一個 Azure SQL Database Depolyment 的 Task 到整個組態最後一個步驟 

關於 Azure SQL Database Deployment 這個 Task ,他的設定就稍微多了一點,但基本上並不複雜。這裡我將 Azure Connect type 調整為 Azure Resource Manager ,下面就根據您的 Azure 設定,指定所使用的 Azure 訂閱 和 Azure SQL Database 的位置、資料庫名稱與連接的帳號和密碼。

 

比較要注意的是下半段的部分,要指定 DACPAC 的檔案名稱,這裡我們選擇之前透過 Copy File 那個 Task 所指定目的地目錄下的 DACPAC 的檔案,而在防火牆的部分,如果沒有甚麼特別設定的話,我們直接讓他使用 Auto Detect 就可以了

設定好之後,我們就可以放下去跑囉。從下面執行的訊息中可以看出來,雖然整個佈署是成功的,但卻要花上 5.7 分鐘之久,扣除前面 產生 dacpac 的封裝 和 Copy 的時間,整個在執行 DACPAC 的佈署花了超過 5mins,時間上看起來似乎過久了一點。

因為不知道是否是第一次需要初始化,所以會比較花時間,因此我在這個資料庫專案上,又在新增一個資料表,並且在原本的資料表上也都多加上一個欄位,再來測試一次看看。整體結果看起來花費的時間都沒有減少太多,這就讓我有點困擾了,畢竟一個月也只有 240 分鐘的免費額度,這樣一下就就很容易把時間給浪費掉了,可能要啟用多個帳號的額度來支援才有辦法。


後來把上述的問題,詢問另外一個 MVP 郭董,發現原來是我弄錯了,應該是在 Build 的時候把 DACPAC 的檔案給準備好,要發佈到 Azure SQL Database 的這個部分,就交給 Release 來處理,因為免費額度算的是 Build 的時間,因此我們可以把發佈交給  Release 來做,這樣免費的 240 分鐘才不會耗用那麼快速。因此我重新調整一下上述 Build 的組態,把原本取消的 Task : Publish Artifact 給  Enabled 起來,而將原本加入的 Task : Execute Azure SQL 的 Enabled 屬性給取消,因此這樣整個 Build 的時間就可以比較短了。

設定完 Build 之後,我們在執行一次,這次大約只要花費 20s 。接下來我們到 Release 產生一組新的組態設定,因為在這個部分也沒有針對 Azure SQL Database 的佈署,因此在樣版的部分我們選擇空的樣板

這裡我都先用預設的名稱, 基本上那些後續再來調整都沒有問題,所以就不先在這裡花時間了。

進入後在環境內新增一個 Task ,選擇剛剛前面在佈署 Azure SQL Database 所使用的 Execute Azure SQL

大部分設定都跟在 Build 的時候所設定的一樣,唯一要注意的是 DACPAC 檔案的位置,因此要記得點選旁邊的 ... 按鈕,去選擇適當目錄下的檔案,這個部分要注意一下。

接著當我們放下去執行,會發現其實整體時間並沒有太大的變化,但因為我們 Build 的部分縮減了相關處理,因此關於時間計費的部分就相對地減少許多。


透過這個部分的測試,發覺自己之前使用的時候,太少搭配 Release 來做使用,幾乎都把所有處理都放在 Build 來進行,因此只能建立一堆的帳號來搭配使用,目前知道 Release 使用的好處,看來後續我也要調整一下相關作法,這樣做起來應該也會方便許多。