使用jenkins进行持续集成

安装JDK

        因为jenkins需要java环境,需要提前安装JDK。

        下载JDK后解压

1
2
[root@localhost ~]# tar zxvf jdk-8u111-linux-x64.tar.gz
[root@localhost ~]# mv jdk1.8.0_111/ /usr/local/

        编辑文件

1
[root@localhost ~]# vim /etc/profile.d/java.sh

        加入配置

1
2
3
4
5
6
JAVA_HOME=/usr/local/jdk1.8.0_111/
JAVA_BIN=/usr/local/jdk1.8.0_111/bin
JRE_HOME=/usr/local/jdk1.8.0_111/jre
PATH=$PATH:/usr/local/jdk1.8.0_111/bin:/usr/local/jdk1.8.0_111/jre/bin
CLASSPATH=/usr/local/jdk1.8.0_111/jre/lib:/usr/local/jdk1.8.0_111/lib:/usr/local/jdk1.8.0_111/jre/lib/charsets.jar
export JAVA_HOME JAVA_BIN JRE_HOME PATH CLASSPATH

        然后进入初始化环境变量

1
[root@localhost ~]# source /etc/profile.d/java.sh

        如果JDK配置成功,下面的名利个可以看到java版本

1
2
3
4
[root@localhost ~]# java -version
java version "1.8.0_111"
Java(TM) SE Runtime Environment (build 1.8.0_111-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.111-b14, mixed mode)

下载安装jenkins

        首先,从jenkins官方网站下载最新的包。

        选择Red Hat/CentOS,可以根据官网提示安装

01

1
2
3
wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat/jenkins.repo
rpm --import https://pkg.jenkins.io/redhat/jenkins.io.key
yum install jenkins

        也可以下载相应的rpm包进行安装

1
2
3
4
5
[root@localhost ~]# rpm -ivh jenkins-2.78-1.1.noarch.rpm
警告:jenkins-2.78-1.1.noarch.rpm: 头V4 DSA/SHA1 Signature, 密钥 ID d50582e6: NOKEY
准备中... (################################# [100%]
正在升级/安装...
1:jenkins-2.78-1.1 ################################# [100%]

        另外也可以下载war包,只需要运行命令

1
[root@localhost ~]# java -jar jenkins.war

        jenkins就启动成功了!war包自带jetty服务器,剩下的工作全部在浏览器中进行。

防火墙设置

1
[root@localhost ~]# systemctl stop firewalld

        或者

1
2
3
firewall-cmd –zone=public –add-port=8080/tcp –permanent
firewall-cmd –zone=public –add-service=http –permanent
firewall-cmd –reload

启动jenkins服务

        启动jenkins服务

1
[root@localhost ~]# /etc/init.d/jenkins start

        启动失败

1
2
3
[root@localhost ~]# /etc/init.d/jenkins start
Starting jenkins (via systemctl): Job for jenkins.service failed because the control process exited with error code. See "systemctl status jenkins.service" and "journalctl -xe" for details.
[失败]

        出错原因是jdk未安装或jenkins配置文件中没有找到jdk的路径

        解决办法是安装jdk,修改jenkins启动脚本,配置jdk位置

1
[root@localhost ~]# vim /etc/init.d/jenkins

        添加内容

1
/usr/local/jdk1.8.0_111/bin/java

02

        如果错误提示

1
2
[root@localhost ~]# /etc/init.d/jenkins start
Starting jenkins (via systemctl): Warning: jenkins.service changed on disk. Run 'systemctl daemon-reload' to reload units.

        使用命令解决

1
[root@localhost ~]# systemctl daemon-reload

        再次启动jenkins

1
2
[root@localhost ~]# /etc/init.d/jenkins restart
Restarting jenkins (via systemctl): [ 确定 ]

        查看是否启动

1
2
[root@localhost ~]# netstat -natpu|grep 8080
tcp6 0 0 :::8080 :::* LISTEN 5041/java

访问jenkins

        在浏览器中输入 http://ip:8080

        如果安装完成并成功启动会有下图

03

        第一次启动jenkins时,出于安全考虑,jenkins会自动生成一个随机的密码。查看/var/lib/jenkins/secrets/initialAdminPassword这个文件

1
2
[root@localhost ~]# cat /var/lib/jenkins/secrets/initialAdminPassword
2bdb5321eac84842b6e37a08758d3654

        将密码复制出来,粘贴,继续进入配置页面

04

        这里可以根据自己需求选择推荐插件或者自己选择插件安装。如果执行默认的安装,jenkins就自动配置好Maven、git等常用插件。

05

        最后,创建一个admin用户,完成安装。

06

07

08

        用管理员账号登录Jenkins后,第一次使用前,需要在“系统管理”->“Global Tool Configuration”->“Maven”中新增一个Maven,直接输入一个名字,选中“自动安装”,Jenkins会自动下载并安装Maven

09

10

        如果不成功就在“管理插件”里边选择“可选插件”,安装Maven Integration plugin

11

        然后,在Jenkins首页选择“新建”,输入名字,选择“构建一个maven项目”

12

        在配置页中,源码管理选择Git,填入地址

13

        默认使用master分支。如果需要口令,在Credentials中添加用户名/口令,或者使用SSH Key。

        构建触发器指定了触发一次构建的条件。推荐使用最简单的配置“Poll SCM”,它的意思是,定时检查版本库,发现有新的提交就触发构建。这种方式对git、SVN等所有版本管理系统都是通用的。

        在日程表中填入

1
* * * * *

14

        表示每分钟检查一次。如果觉得太频繁,可以该成“每3分钟检查一次”

1
*/3 * * * *

        在“Build”中,默认的Root POM是pom.xml。如果pom.xml不在根目录下,就填入子目录,例如:wxapi/pom.xml

        在Goals and options中,填入需要执行的mvn命令:clean package,Jenkins将执行如下命令

1
mvn clean package

        特殊参数也在这里填写,如-DskipTests=true clean package

        保存后,就可以执行自动化构建了。

        点击一个构建任务,可以在Console Output中看到控制台详细输出,便于出错排查

15

如何部署

        如果要部署构建好的war包,可以在Post Steps中填上shell命令,直接用脚本部署。

        另一种方式是创建另外一个构建项目,手动触发部署。

        无论用哪种方式,都是为了确保编译、部署是通过CI服务器完成的,而不是某台开发机器。

如何创建Linux服务

        有了Jenkins,就可以在内网或者租用一台EC2服务器来搭建CI环境。因为不想每次登录到Linux去启动Jenkins,也不想写脚本来启动服务。推荐安装JDK后,配合supervisor,把Jenkins直接变成一个服务。

        可以在Linux上创建一个ci用户,然后,用supervisor启动并指定9001端口:

1
2
3
4
5
6
7
8
9
# /etc/supervisor/conf.d/ci.conf
[program:ci]
command=java -jar /home/ci/jenkins.war --httpPort=9001
user=ci
autostart=true
autorestart=true
startsecs=30
startretries=5

        Jenkins默认在当前用户的主目录下创建.jenkins目录,所有的配置文件、数据库都存放在里面,只需要备份这个目录就备份了整个CI配置。

        这样,一个CI环境就搭建完毕。