文章目录
- 前言
- 为什么要持续集成?
- 什么是持续集成?
- 持续集成的优势有哪些?
- 主要步骤
- 持续集成Jenkins配置方法
- 注意事项
- 配置系统配置
- 配置节点
- 全局安全配置
- 全局工具配置
- 创建项目
前言
写完自动化后,我们还需要一个工具去管理我们的代码做到持续部署。。。
为什么要持续集成?
自动化的用途主要是用于回归测试,旨在回归,这就需要我们的自动化在定期内跑,比如每天的某个时间点跑,并将测试报告发送到邮箱,减少重复性工作,持续集成还可以降低风险,由于持续集成不断去构建,编译和测试,可以很早期发现问题,除此之外还有持续部署,提供可部署单元包等
所以这里就需要用到持续集成了,最常用的是Jenkins,所以我这里也是以Jenkins为例。
什么是持续集成?
持续集成是一种软件开发实践。在持续集成中,团队成员频繁集成他们的工作成果,一般每人每天至少集成一次,也可以多次。每次集成会经过自动构建(包括自动测试)的检验,以尽快发现集成错误。许多团队发现这种方法可以显著减少集成引起的问题,并可以加快团队合作软件开发的速度。这篇文章简要介绍了持续集成的技巧和它最新的应用
持续集成指的是,频繁地(一天多次)将代码集成到主干,通过持续集成流程的进行自动化方式的构建,编译和测试,提供可以部署发布的单元包
持续集成的目的,就是让产品可以快速迭代,同时还能保持高质量
持续集成的优势有哪些?
1、易于定位错误。也就是当你的持续集成失败了,说明你新加的代码或者修改的代码引起了错误,这样你很容易定位问题
2、及早在项目里取得系统级的成果。因为代码已经被集成起来了,所以即使整个系统还不是那么可用,但至少你和你的团队都已经可以看到它已经在那了。
3、 改善对进度的控制。这点非常明显,如果每天都在集成,当然每天都可以看到哪些功能可以使用,哪些功能还没有实现。
4、更加充分地测试系统中的各个单元。
5、能在更短的时间里建造整个系统。
6、有助于项目的开发数据的收集。比如说,项目代码量的变化,经常出错的Tests,经常出错的source code,等等
7、与其它工具结合的持续代码质量改进。如与CheckStyle, PMD, FindBugs, Fxcop等等等等的结合。
8、与测试工具或者框架结合的持续测试。
9、便于Code Review。在每个build里,我们都可以知道与前一个build之间有什么改动,然后针对这些改动,我们就可以实施Code Review了。
10、便于开发流程的管理。
主要步骤
持续集成一般的做法: 通过svn或其他工具拉取代码->自动化构建->自动化编译->自动化测试->自动化部署->自动化发布->邮件发送通知
持续集成Jenkins配置方法
注意事项
注意警告:配置完记得点击保存!!!!!!
配置系统配置
入口:系统管理——系统配置
1、配置Jenkins Location
1.1、修改Jenkins URL,将Jenkins URL修改成虚拟机的正确地址,查看命令:ip addr
1.2、配置一个系统管理员邮件地址
2、配置邮件Extended E-mail Notification(以163邮箱为例)
SMTP server:smtp.163.com
Default user E-mail suffix:@163.com
Default Content Type:HTML(text/html)
点击高级:
勾选Use SMTP Authentication
填写User Name和Password
User Name:你的邮箱地址
Password为邮箱的授权码
SMTP port:25
Charset:UTF-8
3、配置邮件通知
SMTP服务器:smtp.163.com
用户默认邮件后缀:@163.com
勾选使用SMTP认证
用户名:邮箱地址
密码:邮箱授权码
SMTP端口:25
字符集:UTF-8
配置完之后可以测试一下邮箱是否配置成功
勾选通过发送邮件测试配置
填写收信邮箱地址,发送成功代表配置成功4、邮箱授权码的获取方式:
4.1、登录163邮箱
4.2、点击设置,选择POP3/SMTP/IMAP
4.3、进入POP3/SMTP/IMAP页面
4.4、打开IMAP/SMTP服务和POP3/SMTP服务
4.5、获取授权码
4.6、手机接收验证码(傻瓜式操作即可)
4.7、邮箱授权码只展示一次,保存好!!!
配置节点
入口:系统管理——节点管理
1、新建节点
名字:节点名字,自己随便取
远程工作目录:用于存放jenkins的工作空间
启动方法:选择 Java web启动代理(如果没有这一项,配置下面的全局安全配置即可)配置从节点
选择节点属性——工作位置
注意:如果没有东西,去配置全局工具jdk、git、allure(下面有全局安全配置的步骤,按步骤配置上即可)
启动节点
1、点击agent.jar 进行下载,
2、切到agent.jar在的目录下(我放在了桌面),运行命令进行启动
命令:java -jar agent.jar -jnlpUrl http://192.168.24.36:8080/jenkins/computer/test_0727/slave-agent.jnlp -secret 044ca68ac2fb46c0441c31412e2add490c4d08be4a5127bf88b389ad902da49f -workDir “D:\test_0727”
返回Jenkins,显示Agent is connected.表示连接成功
全局安全配置
入口:系统管理——全局安全配置
配置代理项和跨站请求伪造保护
全局工具配置
入口:系统配置——全局工具配置
配置jdk、git、allure
1、Jdk
2、配置Git
3、配置allure
创建项目
在Jenkins首页点击创建一个新任务
分三步:
001.给任务起个名字
002.选择自由风格
003.点击确定按钮
创建好项目后跳转到项目配置页面(如下),对新建的项目进行配置
1、general信息的配置
2、git管理的用户名和密码的添加
前提:注册gitee(https://gitee.com),并将代码上传
上传代码到gitee的方法我稍后再写一篇步骤。。。
Gitee项目地址获取:
3、构建
4、构建触发器
常用的有三种:
其他工程构建后触发:开发打包之后会触发自动化代码的执行(需要指定)
定时构建:定时每隔多久执行一次
轮询SCM:到了规定时间去检查版本库是否更新,更新了就执行一次,否则不执行
5、构建后操作
Allure报告的模板内容:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>$PROJECT_NAME-第$BUILD_NUMBER次构建日志</title>
</head>
<body leftmargin="8" marginwidth="0" topmargin="8" marginheight="4"
offset="0">
<div>
<table width="95%" cellpadding="0" cellspacing="0"
style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif">
<tr>
<th align="center" colspan="2"><br />
<h2>构建信息</h2>
</th>
</tr>
<tr>
<td>
<ul>
<li>项目名称 : $PROJECT_NAME</li><br />
<li>详细测试日志 : <a href=${BUILD_URL}console target='_blank'>${BUILD_URL}console</a></li><br />
<li>详细测试报告 : <a href=${JOB_URL}allure target='_blank'>${JOB_URL}allure</a></li><br />
<li>触发原因: ${CAUSE}</li><br />
<li>项目 Url : <a href=‘$BUILD_URL’ target='_blank'>$BUILD_URL</a></li><br />
</ul>
</td>
<td height="350px" style="overflow:hidden;display:block">${JELLY_SCRIPT,template="html"}<br/>
</tr>
</table>
</div>
</body>
</html>
然后点击高级设置
发送邮件机制选择always:无论成功还是失败都发送邮件
6、生成allure报告
allure 报告: requests+pytest+allure生成接口自动化测试框架
生成原生的html的报告
System.setProperty(“hudson.model.DirectoryBrowserSupport.CSP”, “”)
然后点击构建
进入控制台查看购进进程
成功
邮箱:
在线cron表达式生成器:https://cron.qqe2.com/
cron表达式
允许特殊字符
, - * /
, - * /
, - * /
, - * / ? L W C
, - * /
, - * / L # C
1970-2099 , - * /
字段含义
*:代表所有可能的值
-:指定范围
,:列出枚举 例如在分钟里,"5,15"表示5分钟和20分钟触发
/:指定增量 例如在分钟里,"3/15"表示从3分钟开始,没隔15分钟执行一次
?:表示没有具体的值,使用?要注意冲突
L:表示last,例如星期中表示7或SAT,月份中表示最后一天31或30,6L表示这个月倒数第6天,FRIL表示这个月的最后一个星期五
W:只能用在月份中,表示最接近指定天的工作日
#:只能用在星期中,表示这个月的第几个周几,例如6#3表示这个月的第3个周五
示例
0 * * * * ? 每1分钟触发一次
0 0 * * * ? 每天每1小时触发一次
0 0 10 * * ? 每天10点触发一次
0 * 14 * * ? 在每天下午2点到下午2:59期间的每1分钟触发
0 30 9 1 * ? 每月1号上午9点半
0 15 10 15 * ? 每月15日上午10:15触发
*/5 * * * * ? 每隔5秒执行一次
0 */1 * * * ? 每隔1分钟执行一次
0 0 5-15 * * ? 每天5-15点整点触发
0 0/3 * * * ? 每三分钟触发一次
0 0 0 1 * ? 每月1号凌晨执行一次