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的端口也要保持一致。

image-20210504171646780

现在我们根据提示找到管理员的密码

root@30f1a63fd506:~# cat /root/.jenkins/secrets/initialAdminPassword
db1a7e8cf7fa4a3983d259c8a33afe2d

这里我们选择跳过插件安装

image-20210504172313088

配置密码和用户名

image-20210504172346298

点击保存完成

image-20210504172441330

到此我们已经完成了用户名和密码的重新设置。

现在我们开始安装插件

安装插件时遇到如下错误

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 错误即可解决

image-20210504173142839

现在我们到available中安装包

1、安装ant、Email Extension、gitlab、SSH.plugin,选中后点击Download now and install after restart

image-20210504200126109

安装插件的过程中出现错误:

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个插件

再次重启容器。可以看到插件已经安装成功。

image-20210504204511901

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

image-20210504221826371

二、配置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启动容器映射的端口

image-20210504211304649

并保存,然后重启Gitlab服务,这里的重启是在容器里面重启,不要退出容器了

gitlab-ctl stop
gitlab-ctl start

然后打开url地址:http://x.x.x.x:8085/users/password/edit?reset_password_token=JnxxL-QE_-zLzzWVqPCG

image-20210504211620503

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

image-20210504211813856

image-20210504212012208

然后回车就可以了。

image-20210504212116156

image-20210504212402296

创建新项目

image-20210504212539413

image-20210504212645776

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

image-20210504212902855

现在开始配置密匙

我们使用gitgui生成私匙

image-20210504220352645

然后再gitlab中配置密匙

image-20210504220513384

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

image-20210504214128580

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

image-20210504214446584

现在项目已经到本地了

image-20210504214507221

现在把我们 项目中用到的jmx文件放到tmall项目中,用git提交到Gitlab中

git add .
git commit -m "提交tmall项目文件"
git push origin master

push的过程中,需要输入gitlab的账户,也就是我们最开始设置的密码

image-20210504215646362

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

image-20210504222156179

现在我们在Jenkins中配置git,用于Jenkins拉取gitlab代码和文件

打开Jenkins中之前配置的项目

image-20210504222439311

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

image-20210504222648256

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

image-20210504222813051

选择刚刚添加的账户

image-20210504222938571

然后保存并构建,我们可以看到在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不需要输入内容

image-20210504224936328

image-20210504231747432

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

image-20210505081224123

三、配置邮件服务

转到Jenkins-系统设置页面

image-20210505082041623

image-20210505082509132

image-20210505092251730

image-20210505083239363

填入接收邮件的HTML格式

image-20210505141332679

文本内容为:

<!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>    

image-20210505141827106

image-20210505142117566

最后别忘记save了

接着,我们配置项目中邮件发送的内容

image-20210505142505003

image-20210505142629851

image-20210505142729545

image-20210505144713615

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

image-20210505144958163

image-20210505145041996

image-20210505145144663

image-20210505145637401

image-20210505143133236

最后save。

四、在Nginx中配置生成的报告

修改Nginx配置

vim /etc/nginx/sites-enabled/jenkins

image-20210505085227012

/etc/init.d/nginx  start
/etc/init.d/php5-fpm start

现在我们可以再次构建

在控制台中,我们可以看到已经构建成功,邮件已经发送成功。

image-20210505145348483

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

image-20210505150535113

image-20210505183901833

至此,环境安装完成,

服务器配置2核4G,经过粗劣计算

各个服务占内存比:

tmall项目 16% 约 575M
mysql 12.1% 约431M
gitlab 16% 约 575M

Jenkins 15% 约539M

Nginx 1%
php 1%

我尝试了使用yum安装mysql ,占内存比仅3%,不知道为啥docker占用内存这么高

posted @ 2021-06-27 18:22  Walker~  阅读(322)  评论(0)    收藏  举报