安裝Jenkins和創建任務這些操作網上一搜一大把,這里就沒必要寫了,直接就開始編譯、單元測試,覆蓋,git提交觸發構建,構建失敗發送給提交人郵件。
因為項目比較復雜,為了懶省事我直接在CI服務器上安裝了visual studio 2017 (主要就是為了那個VsDevCmd.bat)。
這里呢為了保證CI能夠正常編譯、執行單元測試、覆蓋率,我們對.net 項目做了如下約定:
1.單元測試一般使用xunit 進行編寫。
2.Mock框架。
對于core 項目需要安裝一下幾個NuGet包
1.coverlet.msbuild? 覆蓋率
2.XunitXml.TestLogger xml 格式記錄器
?
說完一些前置條件,現在開始正式的編譯,執行單元測試,覆蓋率
對于.net framework 項目我們的編譯肯定是使用MSBUILD?
第一條命令是在當前的命令行窗口創建一個MSBuild 指令,然后 進行Nuget包還原,編譯項目 ,后面的參數可以自行修改。
第二條指令是進行單元測試與覆蓋率,因為執行覆蓋率時要執行單元測試,所以我就把兩條指令放在了一起,避免不必要的損耗。
生成覆蓋率報告我使用的工具是OpenCover ,OpenCover 生成的報告是xml格式,Jenkins 無法識別(也可能是我不會折騰),所有我又使用了ReportGenerator工具對xml 進行了一個轉換,把它轉換成html格式。然后用Jenkins的HTML 報表插件展示出來。
對于單元測試報告,因為Jenkins有相關的插件,所以直接就用xunit生成的xml格式的測試報告就可以了。
這里說明一下,在執行單元測試時我使用的xunit.console.exe 這個命令行工具。沒有把執行單元測試的步驟放入到MSBuild任務中去,有興趣的人可以自行研究。
好了到這里呢就完成了.net framework 項目的編譯、單元測試、覆蓋率 環節。
?
?
?
對于Core項目,它的編譯我使用的dotnet build ***.sln 方式,單元測試使用的是dotnet test ***.csproj 。之前說過對于core的覆蓋率我使用的是coverlet.msbuild 這個MSBuild 擴展命令工具包。所以在執行單元測試的同時就可以生成覆蓋率的報告。對于xunit的單元測試結果,我使用的XunitXml.TestLogger 這個MSBuild 擴展命令工具包。
具體的命令如下:
這一個dotnet test命令就完成了所有的工作,同樣我最終還是使用ReportGenerator這個工具將覆蓋率報告轉換成HTML格式。
最終的展示結果:
上圖是構建后的總覽圖。
上圖是覆蓋率結果報表。
單元測試報表
?
對于git提交后觸發構建,在git倉庫為項目添加一個鉤子即可。