概述

小编用docker部署了一套持续集成平台,感兴趣的朋友可以学习一下。

 

整体架构

docker+jenkins/svn+gitlab+jmeter+ant

 

一:部署gitlab

Docker pull registry.cn-hangzhou.aliyuncs.com/zhufc/gitlab-ce-zh:zhu2

##拉取gitlab镜像,镜像基础知识详见Docker基础操作

docker run -d -p 8081:8080 registry.cn-hangzhou.aliyuncs.com/zhufc/gitlab-ce-zh:zhu2

##启动gitlab容器

容器启动之后,浏览器就可以打开gitlab服务了

容器化的接口自动化持续集成框架_docker

服务部署好了之后,需要修改一下仓库的host和端口

find / -name gitlab.yml

vim /opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml

容器化的接口自动化持续集成框架_html_02

gitlab-ctl stop 停用gitlab

gitlab-ctl start 启动gitlab

注:此处只能重启git服务,而不能重启容器,否则配置文件会还原!

确认项目地址是虚拟机的host

容器化的接口自动化持续集成框架_环境变量_03

 

配置秘钥:

本地安装git工具,获取gitlab密钥

容器化的接口自动化持续集成框架_git_04

 

容器化的接口自动化持续集成框架_apache_05

 

添加项目组与项目,并设置成公开

 

容器化的接口自动化持续集成框架_git_06

 

本地克隆远程仓库并上传文件

 

容器化的接口自动化持续集成框架_docker_07

容器化的接口自动化持续集成框架_apache_08

 

二:部署jenkins

Docker pull registry.cn-hangzhou.aliyuncs.com/zhufc/jenkins:Jenkins

##拉取jenkins镜像

Docker run -d -p 8081:8080 registry.cn-hangzhou.aliyuncs.com/zhufc/jenkins:Jenkins

##启动jenkins容器

容器启动之后,浏览器就可以打开jenkins服务了

容器化的接口自动化持续集成框架_docker_09

 

docker exec -it ${容器id} bash

##  进入jenkins容器

cat /root/.jenkins/secrets/initialAdminPassword

## 获取jenkins密码

容器化的接口自动化持续集成框架_apache_10

密码解锁之后就可以正常操作jenkins了

 

三:linux下部署jmeter

  • 将本地的Jmeter工具包rz命令上传到服务器

  • 解压缩,opt目录下生成jmeter目录

  • 安装unzipapt-get install unzip

  • 解压缩:unzip apache-jmeter-3.2.zip

  • 配置Jmeter环境变量。vi /etc/profile,再添加如下变量

    export JMETER=/opt/apache-jmeter-3.2

    export PATH=$JMETER/bin:$PATH

  • 执行命令:source /etc/profile,配置的环境变量生效

  • 检查安装结果:jmeter  –v

     

    容器化的接口自动化持续集成框架_html_11

四:linux下部署ant

  •  apache-ant-1.9.9 上传并解压/opt目录下,方法同上面的jmeter

  • 配置Ant环境变量

        vi /etc/profile

  在末尾添加两句

        export Ant=/usr/local/apache-ant-1.9.9export PATH=$Ant/bin:$PATH

        source /etc/profile 

    ## 使配置的环境变量生效

输入 ant -v查看ant版本

  • jmeter/extras文件夹下的ant-jmeter-1.1.3.jar文件拷贝到ant/lib路径下

 

五:配置build.xml文件

build.xml文件安置在jenkins../.jenkins/workspace项目目录下,jenkins执行构建的时候直接去项目路径下找到构建脚本,并执行构建

容器化的接口自动化持续集成框架_apache_12

文件内容如下:

  •  
<?xml version="1.0" encoding="UTF-8"?><project name="Price" default="run" basedir="."> //定义项目名称<tstamp><format property="time" pattern="yyyyMMddhhmm" /> //定义时间戳</tstamp><property environment="env"/><property name="ReportName" value="TestReport" /> //定义报告名称<property name="workspace" value="/home/cttq/.jenkins/workspace/Price" /><!-- 需要改成自己的项目路径--> <property name="jmeter.home" value="/usr/tmp/apache-jmeter-3.2" /><!-- 需要改成liunx上jmeter的根目录--> <property name="jmeter.result.dir" value="${env.workspace}/resultLog/${env.BUILD_ID}" /><!-- jmeter生成jtl、html格式的结果报告的路径--> <property name="jmeter.result.jtlName"value="${jmeter.result.dir}/${ReportName}.jtl" /><property name="jmeter.result.htmlName"value="${jmeter.result.dir}/${ReportName}.html" /><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="mock.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"></fileset></copy></target></project>

六:jenkins配置插件

 

1:插件升级

离线的情况下,需要手动配置插件

容器化的接口自动化持续集成框架_html_13

 

容器化的接口自动化持续集成框架_apache_14

选择升级站点,填入  

http://mirror.xmission.com/jenkins/updates/update-center.json

容器化的接口自动化持续集成框架_docker_15

2:安装ant插件

 

容器化的接口自动化持续集成框架_docker_16

 

容器化的接口自动化持续集成框架_apache_17

容器化的接口自动化持续集成框架_docker_18

容器化的接口自动化持续集成框架_git_19

 

3:安装svn/git插件(原理相同)

 

容器化的接口自动化持续集成框架_docker_20

4:执行shell脚本

容器化的接口自动化持续集成框架_git_215:添加一个Email Extension Plugin 插件

容器化的接口自动化持续集成框架_git_22

容器化的接口自动化持续集成框架_apache_23

容器化的接口自动化持续集成框架_html_246:系统设置

管理员邮箱

容器化的接口自动化持续集成框架_git_25

smtp和系统邮箱

容器化的接口自动化持续集成框架_git_26

默认接收人和发送人

容器化的接口自动化持续集成框架_环境变量_27

邮件模板

容器化的接口自动化持续集成框架_apache_28

  •  
<!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://172.29.1.2/${BUILD_NUMBER}/计划V1.0自动化.html">http://172.29.1.2/${BUILD_NUMBER}/计划V1.0自动化.html</a></li>                                                    </ul>    <ul></ul>
</td> </tr> </table> </body> </html>

容器化的接口自动化持续集成框架_html_29

七:构建结果

通过build.xml文件执行构建,执行shell命令调用jmeter命令行生成测试报告,通过邮件发送指定人

容器化的接口自动化持续集成框架_docker_30