前幾篇(二~四)依序完成了準備可編譯.NET的環境、TFS、MSBuild、NuGet到Slack的組態,為了接下來更多的持續整合(CI)工作,我們這篇前半部先開一個乾淨的.NET類別庫專案,並且完成最基本的版控、Daily Build及通知組態工作,讓新的Jenkins Server 開始整合我們的專案。
完成這篇,我們就到了第三關Build了。
開發一個類別庫專案
這邊我們以Log中介作為class library範例。 左邊的分類選.NET Standard > 下方決定好專案名稱及儲存程式碼路徑 > 勾選加入原始檔控制 > 按下確定按鈕
加入Team Founation Server作原始碼控制,確認好Team專案位置後,按下確定按鈕
專案建立好之後,接下來我們透過Nuget安裝NLog套件。
瀏覽 > 輸入NLog > 將NLog及NLog Configuration一併安裝。
安裝完畢後!初始專案就建立好了,下一步簡單加一些程式碼。
建立Log專案的程式
1.在方案總管下的Log專案,Ctrl + Shift + A 新增Log等級清單的列舉(檔案名稱: LevelEnum.cs)
namespace Log
{
public enum LevelEnum
{
Debug = 0, Trace, Info, Notice, Warn, Error, Fatal
}
}
2.在方案總管下的Log專案,Ctrl + Shift + A 新增介面Ilog(檔案名稱Ilog.cs),定義一個寫出的method
namespace Log
{
interface Ilog
{
void write(string Content, LevelEnum level);
}
}
3.在方案總管下的Log專案,Ctrl + Shift + A 新增實作Ilog介面的類別(這邊埋一點bug,讓之後的單元測試抓出來)
using NLog;
namespace Log
{
public class log : Ilog
{
private static Logger logger = LogManager.GetCurrentClassLogger();
public void write(string Content, LevelEnum level)
{
switch (level)
{
case LevelEnum.Debug:
logger.Debug($"偵錯(1):{Content}");
break;
case LevelEnum.Trace:
logger.Debug($"追蹤(2):{Content}");
break;
case LevelEnum.Info:
logger.Debug($"資訊(3):{Content}");
break;
case LevelEnum.Notice:
logger.Debug($"通知(4):{Content}");
break;
case LevelEnum.Warn:
logger.Debug($"警示(5):{Content}");
break;
case LevelEnum.Error:
logger.Debug($"錯誤(6):{Content}");
break;
case LevelEnum.Fatal:
logger.Debug($"嚴重(7):{Content}");
break;
default:
break;
}
}
}
}
編譯成功後,接著寫入修改註解(加上Jira Issue ID),或是加入TFS工作項目ID後,就讓我們姑且把程式簽入吧!
Jenkins CI JOB新增
練習用的類別庫專案完成了,我們可以在新增的Jenkins Server建立第一支CI JOB吧!
按下新增作業(JOB)
輸入好項目名稱Log > 先選擇建置Free-Style軟體專案 > 按下下方的OK按鈕。
在General區塊輸入專案說明
點一下TFS,依序輸入專案集合URL、專案目錄及登入TFS帳號密碼(建議使用AP帳號)
建置觸發程序勾選Build when a change is pushed to TFS/Team Services以及Week Day 8:00-18:00 每到30分時輪詢TFS
在建置區塊中,分別新增執行Windows批次指令及Build a Visual Studio project or solution using MSBuild
Windows批次指令要執行NuGet套件的還原
"%JENKINS_HOME%\nuget.exe" restore Log.sln
建置後動作新增Slack Notificaiton,設定好要通知的條件後,按下儲存按鈕,我們就會成一支CI JOB的Config了。
設定完畢後,執行左邊選單的馬上建置,在CI Job畫面的左下角上,就可以查詢到建置歷程,右邊的畫面區域則可以查詢到最近變更以及工作區(workspace)。
Slack也能收到建置成功的訊息
這篇我們Config了一個從TFS取版本、透過NuGet安裝套件、MSBuild編譯,並透過Slack頻道接收訊息的基本CI Job,即使只是基本的版本及建置整合,我們也開始能讓專案的透明度提高,每天都能確保有一個完整可編譯成功的版本,順利完成基本的程式碼管理工作。
再往後幾天,繼續走向持續整合之路,切到測試(Test)、程式碼掃描(Scan)、發佈套件到持續佈署(Deploy)。
疊疊樂
2018.06 台北.內湖subaru展間
參考
Configure the Job
https://wiki.jenkins.io/display/JENKINS/Configure+the+Job