[Jenkins]持續整合之路(五)組態基本的Jenkins CI Job

前幾篇(二~四)依序完成了準備可編譯.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