本文介紹可以透過CI工具Jenkins來執行原本可在Visaul Studio上執行的「建置方案」及「執行測試單元」兩項動作,未來當專案程式規模擴大,有助於在部署前簡化DevOps的工作。
※前置作業須完成:
1.Jenkins安裝(參考:https://dotblogs.com.tw/echo/2018/03/14/jenkins_installation_windows_newjob)
2.自行準備欲進行單元測試的Visual Studio的主專案(本文是使用VS2017開發)
安裝Jenkins需要的MS測試單元的套件,操作如下:
1.點選網頁側邊menu的「管理Jenkins」,如下圖。
點選「管理外掛程式」,如下圖。
後續會進入「外掛程式管理」畫面,並依下圖操作,安裝MS專案單元測試需要的工具,並執行安裝。
安裝完成後,重啟Jenkins並登入系統,再度檢查確定是否成功完成安裝,操作如下圖。
回到Dashboard首頁,創建新專案。
輸入「item name」,並按下「建置Free-Style軟體專案」,之後按下「OK」,如下圖。
回到首頁,選擇「管理 Jenkins」>「Global Tool Configuration」,如下圖。
開啟畫面如下,在此進行MSBuild及MSTest的安裝。
點擊「新增MSBuild」按鈕,並輸入「MSBuild Name」及「Path to MSBuild」欄位置之參數,如下圖。
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\MSBuild.exe
點擊「新增MSTest」按鈕,並輸入「MSTest Name」及「Path to MSTest」欄位置之參數,如下圖。完成後,按下「Save」。
C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\MSTest.exe
完成上述作業後,會進入參數頁面,點選「建置」頁籤,網頁會往下捲該功能,點擊「新增建置步驟」,選擇「Build a Visual Studio Project or solution using MSBuild」,如下圖。
針對MSBuild設定輸入參數,如下圖當作參考。(MSBuild命令參考:https://sparekh.com/using-command-line-msbuild-tool-to-build-net-projectsolution/)
(補充:MSBuild Version要選擇方才安裝MSBuild建置的名稱,否則預設值為Default時,在建置時會找不到MSBuild.exe)
完成後,按下「儲存」。
點擊「新增建置步驟」,選擇「Run unit tests with MSTest」,如下圖。
完成後,畫面會呈現如下圖。(MSTest參數參考:https://dotblogs.com.tw/stanley14/2018/05/31/jenkins_mstest)
上圖的欄位必須要填入單元測試的參數,因此先從Visual Studio中任一專案程式著手,建立測試單元,如下圖。
建立單元測試的設定,如下圖。請依讀者喜好自行設定,並按下「確定」。
粗略完成單元測試的3A撰寫,並「執行測試」,參考下圖。
VS會開啟「測試總管」,顯示單元測試的執行結果,如下圖。
以上為在VS專案上執行單元測試的步驟。
完成上述步驟後,可以取得單元測試專案的程式及其路徑,即可進行Jenkins上的MSTest參數設定,參考下圖設定。
(補充:MSTest Version要選擇方才安裝MSTest建置的名稱,否則預設值為Default時,在建置時會找不到MSTest.exe,Result File Name自行定義,並設定副檔名為.trx)
完成後,按下「儲存」。回到首頁,按下「馬上建置」,如下圖。
建置結果若為成功,會於「建置歷程」列表中顯示,如下圖。
筆者進行測試前13次建置都失敗(紅色燈號),到第14次才建置成功(藍色燈號)
最後觀看建置成功的訊息,點擊藍色燈號的項目,會進入以下頁面,並點擊「Console Output」。
Output結果如下圖:
參考來源:https://dotblogs.com.tw/echo/2018/03/30/jenkins_plugin_msbuild
補充:
如果在Jenkins上執行MSTest的建置,在Console Output產生下圖問題。
解法:需要回到「Global Tool Configuration」,把「MSTest安裝」的Path to MSTest裡面的路徑確實指定至MSTest.exe,雖然會出現警示訊息,告訴使用者它不是一個正常的目錄路徑,不過無須理會它,並按下「Save」,如下圖。
參考來源:https://stackoverflow.com/questions/44071128/running-mstest-in-jenkins-fails-with-createprocess-error-5-access-is-denied