jmeter之容器化的持续集成框架
一、配置Jenkins
首先使用docker命令拉取镜像文件
docker run -d -p 8082:80 -p 8183:8080 registry.cn-hangzhou.aliyuncs.com/zhufc/jenkins-nginx-php:v3
该命令会到阿里云的仓库拉取镜像文件
拉取完成后
首先配置jmeter环境变量
docker exec -it 30f1a63fd506 bash
vim /etc/profile
配置环境变量
export JMETER=/opt/apache-jmeter-3.2
export PATH=$JMETER/bin:$PATH
export Ant=/opt/apache-ant-1.9.9
export PATH=$Ant/bin:$PATH
然后执行
source /etc/profile
然后配置Jenkins
我们这里切入到镜像里面删除.jenkins文件,然后更新Jenkins.war,因为不更新,后面插件无法安装
docker exec -it 30f1a63fd506 bash
rm -rf /root/.jenkins
cd /opt/apache-tomcat-8.5.24/webapps/
rm -rf jenkins jenkins.war
然后上传Jenkins.war,该包可到Jenkins官网下载。
然后退出镜像
Ctrl+P Ctrl +q
重启镜像
docker restart 30f1a63fd506
打开配置的地址,因为上文中我们指定的端口地址是8183作为Jenkins服务器的端口地址,所以url的端口也要保持一致。

现在我们根据提示找到管理员的密码
root@30f1a63fd506:~# cat /root/.jenkins/secrets/initialAdminPassword
db1a7e8cf7fa4a3983d259c8a33afe2d
这里我们选择跳过插件安装

配置密码和用户名

点击保存完成

到此我们已经完成了用户名和密码的重新设置。
现在我们开始安装插件
安装插件时遇到如下错误
There were errors checking the update sites: SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
我们现在把高级选项中的url由https更改为http,点击submit,然后点击checknow 错误即可解决

现在我们到available中安装包
1、安装ant、Email Extension、gitlab、SSH.plugin,选中后点击Download now and install after restart

安装插件的过程中出现错误:
sun.security.validator.ValidatorException:
PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException:
unable to find valid certification path to requested target
我们到这里下载忽略安全插件
进入docker容器中
cd /root/.jenkins/plugins
然后将下载的文件上传到该目录、然后Ctrl+ p ctrl +q 退出容器,并重启【docker restart 30f1a63fd506】容器。
再次安装上述4个插件
再次重启容器。可以看到插件已经安装成功。

现在我们创建一个自由泳项目

二、配置gitlab
首先运行如下命令,从阿里云服务器下载镜像并启动容器
docker run -d -p 8085:80 registry.cn-hangzhou.aliyuncs.com/zhufc/gitlab-ce-zh:zhu2
然后进入容器
docker exec -it ff4c92b8ab71 bash
find / -name gitlab.yml
vim /var/opt/gitlab/gitlab-rails/etc/gitlab.yml
修改host和port,host就是服务器的ip地址,端口就是刚刚docker启动容器映射的端口

并保存,然后重启Gitlab服务,这里的重启是在容器里面重启,不要退出容器了
gitlab-ctl stop
gitlab-ctl start
然后打开url地址:http://x.x.x.x:8085/users/password/edit?reset_password_token=JnxxL-QE_-zLzzWVqPCG

这里是设置密码,不是修改密码,所以需要设置一个新 的密码,然后登录。


然后回车就可以了。


创建新项目


到这里,gitlab项目就创建完成了。

现在开始配置密匙
我们使用gitgui生成私匙

然后再gitlab中配置密匙

现在我们在本地创建一个目录,用于把本地文件提交到Gitlab

现在我们使用Git工具切入到这个目录下,并把我们刚刚创建的gitlab的项目clone到本地

现在项目已经到本地了

现在把我们 项目中用到的jmx文件放到tmall项目中,用git提交到Gitlab中
git add .
git commit -m "提交tmall项目文件"
git push origin master
push的过程中,需要输入gitlab的账户,也就是我们最开始设置的密码

现在可以看到已经提交到Gitlab中了

现在我们在Jenkins中配置git,用于Jenkins拉取gitlab代码和文件
打开Jenkins中之前配置的项目

填入gitlab中 的仓库地址,选择Jenkins

这里的密码就是gitlab中的密码

选择刚刚添加的账户

然后保存并构建,我们可以看到在workspace里面已经把tmall.jmx文件拉取过来了。
root@30f1a63fd506:~/.jenkins/workspace/tmall# ls
tmall.jmx
现在我们需要把构建文件放入tmall内
root@30f1a63fd506:~/.jenkins/workspace/tmall# ls
build.xml resultLog tmall.jmx
build.xml文件内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<project name="tmall" default="run" basedir=".">
<tstamp>
<format property="time" pattern="yyyyMMddhhmm" />
</tstamp>
<property environment="env"/>
<property name="ReportName" value="TmallReport" />
<property name="workspace" value="/root/.jenkins/workspace/tmall" />
<!-- 需要改成自己本地的 Jmeter 目录-->
<property name="jmeter.home" value="/opt/apache-jmeter-3.2" />
<!-- jmeter生成jtl、html格式的结果报告的路径-->
<property name="jmeter.result.dir" value="/root/.jenkins/workspace/tmall/resultLog/Tmall${env.BUILD_ID}" />
<!-- 生成的报告的前缀-->
<property name="jmeter.result.jtlName" value="${jmeter.result.dir}/${ReportName}.jtl" />
<property name="jmeter.result.htmlName" value="${jmeter.result.dir}/${ReportName}.html" />
<!-- GIT拉取到本地目录的路径 -->
<property name="githome" value="${env.workspace}" />
<target name="run">
<echo message="start..."/>
<antcall target="clean" />
<antcall target="test" />
<antcall target="report" />
</target>
<target name="clean">
<mkdir dir="${env.WORKSPACE}/resultLog/${env.BUILD_ID}" />
</target>
<target name="test">
<taskdef name="jmeter" classname="org.programmerplanet.ant.taskdefs.jmeter.JMeterTask" />
<jmeter jmeterhome="${jmeter.home}" resultlog="${jmeter.result.jtlName}">
<!-- 声明要运行的脚本"*.jmx"指包含此目录下的所有jmeter脚本,includes里的文件也可以用逗号,隔开-->
<testplans dir="${env.WORKSPACE}" includes="tmall.jmx" />
<property name="jmeter.save.saveservice.output_format" value="xml"/>
</jmeter>
</target>
<path id="xslt.classpath">
<fileset dir="${jmeter.home}/lib" includes="xalan*.jar"/>
<fileset dir="${jmeter.home}/lib" includes="serializer*.jar"/>
</path>
<target name="report">
<tstamp> <format property="report.datestamp" pattern="yyyy/MM/dd HH:mm" /></tstamp>
<xslt
classpathref="xslt.classpath"
force="true"
in="${jmeter.result.jtlName}"
out="${jmeter.result.htmlName}"
style="${jmeter.home}/extras/jmeter.results.shanhe.me.xsl">
<param name="dateReport" expression="${report.datestamp}"/>
</xslt>
<!-- 因为上面生成报告的时候,不会将相关的图片也一起拷贝至目标目录,所以,需要手动拷贝 -->
<copy todir="${jmeter.result.dir}">
<fileset dir="${jmeter.home}/extras">
<include name="collapse.png" />
<include name="expand.png" />
</fileset>
</copy>
</target>
</project>
然后配置ant,这里选中后,输入框targets不需要输入内容


然后保存,现在再次构建,在控制台中,可以看到已经构建成功了

三、配置邮件服务
转到Jenkins-系统设置页面




填入接收邮件的HTML格式

文本内容为:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>${ENV, var="JOB_NAME"}-第${BUILD_NUMBER}次构建日志</title>
</head>
<body leftmargin="8" marginwidth="0" topmargin="8" marginheight="4"
offset="0">
<table width="95%" cellpadding="0" cellspacing="0" style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif">
<tr>
本邮件由系统自动发出,无需回复!<br/>
各位同事,大家好,以下为${PROJECT_NAME }项目性能测试报告,点击链接可以直接查看</br>
</tr>
<tr>
<td><br />
<b><font color="#0B610B">构建信息</font></b>
<hr size="2" width="100%" align="center" /></td>
</tr>
<tr>
<td>
<ul>
<li>项目名称 : ${PROJECT_NAME}</li>
<li>构建编号 : 第${BUILD_NUMBER}次构建</li>
<li>构建人员: 测试部门</li>
<li>构建日志: <a href="http://x.x.x.x:8082/Tmall${BUILD_NUMBER}/TmallReport.html">http://x.x.x.x:8082/Tmall${BUILD_NUMBER}/TmallReport.html</a></li>
</ul>
<ul>
</ul>
</td>
</tr>
</table>
</body>
</html>


最后别忘记save了
接着,我们配置项目中邮件发送的内容




这里我们选择总是,不管失败还是成功都发送邮件。





最后save。
四、在Nginx中配置生成的报告
修改Nginx配置
vim /etc/nginx/sites-enabled/jenkins

/etc/init.d/nginx start
/etc/init.d/php5-fpm start
现在我们可以再次构建
在控制台中,我们可以看到已经构建成功,邮件已经发送成功。

可以看到邮件已经发送成功,点击链接,即可查看详情。


至此,环境安装完成,
服务器配置2核4G,经过粗劣计算
各个服务占内存比:
tmall项目 16% 约 575M
mysql 12.1% 约431M
gitlab 16% 约 575M
Jenkins 15% 约539M
Nginx 1%
php 1%
我尝试了使用yum安装mysql ,占内存比仅3%,不知道为啥docker占用内存这么高

浙公网安备 33010602011771号