Azure DevOps 進行自動化的T-SQL Code Analysis

當我們將SQL開發在DevOps過程中讓它也進入到版控,那樣就需要在每次Check In Code時候,能過作自動幫我們去Scan Code是否有符合T-SQL的開發規範或是有人撰寫影響效能的SQL語法。
我找了半天終於在MarketPlace找到一個現在
是免費整合在Azure DevOps的套件

為什麼說是現在呢?因為就官方說法目前是還在 Preview version,所以,可以免費試用
The download contains SQL Enlight Code Quality extension for Azure DevOps and TFS 2017/2018. This is a fully functional preview version of the extension, free for evaluation until the end of the preview period.
SQL Enlight Code Quality extension adds T-SQL code analysis support to Azure DevOps pipelines with more than 260 code analysis rules.
另外,雖然有其他不錯的Scan廠牌工具,例如:Redgate出品的資料庫工具,是非常用名的,但是,整合在Azure DevOps Service就不方便使用。此外,整合在CI好處在也可以避免人員忘記確認相關SQL Rule後,就直接佈署之類問題。藉由自動化方式還是比較好的
開始安裝
要安裝這個套件很簡單,只要在MarketPlace點擊該套件就可以安裝,如果是Server版本,就要下載套件進行安裝了。安裝完畢就可以在CI的Task找到SQL Enlight Task來做使用

開始使用
使用SQL Enlight功能需要搭配兩個Task,分別是
- SQL Enlight
- Publish Test Results
第一個Task主要是進行分析SQL語法,第二是將分析好的報告上傳到CI的Test結果。就可以在CI跑完後,了解Scan的結果。
設定SQL Enlight部分,主要設定為下面

- Include Pattern : 就是設定要抓取的SQL檔案的位置或是確保是SQL檔案,因為在資料庫專案中,有些可能不是屬於SQL開發,如果也去Scan,就會影響到結果
- Exclude Pattern: 排除那些是我們不需要掃描的
以上兩個語法都需要用正規表示式寫
- Include Rules: 本身在這Task內包含的規則很多,可以選用自己想要的規則去Scan,不過,我這邊用法是選擇*,表示所有規則都要套用,然後再用排除法,篩選掉我不要的規則
- Exclude Rules: 就是可以篩選出不符合自己情境的規則,畢竟,這些規則是非常嚴謹,有時候不一定適合團隊或是商業情境,這時候就需要排除
從這個連結https://sqlenlight.com/support/documentation/#analysis-rules 就可以看出這套件有多少規則。說實在我認為這部分還是要做一些篩選,不然,基本上要通過掃描是很困難,且有些不一定是適合自己
這邊規則排除就是選取到規則號面,然後用逗號去依序列出來

就可以納入要判斷還是不需要判斷。
再來就是設定Publish Test Results,在這邊設定有幾個設定值一定要固定,才能正確上傳Scan後的報告

- Test result format: 設定為VSTest
- Test results files: 設定為SqlEnlight_AnalysisReport_For_TestResults.trx
- Search folder: 設定為$(Build.ArtifactStagingDirectory)
最後就要跑這個Task時候,是當前一個Task也就是SQL Enlight失敗時候,才要執行。如果成功就可以不需要執行這個,不然會出錯,因為會找不到Test Result,此外,Upload test results files
這個功能也要勾選才可以
另外,如果DB專案需要進行編譯的話,掃描要在編譯之前。那樣我們來看掃描後結果,可以在Tests那邊看到

細節報告如下,會告訴你違反那些SQL Rule

點選每個違反規則的地方,還可以如下圖,直接帶出是在你那個SQL Script檔案的那一行有違反,是相當方便的找出錯誤

不過,唯一麻煩地方,就是要知道為什麼錯誤,必須要到官方網站去了解的規則的說明。
因此,如果發生Scan後,無法通過規則,該次CI就會判定失敗,就不會繼續前進
整合Visual Studio
目前套件是可以整合Azure DevOps,如果覺得每次都要知道答案,就要Check In才能知道,這樣覺得太麻煩,也可以下載該官方的Visual Studio整合套件,就可以在Local端就知道答案

不過,該工具只有免費十四天試用,之後就要收費。畢竟這工具不只有Scan規則而已還包含許多功能,是否有需要就見仁見智了
目前覺得能在Azure DevOps Service整合CI進行SQL的語法掃描,算是相當不錯,唯一就是必須要先人工去review規則是否符合現狀。