在上一篇講述瞭如何在CentOS7中安裝並使用代碼質量管理平臺SonarQube6.4,在上一篇中講到了SonarQube支持多種方式來分析代碼質量,其中有一種方式之一就是在持續集成工具中來自動完成代碼質量分析,本篇就是繼續上一篇來說述如何安裝並使用Jenkins。Jenkins的前身是Hudson,在寫做本文時Jenkins的最新版本爲2.84.git
軟件準備:apache
jenkins.war:Jenkins的部署文件,下載地址:http://mirrors.jenkins.io/war/2.84/jenkins.war瀏覽器
Microsoft Build Tools 2015:無需安裝VisualStudio,僅安裝本軟件便可使用MSBuild來編譯Visual Studio建立的項目文件或解決方案文件,下載地址:https://www.microsoft.com/en-us/download/details.aspx?id=48159tomcat
因爲是直接下載的war文件,因此無需編譯,只需將其放在Java的Web容器下便可。因在本系列中已經安裝配置過Tomcat8.5,而且Tomcat的工做路徑爲:/usr/local/apache-tomcat-8.5.15/,所以jenkins.war放入/usr/local/apache-tomcat-8.5.15/文件夾,而後在瀏覽器中訪問便可。服務器
本人的CentOS7虛擬機IP爲192.168.60.198,所以在外部能夠經過網址http://192.168.60.198/jenkins/訪問,如下是訪問界面:微信
打開/root/.jenkins/secrets/initialAdminPassword將文件中內容複製到文本框中而後繼續,以下圖所示:網絡
這裏選擇安裝建議插件,選擇後以下圖所示:maven
這個安裝過程視網絡狀況而定,我的感受若是是在美國的週末時間會比較快,而在美國的工做日的白天下載速度很超級慢。ide
建議插件安裝完成以後,出現建立管理員的界面,以下圖所示:工具
輸入帳戶信息便可完成Jenkins的安裝和第一個管理員的設置。
注意:點擊「Continue as admin」連接則跳過管理員設置,管理員帳戶爲「admin」,管理員密碼爲/root/.jenkins/secrets/initialAdminPassword中的內容;點擊「Saveand Finish」則保存當前頁面填寫的內容。
Jenkins提供了至關多的插件以支持各類複雜場景,從「Jenkins– 系統管理 – 管理插件」中便可看到已安裝和可安裝的插件,以下圖所示:
爲便於演示,這裏以本人在開源中國上的git版本庫做爲演示。
爲了演示Jenkins對.NET項目的支持,這裏我在開源中國上建立了一個.NET項目,網址是:https://gitee.com/zhoufoxcn/GoodAppCodeMaker.git,若是持續集成項目中有.NET項目,建議在Windows上安裝Jenkins。安裝過程和在CentOS7上同樣。
點擊在上一張圖片中所示的「全局工具配置」連接,找到MSBuild節點,以下圖所示:
我使用的VS2015,因此MSBuild的版本是14.0。若是不想完整安裝Visual Studio,能夠安裝MSBuild Tool,在這裏我安裝的就是Microsoft Build Tools 2015,下載地址爲:https://www.microsoft.com/en-us/download/details.aspx?id=48159
安裝後的路徑就是C:\Program Files (x86)\MSBuild\14.0,MSBuild.exe所在路徑爲:C:\ProgramFiles (x86)\MSBuild\14.0\Bin,也就是上圖中「Path to MSBuild」一欄中的值。
爲了演示Jenkins對Java項目的支持,在這裏使用我在開源中國上的一個項目,網址是:https://gitee.com/zhoufoxcn/CodeGenerator.git,這個Java項目使用了Maven。因此須要下載Maven,下載網址爲:http://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.5.0/binaries/apache-maven-3.5.0-bin.tar.gz,將下載下來的壓縮包文件解壓到一個路徑下,而後記住這個路徑,下面立刻會用到。
點擊在上一張圖片中所示的「全局工具配置」連接,找到Maven節點配置相關信息,以下圖所示:
上圖中「MAVEN_HOME」一欄的值即爲解壓後Maven的路徑。搞過Java的朋友都知道,Java中會常用環境變量存儲一些工做路徑,如JAVA_HOME、CLASSPATH、CATALINA_HOME等。
爲了驗證咱們的配置可以正常工做,這裏以剛剛提到的兩個項目來驗證(其實原本還想提一下.net core2.0的項目的,這類項目能夠在Linux下運行,後來想一想和Java項目相似就沒有再囉嗦了)。
兩個示例項目的git版本庫地址:
CodeGenerator :https://gitee.com/zhoufoxcn/CodeGenerator.git,使用了Maven的Java項目。
GoodAppCodeMaker :https://gitee.com/zhoufoxcn/GoodAppCodeMaker.git,使用VS2010開發的C#項目。
建立一個持續集成項目分General(通用)、源碼管理、構建觸發器、構建環境、構建和構建後操做六個部分。充分利用好這幾個部分,能夠實現不少強大的功能,而且還省了很多精力。
在首頁點擊「新建」連接,以下圖所示:
選擇「構建一個自由風格的軟件項目」,而後填寫項目的名稱,點擊「OK」後出現以下界面:
General部門通常狀況下沒有太多須要注意的,填寫一些用於識別和描述的信息以後便可設置源碼管理部分。
Jenkins支持常見的源代碼管控系統,如CVS/SVN/Git等。因爲示例項目使用了git做爲源代碼管控工具,因此須要填寫相關的信息,如git版本庫地址、認證信息、源代碼分支信息。第一次使用的時候由於沒有版本庫認證信息,須要建立,點擊「Credentials」旁邊的「Add」按鈕,以下圖所示:
下圖是我爲開源中國建立的Git認證憑據截圖:
在本項目中構建觸發器和構建環境中沒有特別設置,以下圖所示(在某些項目中可能會要求每次提交代碼後就編譯項目或者天天定時編譯項目,均可以在構建觸發器中設置):
而後設置構建相關的參數,好比選擇咱們配置好的Maven及指定Maven的goals,以下圖所示:
建立C#的持續集成項目和建立Java的持續集成項目沒有太大的區別,好比在源代碼管理部分除了git版本庫URL不同以外,重用了身份憑據信息,以下圖所示:
此外,由於編譯Java和C#兩種不一樣語言的項目方式不一樣,因此在構建節點有些不太同樣。在這裏選擇的是MSBuild,同時須要制定編譯時的項目文件,基於解決方案或是基於項目編譯都可,本人這裏選擇是編譯整個解決方案,即「MSBuild Build File」來指定,同時用「Command Line Arguments」來指定編譯時的參數,這個能夠在命令行下查看MSBuild支持哪些參數,分別有什麼意義。
至此,建立了兩個持續集成項目,在系統開始頁面便可看到剛剛建立的項目,點擊最右側的圖標便可當即構建項目。
這裏須要說明的是若是C#項目使用了NuGet或者Java項目使用了Maven,請確保安裝了Jenkins的服務器可以下載項目引用的dll或者Jar,不然會構建失敗。
點擊Jenkins系統左側的「任務歷史」連接,能夠查看歷次以來的構建狀況,以下圖所示:
若是某次編譯出戳,能夠點擊該次構建右側的圖標查看控制檯輸出(上圖中用紅色箭頭標識),界面以下圖所示:
看上圖就是由於Maven沒有配置好致使沒法編譯。
另外,在Linux中/{User_Name}/.jenkins/這個目錄會保存不少Jenkins的一些中間過程信息(若是在Windows系統中則爲C:\Users\{User_Name}\.jenkins\,{User_Name}爲登陸到系統中的名字),好比在Jenkins中遷出後會保存到/{User_Name}/.jenkins/workspace/中(Windows中對應爲C:\Users\{User_Name}\.jenkins\workspace\),若是是jar或者exe文件可將其複製到/{User_Name}/.jenkins/userContent/中(Windows中對應爲C:\Users\{User_Name}\.jenkins\userContent\),這樣虛擬機就能夠經過http://192.168.60.168:8080/jenkins/userContent/來訪問(虛擬機內部則爲:http://localhost:8080/jenkins/userContent/)。
本文講述瞭如何使用Jenkins來對項目持續集成,分別以Java和C#兩類常見的項目類型作了演示。因爲時間關係,僅僅簡單講述瞭如何配置和建立基本的持續集成項目。其實利用Jenkins除了上面演示的功能以外,還能夠在構建完成後將失敗或者成功的消息發郵件通知到相關人員,甚至自動部署到服務器(通常是部署到測試環境供QA測試,直接發佈到正式服務器仍是要慎重一點)。
周金橋
2017/10/15
聲明:本文首發於本人我的微信訂閱號:zhoujinqiaoIT,其後會同時在本人的CSDN、51CTO及oschina三處博客發佈,本人會負責在此四處答疑。