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

Edward Kuo
Nov 20 · 6 min read
Image for post
Image for post

當我們將SQL開發在DevOps過程中讓它也進入到版控,那樣就需要在每次Check In Code時候,能過作自動幫我們去Scan Code是否有符合T-SQL的開發規範或是有人撰寫影響效能的SQL語法。

我找了半天終於在MarketPlace找到一個現在是免費整合在Azure DevOps的套件

Image for post
Image for post

為什麼說是現在呢?因為就官方說法目前是還在 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來做使用

Image for post
Image for post

開始使用

使用SQL Enlight功能需要搭配兩個Task,分別是

  • SQL Enlight
  • Publish Test Results

第一個Task主要是進行分析SQL語法,第二是將分析好的報告上傳到CI的Test結果。就可以在CI跑完後,了解Scan的結果。

設定SQL Enlight部分,主要設定為下面

Image for post
Image for post
  • Include Pattern : 就是設定要抓取的SQL檔案的位置或是確保是SQL檔案,因為在資料庫專案中,有些可能不是屬於SQL開發,如果也去Scan,就會影響到結果
  • Exclude Pattern: 排除那些是我們不需要掃描的

以上兩個語法都需要用正規表示式寫

  • Include Rules: 本身在這Task內包含的規則很多,可以選用自己想要的規則去Scan,不過,我這邊用法是選擇*,表示所有規則都要套用,然後再用排除法,篩選掉我不要的規則
  • Exclude Rules: 就是可以篩選出不符合自己情境的規則,畢竟,這些規則是非常嚴謹,有時候不一定適合團隊或是商業情境,這時候就需要排除

從這個連結https://sqlenlight.com/support/documentation/#analysis-rules 就可以看出這套件有多少規則。說實在我認為這部分還是要做一些篩選,不然,基本上要通過掃描是很困難,且有些不一定是適合自己

這邊規則排除就是選取到規則號面,然後用逗號去依序列出來

Image for post
Image for post

就可以納入要判斷還是不需要判斷。

再來就是設定Publish Test Results,在這邊設定有幾個設定值一定要固定,才能正確上傳Scan後的報告

Image for post
Image for post
  • 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那邊看到

Image for post
Image for post

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

Image for post
Image for post

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

Image for post
Image for post

不過,唯一麻煩地方,就是要知道為什麼錯誤,必須要到官方網站去了解的規則的說明。

因此,如果發生Scan後,無法通過規則,該次CI就會判定失敗,就不會繼續前進

整合Visual Studio

目前套件是可以整合Azure DevOps,如果覺得每次都要知道答案,就要Check In才能知道,這樣覺得太麻煩,也可以下載該官方的Visual Studio整合套件,就可以在Local端就知道答案

Image for post
Image for post

不過,該工具只有免費十四天試用,之後就要收費。畢竟這工具不只有Scan規則而已還包含許多功能,是否有需要就見仁見智了

目前覺得能在Azure DevOps Service整合CI進行SQL的語法掃描,算是相當不錯,唯一就是必須要先人工去review規則是否符合現狀。

參考資料

EK.Technology Learn

Design,Thinking,Coding & have fun every thing

Edward Kuo

Written by

Enterprise IT Manager / Microsoft Regional Director / Microsoft MVP / DevOps Expert / Speaker, About me: https://profile.edwardkuo.dev/about/

EK.Technology Learn

Design,Thinking,Coding & have fun every thing

Edward Kuo

Written by

Enterprise IT Manager / Microsoft Regional Director / Microsoft MVP / DevOps Expert / Speaker, About me: https://profile.edwardkuo.dev/about/

EK.Technology Learn

Design,Thinking,Coding & have fun every thing

Medium is an open platform where 170 million readers come to find insightful and dynamic thinking. Here, expert and undiscovered voices alike dive into the heart of any topic and bring new ideas to the surface. Learn more

Follow the writers, publications, and topics that matter to you, and you’ll see them on your homepage and in your inbox. Explore

If you have a story to tell, knowledge to share, or a perspective to offer — welcome home. It’s easy and free to post your thinking on any topic. Write on Medium

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store