前言
写完自动化后,我们还需要一个工具去管理我们的代码做到持续部署。。。
为什么要持续集成?
自动化的用途主要是用于回归测试,旨在回归,这就需要我们的自动化在定期内跑,比如每天的某个时间点跑,并将测试报告发送到邮箱,减少重复性工作,持续集成还可以降低风险,由于持续集成不断去构建,编译和测试,可以很早期发现问题,除此之外还有持续部署,提供可部署单元包等 所以这里就需要用到持续集成了,最常用的是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号凌晨执行一次
|