Jenkins 持續集成平臺構建之經過svn提交代碼

1、簡介java

Jenkins是一個開源軟件項目,旨在提供一個開放易用的軟件平臺,使軟件的持續集成變成可能。linux

主要功能:web

一、持續的軟件版本發佈/測試項目。數據庫

二、監控外部調用執行的工做。apache

主要特色:json

一、易於安裝,只要把jenkins.war部署到servlet容器,不須要數據庫的支持windows

二、易於配置,全部配置都是經過其提供的web界面實現瀏覽器

三、集成RSS/E-mail經過RSS發佈構建結果或當構建完成時經過e-mail通知tomcat

四、生成JUnit/TestNG測試報告bash

五、分佈式構建支持Jenkins可以讓多臺計算機一塊兒構建/測試

六、文件識別:Jenkins可以跟蹤哪次構建生成哪些jar,哪次構建使用哪一個版本的jar等

七、插件支持:支持擴展插件,你能夠開發適合本身團隊使用的工具

2、安裝配置

一、環境介紹

Centos6.6 x86_64 IP: 10.0.90.27

二、安裝方式:

第一種:能夠war包安裝

第二種:也能夠下載rpm包安裝

第三種:能夠yum直接安裝(須要建立Jenkins.repo源)

官網連接:http://pkg.jenkins-ci.org/redhat/

方式以下:

sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins.io/redhat/jenkins.repo
sudo rpm --import 
yum install jenkins

本次實驗介紹直接war包安裝的方式,其餘方式有時間再介紹

三、軟件版本:

jdk      8.0.92
tomcat   8.0.36
Jenkins  2.9
SVN      1.6.11

將下載好的jdk、apache-tomcat、Jenkins.war 包上傳到服務器上,而後開始安裝

四、安裝jdk

#rpm -ivh jdk-8u92-linux-x64.rpm 
Preparing...                ########################################### [100%]
   1:jdk1.8.0_92            ########################################### [100%]
Unpacking JAR files...
        tools.jar...
        plugin.jar...
        javaws.jar...
        deploy.jar...
        rt.jar...
        jsse.jar...
        charsets.jar...
        localedata.jar...

五、安裝tomcat

#tar xf apache-tomcat-8.0.36.tar.gz -C /usr/local/
# cd /usr/local/
# ln -sv apache-tomcat-8.0.36/ tomcat
`tomcat' -> `apache-tomcat-8.0.36/'

六、安裝Jenkins

#nohup java -jar jenkins.war &   ##安裝的過程當中,會提示你記住一個密碼,記錄下來,以下
……………………
……………………
Jenkins initial setup is required. An admin user has been created and a password generated.
Please use the following password to proceed to installation:

fb4eea02635f4889865fd231a9837dd5

This may also be found at: /root/.jenkins/secrets/initialAdminPassword

*************************************************************
*************************************************************
*************************************************************
………………
………………
………………
wiki":"https://wiki.jenkins-ci.org/display/JENKINS/Subversion+Plugin"}
        at net.sf.json.util.JSONTokener.syntaxError(JSONTokener.java:499)
        at net.sf.json.JSONObject._fromJSONTokener(JSONObject.java:1043)
        at net.sf.json.JSONObject.fromObject(JSONObject.java:156)
        at net.sf.json.util.JSONTokener.nextValue(JSONTokener.java:348)
        at net.sf.json.JSONObject._fromJSONTokener(JSONObject.java:955)
        at net.sf.json.JSONObject._fromString(JSONObject.java:1145)
        at net.sf.json.JSONObject.fromObject(JSONObject.java:162)
        at net.sf.json.JSONObject.fromObject(JSONObject.java:132)
        at hudson.model.UpdateSite.updateData(UpdateSite.java:192)
        at hudson.model.UpdateSite.updateDirectlyNow(UpdateSite.java:176)
        at hudson.model.UpdateCenter.updateDefaultSite(UpdateCenter.java:2165)
        at jenkins.install.SetupWizard.init(SetupWizard.java:170)
        at jenkins.install.InstallState$3.initializeState(InstallState.java:105)
        at jenkins.model.Jenkins.setInstallState(Jenkins.java:971)
        at jenkins.install.InstallUtil.proceedToNextStateFrom(InstallUtil.java:94)
        at jenkins.model.Jenkins.<init>(Jenkins.java:888)
        at hudson.model.Hudson.<init>(Hudson.java:85)
        at hudson.model.Hudson.<init>(Hudson.java:81)
        at hudson.WebAppMain$3.run(WebAppMain.java:227)

Jun 15, 2016 10:43:10 PM hudson.WebAppMain$3 run
INFO: Jenkins is fully up and running

執行如上命令以後,就開始在瀏覽器訪問8080端口,在web界面訪問並安裝Jenkins,以下:

http://10.0.90.27:8080 

#若是不出問題,會提示你輸入一個字符串,就是剛纔要你記錄下來的字符串(也能夠根據提示到對應文件中查看),輸入以後,而後繼續,會出現「Customize Jenkins」界面,而後就按照默認的選擇(Install suggested plugins)繼續下一步,而後會看到提示安裝plugin,以下圖:

wKioL1dib5XDg4B9AADpAz0xgfU261.png-wh_50

安裝plugin須要花費一些時間,等這些plugin安裝好以後,會讓你建立一個admin用戶,你能夠自定義這個用戶,配置好用戶名、密碼郵箱,也能夠繼續使用admin用戶--(Continue as admin),本次實驗我是建立了一個普通用戶,建立好以後,點擊「Save and Finish」按鈕,會彈出「Jenkins is ready!」界面,而後點擊「Start using Jenkins」,就會看到安裝好的Jenkins界面了,以下:

wKiom1dqCAOghzyuAAAukx1aoYQ797.png-wh_50


用戶名admin,密碼就是剛纔設置的密碼,而後到Jenkins服務器上查看java進程,以下:

#netstat -tunlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      2632/sshd           
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      1076/master               
tcp        0      0 :::22                       :::*                        LISTEN      2632/sshd           
tcp        0      0 ::1:25                      :::*                        LISTEN      1076/master         
tcp        0      0 :::52236                    :::*                        LISTEN      6527/java           
tcp        0      0 :::8080                     :::*                        LISTEN      6527/java           
udp        0      0 :::33848                    :::*                                    6527/java           
udp        0      0 :::5353                     :::*                                    6527/java

而後能夠建立一個項目,點擊左側的「新建」,會出現以下界面:

wKioL1dicQ-hBL5kAADlZKCWfbc118.png-wh_50

而後輸入item name,下面的選項,根據狀況進行選擇,我這裏是選擇的是第一個。

3、安裝SVN

一、SVN運行方式:

SVN服務器有2種運行方式:獨立服務器和藉助apache運行,兩種方式各有利弊,能夠自行選擇

獨立服務器:  例如 svn://xxx.com/xxx

藉助於apache  例如 http://svn.xxx.com/xxx

這裏使用獨立服務器的方式運行

二、開始安裝(這裏直接yum安裝)

#yum install subversion -y

三、SVN代碼庫建立(自定義代碼庫路徑)

#mkdir -pv  /opt/svndata/
創建svn版本庫,自定義名字爲myproject
#svnadmin create /opt/svndata/myproject
執行此命令以後,自動創建myproject測試庫,查看/opt/svndata/myproject/目錄下面,包含了
conf  db  format hooks locks  README.txt,說明一個SVN庫已經創建了

四、配置代碼庫

首先進入第3步生成的conf下進行配置

#cd /opt/svndata/myproject/conf
配置用戶和密碼
#vi passwd
在 [users] 下面建立
格式:
用戶名 = 密碼
以下:
[users]
# harry = harryssecret
# sally = sallyssecret
xingliguang = liguang
保存退出!
權限控制authz配置,目的是設置哪些用戶能夠訪問哪些目錄,修改authz文件
#vi authz
[aliases]
# joe = /C=XZ/ST=Dessert/L=Snake City/O=Snake Oil, Ltd./OU=Research Institute/CN=Joe Average

[groups]                #組
# harry_and_sally = harry,sally
# harry_sally_and_joe = harry,sally,&joe
admin = xingliguang    #建立一個admin組,將xingliguang用戶加入該組
# [/foo/bar]
# harry = rw
# &joe = r
# * =
[/]                  #根目錄權限設置,就是「svndata」這個文件夾
xingliguang = rw     #賦予xingliguang用戶rw權限

[myproject:/]        #myproject:/,表示對myproject版本庫下的全部資源設置權限
@admin = rw          #admin組的用戶對myproject版本庫有讀寫權限
 
# [repository:/baz/fuz]
# @harry_and_sally = rw
# * = r

註釋:

[game2:/test]         #表示對版本庫game2中的test項目設置權限

[game2:/test/test1]     #表示對版本庫game2中的test項目的test1目錄設置權限,權限主體能夠是用戶組、用戶、或者是* ,用戶組在前面加@ ,* 表示所有用戶權限能夠是 w、r、rw和空 ,空表示沒有任何權限

五、svn配置文件的相關配置

#vi svnserve.conf   ##修改成以下:
[general]                     #匿名訪問的權限,可使read,write,none 
anon-access = none            #這裏不容許匿名訪問svn
auth-access = write           #是受權用戶有些權限
password-db = passwd          #密碼數據庫的路徑,也能夠自定義password-db = /path/to
authz-db = authz              #訪問控制文件
realm = My First SVN Server   #認證命名空間,subversion會在認證的時候提示

六、啓動SVN服務

#svnserve -d -r /opt/svndata/     ##若是沒有報錯,表示OK

查看端口

# netstat -tunlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      2632/sshd           
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      1076/master         
tcp        0      0 0.0.0.0:3690                0.0.0.0:*                   LISTEN      7309/svnserve       
tcp        0      0 :::22                       :::*                        LISTEN      2632/sshd           
tcp        0      0 ::1:25                      :::*                        LISTEN      1076/master         
tcp        0      0 :::52236                    :::*                        LISTEN      6527/java           
tcp        0      0 :::8080                     :::*                        LISTEN      6527/java           
udp        0      0 :::33848                    :::*                                    6527/java           
udp        0      0 :::5353                     :::*                                    6527/java

看到端口已經啓動OK。

啓動指令介紹:

此指令用於啓動svn服務,-d指明以守護模式運行,svn自動在3690端口監聽。3690是默認端口。可使用「--listen-port=」或者「--listen-host=」來指定其它端口。-r 選項用來指定svn服務的根目錄,這樣用戶就可使用相對路徑訪問,而不用提供完整路徑。

七、使用checkout導出文件

#svn checkout svn://127.0.0.1/myproject
Authentication realm: <svn://127.0.0.1:3690> My First SVN Server
Password for 'root':        ###回車便可
Authentication realm: <svn://127.0.0.1:3690> My First SVN Server
Username: xingliguang       ##輸入svn中建立的用戶名
Password for 'xingliguang':      ##輸入密碼

-----------------------------------------------------------------------
ATTENTION!  Your password for authentication realm:

   <svn://127.0.0.1:3690> My First SVN Server

can only be stored to disk unencrypted!  You are advised to configure
your system so that Subversion can store passwords encrypted, if
possible.  See the documentation for details.

You can avoid future appearances of this warning by setting the value
of the 'store-plaintext-passwords' option to either 'yes' or 'no' in
'/root/.subversion/servers'.
-----------------------------------------------------------------------
Store password unencrypted (yes/no)? yes
Checked out revision 0.

4、svn客戶端工具安裝

這裏介紹在windows物理機安裝TortoiseSVN客戶端(若是本身安裝的有開發工具,好比eclipse等,能夠自行配置),軟件包:TortoiseSVN-1.8.10.26129-x64-svn-1.8.11.1420009570.msi,雙擊安裝便可。
而後右鍵單擊圖標(一個小烏龜圖標),選擇「TortoiseSVN」--「Repo-browser」,在URL中輸入svn的地址,以下:

wKiom1didybAZJHxAAB1f4ASm-g031.png-wh_50

點擊OK,以後,會出現以下界面:輸入svn的用戶名和密碼

wKioL1dieMqDvxdnAAGYr-VVTTo329.png-wh_50

而後點擊OK,會出現以下界面:

wKiom1did2GipOD0AAFvy_09FIY088.png-wh_50

而後你就能夠在此界面操做(右鍵單擊,會看到不少功能),建立代碼庫目錄,上傳文件等。

wKioL1diedGBt3CWAABBY71CkW0479.png-wh_50

點擊OK,彈出以下界面:能夠添加一些Message,做爲備註信息,而後點擊OK便可。

wKioL1dieh6zANw1AAB2FOPpIfM995.png-wh_50

就會看到剛纔建立的目錄了

wKioL1dien3wadpcAACznU2oC5Y719.png-wh_50

而後將一些代碼上傳到wphr_sys目錄中,選中wphr_sys項目,右鍵單擊,選擇「Add Folder」,會彈出windows方框,選中須要上傳的目錄(這裏是server目錄,下面有一個cat.tar.gz 包和一個cat.txt文件)便可,以下

wKiom1diemSArx0WAACilDQPMp8968.png-wh_50

點擊OK,開始上傳到svn,完成以後,查看:

wKiom1digOvh7AsDAADUoi4TLkg264.png-wh_50

5、Jenkins經過svn拉取代碼並進行代碼構建

一、首先建立一個項目,這裏選擇的是第一個類型的,

wKioL1difjHhbXSRAADdvDozqPg608.png-wh_50

點擊OK以後,會彈出以下界面:

wKiom1diffHyAfTfAAC6YBoT4uM411.png-wh_50

項目名稱:自定義,名稱最好能夠通俗易懂,描述:可寫也可不寫,代碼管理:配置svn的地址以及能夠訪問svn的用戶名和密碼,點擊Jenkins來添加以下:

wKioL1dif-HS5TXEAABVfVAvihE571.png-wh_50

點擊"Add",而後查看:

wKioL1digHyRVLQeAABqWmy-Yt8506.png-wh_50

保存便可。

二、構建以前,到Jenkins服務器查看

#cd /root/.jenkins/jobs
#ll         ##能夠看到建立的項目Test_project已經存在了
total 12
drwxr-xr-x 4 root root 4096 Jun 17 00:06 House_SOA
drwxr-xr-x 3 root root 4096 Jun 17 02:18 Test_project
drwxr-xr-x 5 root root 4096 Jun 17 00:25 yfykapp
# ll Test_project/     ##不過此目錄中就只有生成的2個文件,等過會構建以後再查看此目錄。
total 8
drwxr-xr-x 2 root root 4096 Jun 17 02:30 builds
-rw-r--r-- 1 root root 1337 Jun 17 02:30 config.xml

三、開始構建,以下,構建過的項目,前面會顯示淡藍色圓球,和時間,沒有構建過的項目是灰色圓球和提示「沒有」。

wKioL1digkrBSJy8AABNd-enotA613.png-wh_50

單擊「Test_project」,會看到以下頁面:

wKioL1digrbzdoYNAAB3zgdONis456.png-wh_50

而後點擊「當即構建」,會出現一個控制檯輸出小球;

wKioL1dig0TR4cXOAAB7cj9Zg0M227.png-wh_50

點擊上圖紅框中的「#1」,會彈出另外一個頁面,而後點擊此頁面左側的「Console Output」查看構建日誌,以下:

wKioL1dig-ahyX_3AAB9-YSRxyE213.png-wh_50

看到最後的SUCCESS,就表示成功了,而後再到Jenkins目錄查看

#/root/.jenkins/jobs
# ll Test_project/workspace/server/
total 8
-rw-r--r-- 1 root root 1651 Jun 17 02:39 cat.tar.gz
-rw-r--r-- 1 root root   23 Jun 17 02:39 cat.txt

能夠看到剛纔咱們經過svn上傳的2個文件已經在這裏了,說明構建成功了。

6、Jenkins+maven,構建jar格式的代碼包

一、安裝maven

到官網下載:https://maven.apache.org/download.cgi

本次實驗使用的版本是3.3.9

開始安裝:

#tar xf  apache-maven-3.3.9-bin.tar.gz -C /usr/local/
#cd /usr/local
#ln -sv apache-maven-3.3.9 maven
設置環境變量
#vi /etc/profile   #在末尾添加
##maven
MAVEN_HOME=/usr/local/maven
export MAVEN_HOME
export PATH=${PATH}:${MAVEN_HOME}/bin
執行source,使設置生效
#source /etc/profile
查看maven信息
#mvn -v
Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-11T00:41:47+08:00)
Maven home: /usr/local/maven
Java version: 1.8.0_92, vendor: Oracle Corporation
Java home: /usr/java/jdk1.8.0_92/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "2.6.32-504.el6.x86_64", arch: "amd64", family: "unix"

到這裏maven就安裝OK了。

二、而後經過Jenkins構建jar包

在Jenkins的web界面設置maven,選擇左側的「系統管理」--「Global Tool Configuration」,會看到以下界面:

wKioL1djw57yUk5yAABtnOebYrY845.png-wh_50

選擇「Maven安裝」,配置爲以下,而後保存。

wKioL1djw9jiv4zoAAAZx9kNzpo063.png-wh_50


而後到具體的某一個項目中配置maven,依yfykapp項目爲例子,選擇yfykapp項目,而後選擇「配置」,拉到「構建」那裏,會看到「增長構建步驟」下拉框,以下:

wKioL1djxL3znL7IAAAdWCwXDmA357.png-wh_50

選擇「Invoke top-level Maven targets」,並選擇「高級」,設置爲以下(若是想自定義也能夠):

wKiom1djxN-A63kKAAB26gyfkUw620.png-wh_50

而後「Apply」--「保存」便可。

注意:若是想在不改變源代碼的基礎上反覆構建,須要修改選項,改成以下:

wKiom1djxW3QzUCRAABqYrhFJAA789.png-wh_50

三、上傳代碼(代碼是從一個朋友哪裏copy的)到svn,上傳以後,以下:

wKiom1djxjyRhVaHAADQTPInPGQ530.png-wh_50

注:必定要有pom.xml文件,不過通常java的代碼開發人員會本身定義這個文件。

而後開始在Jenkins界面進行構建,這裏以yfykapp項目爲例子:

選擇「yfykapp」--「當即構建」,就開始了,若是構建不成功,在Build History下面會提示紅色小球;構建成功的,會提示淡藍色小球,點擊進去就能夠查看構建日誌,來排除問題。

wKioL1djyHyB5QCWAADvUE_zJ9M615.png-wh_50

選擇「#11」--再選擇配置下面的「default」--選擇左側的「Console Output」,就會看到控制檯輸出的本次構建過程的所有信息,這裏只貼出一部分信息:

wKioL1djyYSi-uSEAABbSXtt-4g165.png-wh_50

看到如上的信息,表示構建成功了。

初次配置Jenkins,不足之處請多多指出!

相關文章
相關標籤/搜索