透過Jenkins 與MSBuild、MSTest的串接,完成.NET專案的編譯與測試,並呈現測試報表,替未來自動化打下良好的基礎。
前言
任何重複性的工作,在標準化之後,毫不留情地導向自動化,已經是現在資訊團隊不可逃避的趨勢,本文主要分享透過Jenkins的幫忙,整合.NET專案的編譯、測試等功能,達到一鍵編譯、測試最後產生測試報表的一系列自動化動作。
初始設定
Jenkins不是為單一系統而設計,講白話一點,它算是一個代理者,不是實際執行動作的人,所以,如果要讓Jenkins能幫我門自動執行微軟的編譯和測試功能,必須先告訴Jenkins我們希望讓誰來擔負這些任務。
微軟的程式編譯是靠MSBuild執行,測試是靠MSTest執行,所以第一步驟便是要讓Jenkins認識MSBuild和MSTest,但在這之前,有一個前提就是Server必須有有安裝MSBuild和MSTest,最簡單的解決方案就是下載Visual Studio2015 IDE,基本上所有用得到的東西,都會幫你安裝起來,本文是假餓目前Server都已將相關的元件都安裝好了,接下來,只需透過四個步驟,便能讓Jenkins認識MSBuild、MSTest並與之協同合作。
- 安裝MSBuild Plugin
- 設定MSBuild
- 安裝MSTest Plugin
- 設定MSTest
安裝MSTest Plugin
管理Jenkins => 外掛程式管理 => 切換到"可用的"頁籤 => filter填入 MSBuild => 下載Plugin 可參考下圖。
設定MSBuild
管理Jenkins => Global Tool Configuration => 往下找到MSBuild區塊,填入Name,這是一個自訂的名稱,隨意填入即可,然後填入MSTest.exe的路徑,預設路徑可參考下圖,最後按下存檔即可。
安裝MSTest Plugin
管理Jenkins => 外掛程式管理 => 切換到"可用的"頁籤 => filter填入 MSTest => 下載下列Plugin 可參考下圖。
設定MSTest
管理Jenkins => Global Tool Configuration => 往下找到MSTest區塊,填入Name,這是一個自訂的名稱,隨意填入即可,然後填入MSTest.exe的路徑,預設路徑請參考下圖,最後按下存檔即可。
額外補充Jenkins套件手動安裝方式
前往Plugin相關資源的頁面,以下範例是下載tfs plugin,下載下來的檔案會是.hpi類型。
接著回到Jenkins => 管理Jenkins => 管理外掛程式 => 進階 往下滑動找到上傳外掛程式的區塊,將此檔案上傳安裝,重新啟動Jenkins,即可完成手動安裝步驟。
建立自動測試作業
回到首頁,點選新增作業,輸入作業名稱,點選建置Free-Style 軟體專案,然後按下OK。
首先,選擇原始碼的檔案來源,下圖範例是來自TFS上的專案,設定來源、驗證和指定要建置的分支。
接下來新增建置步驟,因為自動測試的程式碼也是會更新的,所以在跑測試之前,需先把測試專案也Build一次,測試的邏輯才會是最新版的。
剛剛有設定MSBuild的名稱是Net14.0,所以在1號球的位置可以直接下拉選單選取,接著設定要編譯的專案csproj的位置,按下存檔就完成建置的設定。
接下來再新增一個建置步驟,選擇Run unit tests with MSTest,可參考下圖。
前面有設定MSTest的名稱是MS4.0,所以在1號球的位置可以直接下拉選單選取,接著設定測試專案的dll位置,3號球是設定測試報表的檔案名稱,${BUILD_NUMBER}是Jenkins內建的環境變數,代表建置的編號,其餘的環境變數可參考下面表格,最後按下存檔就完成MSTest的設定。
Jenkins的環境變數表,來自Jenkins官方Wiki,可參考下圖。
以上,已經完成專案從版控下載原始碼,編譯之後運行測試並產生測試報表的動作,下一個小節會分享如何將測試報表呈現在Jenkins上。
展示報表
最後一個步驟是要將報表呈現在Jenkins,新增建置後動作,並且選擇Publish MMSTest test result report。
使用預設找目錄下所有.trx的檔案,trx是測試報表的附檔名,直接按下存檔。
接下來就可以實際Run一下剛剛建立好的作業,成功執行後,可看到專案可在1號球處直接點擊測試結果觀看,也可看到2號球處的測試結果趨勢。
小結
本文分享了如何下載Plugin讓Jenkins可以與MSBuild和MSTest協同合作完成.NET專案的編譯和測試,並且透過一連串Step by Step的方式介紹如何設定從版控下載原始檔,編譯專案,執行測試並且發布報表,雖然整個作業還不是自動化執行,因為還是需要按下建置按鈕才會執行,但已經為自動化流程打下基礎,之後只要整合版控,在開發人員發出PR時觸發本流程,便可達到真正的自動化效果。