Jenkins是一个用Java编写的开源的持续集成工具。在与Oracle发生争执后,项目从Hudson项目复刻。Jenkins提供了软件开发的持续集成服务。它运行在Servlet容器中(例如Apache Tomcat)。它支持软件配置管理(SCM)工具(包括AccuRev SCM、CVS、Subversion、Git、Perforce、Clearcase和RTC),可以执行基于Apache Ant和Apache Maven的项目,以及任意的Shell脚本和Windows批处理命令。Jenkins的主要开发者是川口耕介。Jenkins是在MIT许可证下发布的自由软件。可以通过各种手段触发构建。例如提交给版本控制系统时被触发,也可以通过类似Cron的机制调度,也可以在其他的构建已经完成时,还可以通过一个特定的URL进行请求。
1.2 PTP平台
性能测试一直是业界重点关注的部分,但是复杂的性能测试过程却让很多人望而生畏:管理测试用例、收集测试数据、进行数据分析、编写测试报告,每一项都需要耗费很多心血。
于是,PTP平台就这样应运而生了,它是网易自主开发的自动化性能测试平台,致力于将性能测试过程自动化、标准化、一体化,并且将性能测试过程持续起来,进行更多数据分析。
2自动化流程
2.1创建任务
QA管理员拥有新建节点权限,如需增加新节点,请找各自的QA管理员。QA管理员在Jenkins上添加一个新节点步骤如下:
(1)点击链接进入
(2)输入节点名称,节点名称通常以服务器hostname或者机器描述命名,比如qa10.server,ddb-23.photo,QA_AutoTest_1等。
(3)选择Dumb Slave选项,点击OK按钮
(4)输入以下设置:
a.# of executors:输入执行器的个数(一个或者多个):这个值控制着Jenkins并发构建的数量, 因此这个值会影响Jenkins系统的负载压力。使用处理器个数作为其值会是比较好的选择。
b.Remote FS root:输入slave机器作为持续集成Home的路径
c.Labels:用来对多节点分组,在目前杭研的应用中,我们一般设置其跟节点名称一样
d.用法:一般选只运行绑定到这台机器的job
e.Launch Method选择Launch slave agents via Java Web Start
(5)保存
Node Properties可设置环境变量,如果不设置就会使用jenkins主机上全局定义的环境变量,如下图所示:
更详细的创建教程可参见wiki:?pageId=36463105
2.2 自动化环境部署
Jenkins上添加配置好的节点,如下所示:
编写自动化部署脚本:
import requests import time import os import sys # web is deployed on two servers,the arguments in url:moduleId,envId,instanceId test_web_arg_1 = (\'***\',\'***\',\'***\') basi_url = \'http://omad.hz.netease.com/api\' productId = \'***\' envName=\'urs-regzj-perftest\' branch=\'perftest_jenkins\' def get_token(appId, appSecret): r = requests.get(basi_url + \'/cli/login?appId=%s&appSecret=%s\' % (appId, appSecret)).json return r[\'params\'][\'token\'] def deploy_web(appId, appSecret,moduleId,envId): test_web_url = \'/cli/deploy?token=%s&moduleId=%s&envId=%s\'%(get_token(appId, appSecret),moduleId, envId) r = requests.get(basi_url + test_web_url).json print \'Deploy result:\' def get_status(appId, appSecret,envId,instanceId): status_url = \'/cli/istatus?token=%s&envId=%s&instanceId=%s\'%(get_token(appId, appSecret), envId, instanceId) r = requests.get(basi_url + status_url).json return r[\'deployStatus\'],r[\'status\'] def check_deploy_result(appId, appSecret,envId,instanceId): status = get_status(appId, appSecret,envId,instanceId) print \'building .......\' times = 0 while status[0] == \'success\': status = get_status(appId, appSecret,envId,instanceId) times += 1该过程主要是调用OMAD接口实现了自动化部署,分为以下几个步骤:(1)调用/api/cli/login接口获取个人token信息;(2)调用/api/cli/vcchange接口对指定产品的指定环境切换成指定分支;(3)调用/api/cli/ls接口获取当前用户有权限的所有产品的所有工程的信息;
(4)调用/api/cli/deploy接口对指定环境的指定分支进行构建部署。
执行方式为python omad.py AccessKeyAccessSecret,其中$AccessKey和$AccessSecret为登录OMAD后的个人认证信息。
2.3 自动化脚本调试