一、简介

Jenkins是一个开源软件项目,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。

主要功能:

1、持续的软件版本发布/测试项目。

2、监控外部调用执行的工作。

主要特点:

1、易于安装,只要把jenkins.war部署到servlet容器,不需要数据库的支持

2、易于配置,所有配置都是通过其提供的web界面实现

3、集成RSS/E-mail通过RSS发布构建结果或当构建完成时通过e-mail通知

4、生成JUnit/TestNG测试报告

5、分布式构建支持Jenkins能够让多台计算机一起构建/测试

6、文件识别:Jenkins能够跟踪哪次构建生成哪些jar,哪次构建使用哪个版本的jar等

7、插件支持:支持扩展插件,你可以开发适合自己团队使用的工具

二、安装配置

1、环境介绍

Centos6.6 x86_64 IP: 10.0.90.27

2、安装方式:

第一种:可以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包安装的方式,其他方式有时间再介绍

3、软件版本:

jdk      8.0.92
tomcat   8.0.36
Jenkins  2.9
SVN      1.6.11

将下载好的jdk、apache-tomcat、Jenkins.war 包上传到服务器上,然后开始安装

4、安装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...

5、安装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/'

6、安装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,下面的选项,根据情况进行选择,我这里是选择的是第一个。

三、安装SVN

1、SVN运行方式:

SVN服务器有2种运行方式:独立服务器和借助apache运行,两种方式各有利弊,可以自行选择

独立服务器:  例如 svn://xxx.com/xxx

借助于apache  例如 http://svn.xxx.com/xxx

这里使用独立服务器的方式运行

2、开始安装(这里直接yum安装)

#yum install subversion -y

3、SVN代码库创建(自定义代码库路径)

#mkdir -pv  /opt/svndata/
建立svn版本库,自定义名字为myproject
#svnadmin create /opt/svndata/myproject
执行此命令之后,自动建立myproject测试库,查看/opt/svndata/myproject/目录下面,包含了
conf  db  format hooks locks  README.txt,说明一个SVN库已经建立了

4、配置代码库

首先进入第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和空 ,空表示没有任何权限

5、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会在认证的时候提示

6、启动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服务的根目录,这样用户就可以使用相对路径访问,而不用提供完整路径。

7、使用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.

四、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

五、Jenkins通过svn拉取代码并进行代码构建

1、首先创建一个项目,这里选择的是第一个类型的,

wKioL1difjHhbXSRAADdvDozqPg608.png-wh_50

点击OK之后,会弹出如下界面:

wKiom1diffHyAfTfAAC6YBoT4uM411.png-wh_50

项目名称:自定义,名称最好可以通俗易懂,描述:可写也可不写,代码管理:配置svn的地址以及可以访问svn的用户名和密码,点击Jenkins来添加如下:

wKioL1dif-HS5TXEAABVfVAvihE571.png-wh_50

点击"Add",然后查看:

wKioL1digHyRVLQeAABqWmy-Yt8506.png-wh_50

保存即可。

2、构建之前,到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

3、开始构建,如下,构建过的项目,前面会显示淡蓝色圆球,和时间,没有构建过的项目是灰色圆球和提示“没有”。

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个文件已经在这里了,说明构建成功了。

六、Jenkins+maven,构建jar格式的代码包

1、安装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了。

2、然后通过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

3、上传代码(代码是从一个朋友哪里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,不足之处请多多指出!