Jenkins
简介
Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件项目可以进行持续集成,本文将记录在 Linux环境下安装及配置 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 包上传到服务器,这里提供两种方法,也可以通过自己的方法,只要能传上去就行
方式一
- 通过xftp直接拖取文件(不做演示,因为我没装xftp,哈哈哈)
方式二
- 通过 linux 命令行方式 上传文件
1 | #cd: 切换目录 |
解压
- 本步骤的目的是将上传的 tar.gz 的包进行解压
1 | #ls:展示当前文件夹内的文件 |
配置环境变量
- :wq(冒号wq):保存退出
- :q(冒号q):直接退出(如果没有修改文件可以直接退出)
- :q!(冒号q!):强制退出不保存(如果改错了可以用这个)
1 | #用vim编辑器打开/etc/profile文件 |
- 让刚才修改的配置立即生效
1 | #让配置立即生效 |
启动 Jenkins
- 方法一:服务器安装tomcat,并放置Jenkins.war,启动tomcat
- 方法二:用java启动(这样就不需要安装和启动tomcat了,省服务器资源
推荐
)
方式一
- 本地解压tomcat,把war包放到webapps内,运行bin目录下的.bat处理文件,这个时候DOS系统会自己跑起来,会先检测到war包,然后配置环境,如果安装启动成功就可以了
方式二
- 前提是配置好 java 和下载好 jenkins.war 包了
1 | # oohup启动命令 |
访问 Jenkins
解锁登录
- 当我们通过 Tomcat 或者 nohup java -jar 的方式 启动好 jenkins 后便可以开始访问及配置了(如果是本地部署的访问 127.0.0.1 服务器部署的访问对应 ip)
- 第一次启动有个密码校验,会在 jenkins 的启动日志中有自己找下
以下的图是最开始学 Jenkins的时候截取的,所以是在 windows 上的,但是后面网页上的操作都是一样的所以不重新截图了
- IP、端口和启动的保持一致
- 如果点击保持并完成以后页面出现空白页需要修改jenkins的config配置文件
1 | vim /root/.jenkins/config.xml |
升级站点
全局环境配置
- 指定我们的 jdk 的绝对路径(linux也是一样)
- maven 如果本地有安装就指定,没有安装勾选自动安装(
如果没有安装可以点自动安装,截图中的是针对本地已经安装了的
)
安装插件
- 是在是找不到截图了,本步骤的目的就是需要装一些插件,通过这些插件去实现一些 jenkins 没有的功能(如果这些插件装过了就不用管)
- 安装插件,因为我们要调用svn,邮箱等等服务,必须要依赖插件
- 安装插件:
Maven Integration
Groovy Label Assignment
HTML Publisher
Email Extension
Subversion
有可能插件安装不起来,因为你的war包和当前插件版本匹配,可以更新为最新war包
新建项目及配置
新增项目
- 创建一个 maven 项目用来构建我们的工程
源码管理
- 配置我们的项目源代码的地址及账号密码信息
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服务对应的“开启”按钮点击,然后–》申请密保
- 按照弹窗里的提示给腾讯发送短信,你就会收到一个授权码,这个就是密码(记得先保存好授权码)
邮件信息配置
- 配置系统管理员的邮箱 发件人的邮箱 收件人的邮件
- 如果邮箱发生用问题可在构建的控制台输出中 debug里面看日志
构建后操作
- 我们期望构建后给我们发邮件,上面配置的只是发件人的,现在要配置接收人的邮箱账号
- 当时我出现过按照老师的教程配置了控制台也提示邮件发送成功,但是就是收不到最后一番折腾:https://issues.jenkins-ci.org/browse/JENKINS-34731
报告模板
- 以下为格式:点击即可注意测试报告这个地方http://49.234.62.82:9090/job/tb_api_auto/allure/ 最后这个斜杠带上,不然会调制登陆页面
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 | #进入etc/rc.local后添加启动命令 (确保该文件有执行权限X) |