简介

Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件项目可以进行持续集成,本文将记录在 Linux环境下安装及配置 Jenkins

参考资料

Jenkins 下载地址

简介及搭建

简介

Jenkins是一个用Java编写的开源的持续集成工具。官方网站:https://jenkins.io/
Jenkins能实时监控持续集成过程中所存在的问题,提供详细的日志文件和提醒功能,还能用图表的形式,形象地展示项目构建的趋势和稳定性。

目的

Jenkins自动化部署可以解决集成、测试、部署等重复性的工作,工具集成的效率明显高于人工操作;并且持续集成可以更早的获取代码变更的信息,从而更早的进入测试阶段,更早的发现问题,这样解决问题的成本就会显著下降:持续集成缩短了从开发、集成、测试、部署各个环节的时间,从而也就缩短了中间出现的等待时间;持续集成也意味着开发、集成、测试、部署得以持续

环境配置

环境说明

  • 腾讯云:linux centos7.6 64位

  • Jenkins版本:2.235.5

  • Email Extension Plugin版本:2.75

  • jdk版本:1.8.0_221

  • git版本:2.28.0

  • maven版本:3.6.3

  • allure版本:2.12.1

    注:以上除allure外其它程序均安装至linux服务器上,并配置环境变量

安装JDK1.8+

下载

  • JDK 下载地址 官网需要注册登录,不方便的可以自行百度下载,版本不要差太多(当时是运维发的一个 jdk-8u221-linux-x64.tar.gz)
  • 注:jdk需要1.8+ 不然Jenkins可能会出错

jdk下载

上传至服务器

本步骤的目的是为了把下载的 jdk 包上传到服务器,这里提供两种方法,也可以通过自己的方法,只要能传上去就行

方式一

  • 通过xftp直接拖取文件(不做演示,因为我没装xftp,哈哈哈)

xftp上传jdk

方式二

  • 通过 linux 命令行方式 上传文件
1
2
3
4
#cd:	切换目录
#rz: 文件上传(如果提示报错或者找不到是因为没有安装lrzsz输入以下命令安装)
#安装lrzsz
yum -y install lrzsz

rz 命令上传文件

解压

  • 本步骤的目的是将上传的 tar.gz 的包进行解压
1
2
#ls:展示当前文件夹内的文件
#tar -xzvf:解压文件名

解压jdk 包

配置环境变量

  • :wq(冒号wq):保存退出
  • :q(冒号q):直接退出(如果没有修改文件可以直接退出)
  • :q!(冒号q!):强制退出不保存(如果改错了可以用这个)
1
2
3
4
5
6
7
8
9
10
11
12
#用vim编辑器打开/etc/profile文件
vim /etc/profile


#编辑打开的文件,没有就新增 JAVA_HOME 换成自己刚才解压后的目录
JAVA_HOME=/usr/local/jdk1.8.0_221
JAVA_BIN=$JAVA_HOME/bin
JRE_HOME=$JAVA_HOME/jre
JRE_BIN=$JRE_HOME/bin
PATH=$JAVA_BIN:$JRE_BIN:$PATH
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
export JAVA_HOME JRE_HOME PATH CLASSPATH

配置环境变量

  • 让刚才修改的配置立即生效
1
2
3
4
#让配置立即生效
source /etc/profile
#查看java版本
java -version

配置立即生效

启动 Jenkins

  • 方法一:服务器安装tomcat,并放置Jenkins.war,启动tomcat
  • 方法二:用java启动(这样就不需要安装和启动tomcat了,省服务器资源 推荐)

方式一

  • 本地解压tomcat,把war包放到webapps内,运行bin目录下的.bat处理文件,这个时候DOS系统会自己跑起来,会先检测到war包,然后配置环境,如果安装启动成功就可以了

tomacat 启动 jenkins

Jenkins 解锁密码路径

启动成功提示

方式二

  • 前提是配置好 java 和下载好 jenkins.war 包了
1
2
# oohup启动命令
nohup java -jar -Xms512m -Xmx1g -Xmn512m jenkins.war --httpPort=9000 &

nohup 后台启动 jenkins

访问 Jenkins

解锁登录

  • 当我们通过 Tomcat 或者 nohup java -jar 的方式 启动好 jenkins 后便可以开始访问及配置了(如果是本地部署的访问 127.0.0.1 服务器部署的访问对应 ip)
  • 第一次启动有个密码校验,会在 jenkins 的启动日志中有自己找下
  • 以下的图是最开始学 Jenkins的时候截取的,所以是在 windows 上的,但是后面网页上的操作都是一样的所以不重新截图了

访问 jenkins

  • IP、端口和启动的保持一致

配置实例

  • 如果点击保持并完成以后页面出现空白页需要修改jenkins的config配置文件
1
vim /root/.jenkins/config.xml

解锁后空白页解决方案

升级站点

更换站点 url

全局环境配置

  • 指定我们的 jdk 的绝对路径(linux也是一样)
  • maven 如果本地有安装就指定,没有安装勾选自动安装(如果没有安装可以点自动安装,截图中的是针对本地已经安装了的

全局环境配置1

全局环境配置2

安装插件

  • 是在是找不到截图了,本步骤的目的就是需要装一些插件,通过这些插件去实现一些 jenkins 没有的功能(如果这些插件装过了就不用管)
  • 安装插件,因为我们要调用svn,邮箱等等服务,必须要依赖插件
  • 安装插件:Maven Integration Groovy Label Assignment HTML Publisher Email Extension Subversion 有可能插件安装不起来,因为你的war包和当前插件版本匹配,可以更新为最新war包

新建项目及配置

新增项目

  • 创建一个 maven 项目用来构建我们的工程

构建maven项目

源码管理

  • 配置我们的项目源代码的地址及账号密码信息

配置 git信息

Build配置

Build配置

构建触发器

  • 所谓的触发器,就是满足什么条件去自动触发,比如每天早上 7 点开始自动去执行,或者当我们自己的 git 仓库或者开发的 git 仓库发生了 push 提交代码

  • 时间表达式:*/5 * * * * 一共5个值

    • Minute:分钟值 (0-59)
    • Hour :时钟值 (0-23)
    • Dom :日期 (1-31)
    • Month :月份 (1-12)
    • Dow : 一周中的某一天(0-7),0和7都代表的是礼拜天
  • 每个字段的值还可以单独配置

  • *:所有的值 如果在分钟数就是每分钟,日期值上就是每天

  • M-N :指定一个范围区间的值 如果在分钟值上,就是0-10分钟之间

  • M-N/X : 1-30/5(如果在分钟数就可以理解为1-30分钟的时候每隔5分钟)

  • */x: */5 如果在分钟值就是每隔5分钟,时钟值就是每隔5小时

构建触发器

邮件配置

  • 配置邮箱的目的是为了让我们项目构建后给我们发邮件通知我们构建成功与否
  • 发邮件需要装 Email Extension Plugin 插件

获取smtp服务密码步骤

  • QQ邮箱为例
  • 进入QQ邮箱主页,点击设置
  • 找到“账户”页签,在开启服务下面,找到IMAP/SMTP服务对应的“开启”按钮点击,然后–》申请密保
  • 按照弹窗里的提示给腾讯发送短信,你就会收到一个授权码,这个就是密码(记得先保存好授权码)

smtp授权码

邮件信息配置

  • 配置系统管理员的邮箱 发件人的邮箱 收件人的邮件

配置系统管理员邮箱

发件人邮箱配置

  • 如果邮箱发生用问题可在构建的控制台输出中 debug里面看日志

开启 debug 模式

构建后操作

  • 我们期望构建后给我们发邮件,上面配置的只是发件人的,现在要配置接收人的邮箱账号
  • 当时我出现过按照老师的教程配置了控制台也提示邮件发送成功,但是就是收不到最后一番折腾:https://issues.jenkins-ci.org/browse/JENKINS-34731

构建后操作配置收件人和模板 1

构建后操作配置收件人和模板 2

报告模板

1
<hr> (本邮件是程序自动下发的,请勿回复!)<br><hr> 项目名称:$PROJECT_NAME<br><hr> 构建编号:$BUILD_NUMBER<br><hr> 构建状态:$BUILD_STATUS<br><hr> 触发原因:${CAUSE}<br><hr> 测试报告:<a href="http://49.234.62.82:9090/job/tb_api_auto/allure">http://49.234.62.82:9090/job/tb_api_auto/allure/</a> <br><hr> 构建日志地址:<a href="${BUILD_URL}console">${BUILD_URL}console/</a><br><hr> 构建地址:<a href="$BUILD_URL">$BUILD_URL</a><br><hr> 构建报告:<a href="${BUILD_URL}testReport">${BUILD_URL}testReport/</a><br><hr> 变更集:${JELLY_SCRIPT,template="html"}<br><hr/>

扩展

公司网络匿名访问

  • 在我们发出的邮件中往往有很多的资源,提供公司的其它人员访问例如我们配置在邮件里面的allure报表,pom,日志等以下内容,但是访问需要对方登陆
  • 理论上来说是合理的,登录校验,但是有些领导他可能不需要这个账号,或者只是自己在用没给别人建立账号
  • 于是我们就必须去权限控制里面开启匿名用户的read权限,但是这样又会存在一定的风险性,于是通过访问权限控制+服务器安全组策略进行控制
  • 匿名访问只是针对一部分功能的查看权限,执行权限必须要登录的

开启匿名访问权限

  • Jenkins首页—>Manage Jenkins—->Security—>Configure Global Security

配置全局安全性

开启匿名访问

服务器安全组配置

  • 设定只允许公司的IP访问
  • 上面我们已经实现了匿名用户的访问读取权限,但是我们又不想完全的暴露在互联网上,解决办法就是给服务器设置安全组,针对这个端口只允许固定的ip访问,这样就能保证只有你们公司的人才能看到了当然,你自己回到家也看不了,那么就把家里的ip也配置上吧(我这里就以我腾讯云的服务器为例)

入站策略

Linux开机自启Jenkins

  • 这里做的是通过 java -jar 方式直接启动的,如果是 tomcat 的话原理一样的,改成开机自动启动 tomcat,然后就相当于启动了 jenkins
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#进入etc/rc.local后添加启动命令 (确保该文件有执行权限X)
vim /etc/rc.local

#jenkins开机启动 /ada/jenkins---jenkins.war包所在位置
cd /ada/jenkins && nohup java -jar -Xms600m -Xmx1g -Xmn512m jenkins.war --httpPort=9090 &
#重启服务器
reboot

#查看服务是否启动成功
ps -ef|grep jenkins

#出现如下表示成功
[root@VM_0_16_centos jenkins]# ps -ef|grep jenkins
root 1025 1024 3 16:58 ? 00:00:28 java -jar -Xms600m -Xmx1g -Xmn512m jenkins.war --httpPort=9090
root 3602 1852 0 17:13 pts/1 00:00:00 grep --color=auto jenkins

#情况二:如果开机启动不成功,复制我们cd /ada/jenkins.....这条命令在外面任意位置看是否能启动成功,如果启动成功表示命令没有问题
1.然后检查我们格式是否有问题
2.添加java软连接:ln -s /ada/java/jdk1.8.0_221/bin/* /usr/bin/ ----/ada/java/jdk1.8.0_221(java的安装路径/bin/*就是把里面所有的命令都添加到/user/bin里面)
3.echo $PATH查看
[root@VM_0_16_centos ~]# echo $PATH
/ada/java/jdk1.8.0_221/bin:/ada/java/jdk1.8.0_221/jre/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/ada/java/jdk1.8.0_221/bin:/ada/maven/apache-maven-3.6.3/bin:/usr/local/git/bin:/ada/allure/package/bin:/root/bin
[root@VM_0_16_centos ~]# ln -s /ada/java/jdk1.8.0_221/bin/* /usr/bin/Connection closing...Socket close.

#reboot重启应该就能开机自动启动了

开机自启动 jenkins