软件测试教程 持续集成jenkins篇
本课程主要讲解持续集成工具jenkins的使用。
持续集成的核心价值在于:
1、持续集成中的任何一个环节都是自动完成的,无需太多的人工干预,有利于减少重复过程以节省时间、
费用和工作量;
2、持续集成保障了每个时间点上团队成员提交的代码是能成功集成的。换言之,任何时间点都能第一时间
发现软件的集成问题,使任意时间发布可部署的软件成为了可能;
3、持续集成还能利于软件本身的发展趋势,这点在需求不明确或是频繁性变更的情景中尤其重要,持续集
成的质量能帮助团队进行有效决策,同时建立团队对开发产品的信心。
在敏捷时代,持续集成的作用越来越突出。本节主要讲解如下部分:
jenkins的特点
jenkins的安装与启动
jenkins的使用
jenkins与sonarqube的集成
jenkins的特点
Jenkins是一个软件界非常流行的开源CI服务器,jenkins是基于Java开发的一种持续集成工具,用于监控持续重复的工作,功能包括:
- 持续的软件版本发布/测试项目。
- 监控外部调用执行的工作
Jenkins能实时监控集成中存在的错误,提供详细的日志文件和提醒功能,还能用图表的形式形象地展示项目构建的趋势和稳定性。
使用Jenkins的益处有:
-易安装、易配置
-基于Web访问,用户界面非常友好、直观和灵活
-Jenkins是基于Java开发的,但它不仅限于构建基于Java的软件
-变更支持:Jenkins能从代码仓库(Subversion/GIT)中获取并产生代码更新列表并输出到编译输出信息中
-测试报告:也就是用以图表等形式提供详细的测试报表功能
-拥有大量的插件:这些插件极大的扩展了Jenkins的功能
典型的工作流:
pull
编译
测试
发布
Jenkins会定时获取最新的代码,自动运行你的编译脚本,编译成功后,再运行你的测试脚本,这一步成功后,接着它会帮你把新程序发布出去,特别的,在最后一步,你可以选择手动发布,或自动发布,毕竟发布这件事情,还是需要人为的确认一下比较好。简而言之
Jenkins可以帮你在写完代码后,一键完成开发过程中的一系列工作
使用Jenkins的好处显而易见,它减少了你的重复劳动。更重要的是,一个团队的开发流程一开始是不一致的,不一致往往会带来各种各样的问题,最终体现在软件的质量或开发效率不够高,而Jenkins会帮你规范大家的行为,从而避免一系列的问题。
jenkins的安装和启动
jenkins官网地址:https://jenkins.io/
建议下载war包程序
注意:不要在中文目录下运行
jenkins为java编写,需要JDK的支持
环境变量的设置:
JAVA_HOME,设置JDK的安装目录,建议采用JDK1.7+
JENKINS_HOME,设置Jenkins的配置文件目录,默认为用户的目录,建议为Jenkins的安装目录,便于控制;该项目如果不配置,那么将默认在用户目录下生成.jenkins文件夹
PATH,需要将java的bin目录配置到path目录下;
1、启动,可以编写如下bat进行启动或者直接输入命令行。也可以将war包直接放在web容器内,如tomcat。
@echo off
set JENKINS_HOME=%CD%\.jenkins
java.exe -jar -Xmn128M -Xms256M -Xmx512M jenkins.war --httpPort=8080
jenkins2.0+以上版本,在控制台会输出如下信息,这里的信息为首次登陆的密码
Jenkins initial setup is required. An admin user has been created and a password generated.
Please use the following password to proceed to installation:
0a2927dc3a304b6aad04690291c90fb3
2、打开网页http://localhost:8080,提示输入密码,输入以上密码,继续,选择建议的插件安装
3、建立admin用户,输入用户名、密码例如admin/admin
jenkins的使用
系统配置
1)基本设置
工作空间根目录:job文件存放的目录
构建记录根目录:每一次构建日志目录
执行者数量:同时执行的任务数
Subversion:配置svn版本
Extended E-mail Notification&&邮件通知:配置邮件通知服务器
2)全局工具配置
配置jdk,ant,maven,git等版本,此处可以配置多个,以支持不同项目使用
3)管理插件
安装、卸载、升级插件
4)全局安全配置
配置授权策略
建议采用Jenkins专用数据库,安全策略采用安全矩阵方式,已经能够基本满足现有的模式。
安全域:
1、Jenkins专有用户数据库
2、LDAP
授权策略:
1、安全矩阵
| Overall | Credentials | Agent | Job | Run | View | SCM |
Agents:
当需要设置slave时,TCP port for JNLP agents需要启用,否则不同通过java web启动代理
5)管理用户
增加jenkins新用户
6)系统信息
查看系统环境信息
7)管理节点
Jenkins的分布式构建,在Jenkins的配置中叫做节点。
当我们使用多台服务器时,可通过jenkins的节点配置,将jenkins项目发布在不同服务器上进行编译、部署,这就形成了jenkins的分布式
简单解释一下配置:
名字:该节点的名字。
描述:说明这个节点的用途。
# of executors:允许在这个节点上并发执行任务的数量,一般设置为 cpu 支持的线程数。
远程工作目录:节点上 Jenkins 的根目录。
标签:分配给这个节点的标签。
用法:节点的使用策略。
启动方法:启动 agent 的方式,对于 windows 平台,最好选择 "通过Java Web启动代理"。
对于linux平台,选择Launch slave agents via SSH
Availability:Jenkins 控制 slave 是否在线的策略。
Node Properties:设置工具列表和环境变量
8)读取设置
放弃当前内存中所有的设置信息并从配置文件中重新读取 仅用于当您手动修改配置文件时重新读取设置。
视图
用于分类管理,使job分类清晰
新建视图
1、在Jenkins主界面中点击图示的【+】开始执行视图创建工作
2、在【新建视图】页面,按照图示填写“视图名称”,选择“List View”点击【OK】按钮
3、在【视图配置】页面中,我们可以给当前的视图添加描述性信息,添加完成之后,点击【保存】按钮
修改视图
1、点击【编辑视图】按钮,进入【编辑视图】页面
2、在【编辑视图】页面,将我们所修改的编写完之后,点击【保存】按钮,即可实现编辑视图的操作
删除视图
1、点击【删除视图】按钮,即可实现视图的删除操作,删除视图不会影响job
job
一个JOB就是一个任务。
在jenkins主页面,选择新建,可以新建不同种类的job
构建一个自由风格的软件项目:jenkins最常用的类型,一般没有特殊需求可以选择它
构建一个maven项目:当安装了maven插件之后,会出现该项目,仅针对maven构建方式的项目
流水线:jenkins2.0+之后推广的方式,通过编写yml文件的方式来实现自动构建、部署等操作
构建一个多配置项目:当需要多环境时,必须多环境编译、部署时可以采用该配置
新建一个自由风格的项目后job的页面如下:
JOB主要包含以下部分:
1)项目名称和描述
2)项目安全
3)参数化构建过程:是否升级db、选择部署环境等
4)源码管理:从SVN、GIT等获取代码
5)构建触发器:是否与其他JOB有依赖关系,是否使用定时器等
6)构建:调用ant、maven、shell等脚本
7)日志查看,点击console output可以查看日志信息
执行过程如图:
st=>start: start
op=>operation: 获取参数
op1=>operation: 构建触发器
op2=>operation: 构建环境
op3=>operation: 构建
op4=>operation: 构建后操作
e=>end
st(right)->op(right)->op1(right)->op2(right)->op3(right)->op4(right)->e
常见配置项解释:
项目名称与描述:名称不建议为中文,项目(任务)名称不能重复
丢弃旧的构建:设置构建历史的保存策略,可以节省空间,可以按天数或者个数来设置
参数化构建过程:某些构建过程,需要一些输入参数,常用的有choice parameter,string parameter等
Restrict where this project can be run:当jenkins配置有slave时,可以设置job在该slave上运行
github project :github使用,里面配置响应的url和需要显示的名称就可以了
throttle builds:节流构建,通过设置时间段内允许并发的次数来实现构建的控制
参数化构建过程:里面可以配置不同的参数,便于在构建时引用这些参数
windows引用方式%paraname%,shell为$paraname
关闭构建:项目无法进行构建
安静期:设置一个时间来间隔每次构建的间隔
重试次数:拉取源码重试的次数
该项目的上游项目正在构建时阻止该项目构建与该项目的下游项目正在构建时阻止该项目构建:用于上下游项目有关联的构建策略
使用自定义的工作空间:指定当前任务的workspace,否则默认为JENKINS_HOME的工作目录
保留构建的依赖日志
源码管理:选择使用git或者svn,以git为例:
以svn为例时
repository url:填写仓库的地址
Credentials:这里需要配置拉取svn源码的用户名和密码
Local module directory:具体的项目的路径,默认从根目录拉取
Additional Credentials:增加额外认证
Check-out Strategy:代码检出策略
Use 'svn update' as much as possible:相当于svn update
Always check out a fresh copy:checkout之前先清除工作区文件
源码库浏览器:这里默认就可以了
构建触发器:
1、触发远程构建 (例如,使用脚本):这里使用于自动化构建,拼接url后写入代码中可以实现在脚本或者工具执行构建
2、Build after other projects are built:构建与其他项目构建后,用于上下游项目有关联的时候
3、Build periodically:定时执行构建
日程表的参数:
第一个参数代表的是分钟 minute,取值 0~59;
第二个参数代表的是小时 hour,取值 0~23;
第三个参数代表的是天 day,取值 1~31;
第四个参数代表的是月 month,取值 1~12;
最后一个参数代表的是星期 week,取值 0~7,0 和 7 都是表示星期天。
4、Build when a change is pushed to GitHub:这个是github项目的触发规则
5、Poll SCM:设置定时检查代码仓库是否有变更,有变更则构建
构建环境:
1、Delete workspace before build starts:在构建之前清空工作空间
2、Abort the build if it's stuck:如果构建出现问题则终止构建
3、Add timestamps to the Console Output:给控制台输出增加时间戳
4、Use secret text(s) or file(s):使用加密文件或者文本
构建
1、execute windows batch command:执行windows的cmd
2、execute shell:执行shell命令
3、invoke ant:调用ant ,调用ant的执行脚本来进行构建
备注:
Targets:主要是执行ant脚本中哪几个部分,可以添加多个;
Build File:需要指定Ant脚本的物理位置;
Properties:添加Ant指定的属性;
Java Options:设置运行java时的属性,例如内存、堆大小等;
4、invoke gradle script :调用grade脚本,来帮助我们自动打包
5、invoke top-level maven targets:调用maven
不同的语言可能会采用不同的构建方式
构建后操作
1、build other projects:构建其他项目
2、e-mail notification:发送邮件
3、delete workspace when build is done:构建后删除工作空间
案例:
以一个web工程为样例
1、安装Deploy to container Plugin插件
2、新建-构建一个自由风格的软件项目
3、源码管理选择scm,没有的话就不选择
4、构建触发器,选择poll scm,设置触发时间,例如H 5 * * *,表示每晚5点开始运行Job
poll scm的触发条件是:晚上5点,查看scm是否有更新,有更新则开始构建
5、构建:选择构建方式
本web项目选择构建方式maven
6、构建后操作:选择发布到tomcat
7、进行构建
8、查看构建日志
运行并监控构建作业
当配置完成一个任务后,回到主控制面板:
1、列表列举现在已经配置的任务已经任务当前的状态
2、左边有构建队列,当有构建时,会把当前正在构建的队列在上面进行列举
3、当一个任务配置完成后,可以采用手动构建和触发器构建两种方式,在项目验证阶段,可以通过手动触
发方式,点击任务区的“立即构建”,会在Build History中出现进度条
4、点击进度条,可以进入到具体的编译过程
任务构建状态
当前构建状态分为以下几种:
构建稳定行,Jenkins会基于一些后处理器任务为构建发布一个稳健指数(从0-100 ),越高越稳定
jenkins与sonarqube的集成
1、安装SonarQube Scanner for Jenkins插件
2、进入系统设置-全局工具设置,配置SonarQube Scanner路径
3、进入系统设置-系统管理,配置SonarQube servers,增加一个server,配置NAME,以及Server URL
4、在job的配置页面增加构建步骤:Execute SonarQube scanner
Analysis properties(举例):
sonar.projectKey=Test
sonar.projectName=Test
sonar.projectVersion=1.0
sonar.sources=.
sonar.sourceEncoding=UTF-8
sonar.language=java
5、job完成后,可以在项目页面,点击sonarqube链接查看扫描结果