Jenkins持續集成 & .NET


最近受累於測試環境每次發布都很麻煩,而且我們有多個測試環境,因此專門抽時間做了Jenkins的配置和研究。

折騰了兩天終於綠燈以后,先來個截圖,BlueOcean UI還是很nice的。

環境搭建

找一個干凈點的Build服務器,然后開始持續集成之旅吧!

  1. 安裝JDK

我安裝了Oracle的JDK之后貌似發送郵件SSL方式有些問題,然而網上的方案貌似不能修復。stack上人家推薦安裝openjdk的,我還沒來及折騰,不過全新安裝的話,推薦openjdk吧。

  1. Jenkins安裝

Jenkins官網下載最新的安裝包,選擇對應的系統。安裝都是無腦的包括啟動,

  1. 安裝.NET編譯環境

這里有點彎路!剛開始我也是滿懷期待的想盡量的讓Build服務器干凈一些,所以找的是獨立的MSBuild方式,然而后續的過程證明依賴VS編譯的我們離不開VS環境!

獨立的MSBuild安裝包:下載

當然我的推薦是直接安裝Visual Studio,由於我們全部用.NET 4.6.1 所以直接安裝了 Visual Studio 2015社區版,盡量少些東西!

以上就是基礎的Build環境了。

配置持續集成Job

Jenkins的強大之處在於,所有的任務可以被拆分成粒度自由的Job。而Job之間可以通過很多方式來組織。例如正常的持續集成流程是:獲取代碼->Build->單元測試腳本->發布到相應環境->自動化測試腳本->Email報告。這里的所有步驟可以分拆成單獨的job然后再串起來執行,不過這樣需要很了解Jenkins,這不是今天要記錄的。(其實我也沒研究會。。。長路漫漫了)

  1. 新建Job

Job選擇"自由風格的軟件項目",OK之后General選項卡中默認即可。唯一需要注意的是如果你的多個工程之間有關聯,又或者你有很多工程想放在一起,那么我建議配置上"自定義的工作空間"。

如圖,我指定了我的工作控件是yqnwork,我創建的所有job都這樣設定,那樣源代碼都會被獲取到這里,之后的工作都在一個根目錄下進行,將大大方便處理。不然坑起來都是填不完的(我爬出來的!!)

  1. 源碼管理

獲取代碼這里,我選擇的是TFS,TFS不是原生支持的。如果選擇Git/Subversion應該會更方便一些。

TFS需要插件支持,Team Foundation Server Plug-in,插件安裝失敗的先看Jenkins插件手動更新章節

安裝完插件之后,重新編輯job,配置如下:

CollectionURL是TFS URL + 集合名稱!
Project path是相對於集合的項目文件夾路徑,必須要$開頭,這些配置在VS源碼管理中都可以自己看到的。

Credentials也是一個坑!坑了我大半天!務必要新建一個TFS帳號專門用於Jenkins,不然有workspace的沖突風險。我進了一直不能獲取到最新版本的坑,google了半天,最后才發現的!
Local workfolder&Woekspace name根據實際填寫。

  1. 構建 Build

構建觸發器構建環境根據實際需要填寫,這里默認即可。

.NET Build需要MSBuild插件的支持,如果根據前面的環境搭建已經安裝了VS那么萬事大吉!

安裝完MSBuild Plugin需要配置下默認的MSBuild路徑。在Global Tool Configuration中找到MSBuild節,新增一個配置如下:

注意依然有坑!!! MSBuild的路徑需要根據.NET的版本來決定,.NET 4.5以下的貌似引用的是C:\Windows\Microsoft.NET\Framework64\v4.0.30319中的,4.5以上的才是在圖中的路徑,具體的自己嘗試吧~

回到Job的配置:

選擇剛才配置的MSBuild,注意我這里是直接發布Asp.NET MVC項目,所以我Build File的目標是csproj。如果是要編譯整個工程,請選擇對應的sln。
編譯參數根據需要配置。

其中需要說明的是,如果是發布那么就按照我這里來。
publishProfile是發布的配置文件,這個建議在VS中手動創建一個配置針對Jenkins的發布配置,選擇發布對象為文件系統,目錄是重點!!!目錄請選擇Build服務器上對應的目錄,建議還是發布到workspace中。workspace的目錄可以參看我的workspace目錄

VisualStudioVersion請選擇對應的VS版本!!

這里我遇到一個坑,由於nuget版本太低導致dll獲取錯誤編譯失敗。手動升級了工程中.nuget目錄下的nuget.exe。(打到這里vs code死了。。。沒保存。。。)

另外Nuget由於牆的問題很卡啊,我還手動在Build服務器上開啟了代理。

  1. 附加的任務執行

由於我不想把不同環境的配置文件也在這個時候生成,被push到相應的環境(我們分QA、STA環境),所以這里我直接刪掉了生成后的文件。選擇添加一個windows command的步驟,執行del指令,這里本來可以用環境變量但是作為del指令的參數出了些問題,所以改用絕對路徑!

關於這些配置文件我的想法是根據不同環境從TFS中獲取不同的文件,這點在將來再討論實現。

  1. 發布

發布一般都是使用FTP或者SSH,windows的服務器自然選擇FTP。由於IIS自帶FTP發布功能,因此首先配置IIS FTP發布功能。

先從MS的Microsoft Web Platform Installer中安裝 IIS:FTP發布服務&IIS:FTP擴展性。 然后打開IIS之后選擇目標網站,右鍵里會出現添加FTP發布,配置如下:


建議是啟用虛擬的主機名,這樣便於多個站點的FTP分開維護,當然你可以選擇默認的IP,然后修改成指定的website目錄的FTP,這樣很方便,但是不建議哦!

然后選擇"基本"的身份驗證,授權給指定的賬戶,建議單獨建立一個Jenkins賬戶用來發布!這樣IIS FTP就配置完成了,測是的話可以用command的ftp命令來測試。

如果使用虛擬主機名配置了FTP,訪問時的帳號是 www.demo.com|jenkins!!! 域名 + "|" + 賬戶名

然后回到Jenkins,添加FTP配置:首先安裝插件Publish over FTP。然后到系統設置中添加FTP帳號。依然提醒注意帳號名稱。

接着回到Job配置FTP:

Source files這里最好點擊問號,看看詳細的正則規則,全部文件夾及文件就配置成**/*
我這里由於我每個項目都publish到指定文件夾,因為帶了前綴。然后發布到服務器的FTP地址是不需要這些前綴文件夾的,因此需要配置Remove prefix來移除。

'Transfer Set'我研究了下還有更復雜的功能可以配置,自行研究吧。

  1. 備份發布

由於每次發布都會直接刪掉原來的發布文件,因此一般發布完成之后都會備份一份文件,這樣做也便於回滾哦~!

備份的話我選擇執行一段windows command,直接貼Command:

  1. 郵件配置

這個功能不提了,配置很簡單,先到系統配置下郵件的發送服務器,然后添加一個步驟Email Notification就可以了。

workspace目錄

這里貼一下我的workspace目錄:

bak:我用來存放備份文件,一會再說。
CodeV2:是對應的TFS上的代碼路徑
publish:對應各個項目的發布文件地址。上邊提到的publishProfile中的目標路徑就是這個。

各個文件夾下,我也是按照項目划分 Demo1/Demo2/Demo3...

Jenkins插件手動更新

Jenkins可能受牆的影響更新起來出錯概率非常高,所以建議出錯了直接手動下載。

下載地址是:http://updates.jenkins-ci.org/download/plugins/

這個列表里有所有插件的安裝包,先找到wiki看下插件的依賴,下載的時候把依賴也都下載一遍。這里有個坑是permalink to the latest這個鏈接下載來的有時候不是最新的,所以最好是手動點最新的!

下載了文件之后,保存到Jekins目錄下的plugins,然后重啟Jenkins即可。

重啟指令是: http://你的Jekins地址/restart

另外文章開頭和結尾的截圖都是Jenkins的BlueOcean插件,這是它的新UI,老的真的有點丑啊。
這個插件不成功就直接手動吧,安裝了好多回,累!

總結

以上就是整個Jenkins自動化構建的研究,建議每個步驟單獨分解成job配置run成功之后再整合,否則每次跑一遍狠費時。這也是反復強調的一個workspace,合理文件夾存放的好處之一,否則都沒法單獨拆分成job來測試。文章中有任何問題,歡迎探討指正。

最后來一張success:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM