花了一个月把这一套自动化持续集成框架整合完毕,内容较为复杂,大家需要静下心花个把月来领悟。
容器化的 jenkins 服务
容器化的 gitlab 服务
容器化的 jmeter+ant 构建执行环境
容器化的 nginx+php 环境
jmeter 客户端
jenkin 客户端及各种插件
gitlab 客户端
直接 docker 启动 gitlab,端口从默认的 80 映射出来即可
docker run -d -p 8081:80 registry.cn-hangzhou.aliyuncs.com/zhufc/gitlab-ce-zh:zhu2
1: 修改端口
进入 git 容器,找到配置文件,将默认的 host 和端口修改为本机的即可
vim /opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml
2: 重启 gitlab
gitlab-ctl stop 停用 gitlab
gitlab-ctl start 启动 gitlab
确认服务和 git 仓库的 host 保持一致即可
1:需要安装两个客户端,TortoiseGit-2.5.0.0-64bit和Git-2.7.1.2-64-bit。一键式安装
2:Gitgui 下获取密钥
3:将密钥配置到 gitlab 远程服务中
4:本地克隆一个远程 git 仓库
5:将脚本通过 commit&push 提交到远程仓库中
直接 docker 启动 jenkins,端口从默认的 8080 映射出来即可
docker run -d -p 8081:8080 registry.cn-hangzhou.aliyuncs.com/zhufc/jenkins:Jenkins
1:容器中获取密码
2:安装升级插件
离线的情况下,手动配置插件
在升级站点中填入:http://mirror.xmission.com/jenkins/updates/update-center.json点击提交
需要安装以下插件:
ant,gitlab,email,“” ssh“”
1、将本地的 Jmeter 工具包用 rz 命令上传到服务器
2、解压缩,在 opt 目录下生成 jmeter 目录
3、安装 unzip:apt-get install unzip
4、解压缩:unzip apache-jmeter-3.2.zip
6、配置 Jmeter 环境变量。vi /etc/profile,再添加如下变量:
export JMETER=/opt/apache-jmeter-3.2
export PATH=$JMETER/bin:$PATH
7、执行命令:source /etc/profile,配置的环境变量生效
8、检查安装结果:jmeter –v
1:将 apache-ant-1.9.9 上传并解压到/opt 目录下,方法同上面的 jmeter
2:配置 Ant 环境变量。vi /etc/profile。在末尾添加两句
export Ant=/usr/local/apache-ant-1.9.9
export PATH=$Ant/bin:$PATH
3:source /etc/profile 使配置的环境变量生效
4:输入 ant -v 查看 ant 版本
5:将 jmeter/extras 文件夹下的 ant-jmeter-1.1.3.jar 文件拷贝到 ant/lib 路径下
在 workspace 下的项目文件夹中添加 build.xml 文件
xml 内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<project name="opms1" default="run" basedir=".">
<tstamp>
<format property="time" pattern="yyyyMMddhhmm" />
</tstamp>
<property environment="env"/>
<property name="test" value="opms"/>
<property name="report.title" value="${test}测试报告"/>
<property name="ReportName" value="${test}" />
<property name="WORKSPACE" value="/root/.jenkins/workspace/opms1" />
<property name="jmeter.home" value="/opt/apache-jmeter-3.2" />
<property name="jmeter.result.dir" value="${env.WORKSPACE}/resultLog/${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" />
<!-- Should report include response data for failures? -->
<property name="show-data" value="n"/>
<property name="format" value="2.1"/>
<condition property="style_version" value="_21">
<equals arg1="${format}" arg2="2.1"/>
</condition>
<condition property="funcMode">
<equals arg1="${show-data}" arg2="y"/>
</condition>
<condition property="funcMode" value="false">
<not>
<equals arg1="${show-data}" arg2="y"/>
</not>
</condition>
<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">
<echo>funcMode = ${funcMode}</echo>
<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=""test.jmx" />
<property name="jmeter.save.saveservice.output_format" value="xml"/>
<property name="jmeter.save.saveservice.assertion_results" value="all"/>
<property name="jmeter.save.saveservice.bytes" value="true"/>
<property name="file_format.testlog" value="${format}"/>
<property name="jmeter.save.saveservice.response_data.on_error" value="${funcMode}"/>
</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" depends="xslt-report,copy-images">
<echo>Report generated at ${report.datestamp}</echo>
</target>
<target name="xslt-report" depends="_message_xalan">
<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-detail-report_21.xsl">
<param name="showData" expression="${show-data}"/>
<param name="titleReport" expression="${report.title}"/>
<param name="dateReport" expression="${report.datestamp}"/>
</xslt>
</target>
<!-- Copy report images if needed -->
<target name="copy-images" depends="verify-images" unless="samepath">
<copy file="${jmeter.home}/extras/expand.png" tofile="${jmeter.result.dir}/expand.png"/>
<copy file="${jmeter.home}/extras/collapse.png" tofile="${jmeter.result.dir}/collapse.png"/>
</target>
<target name="verify-images">
<condition property="samepath">
<equals arg1="${env.WORKSPACE}" arg2="${jmeter.home}" />
</condition>
</target>
<!-- Check that the xalan libraries are present -->
<condition property="xalan.present">
<and>
<!-- No need to check all jars; just check a few -->
<available classpathref="xslt.classpath" classname="org.apache.xalan.processor.TransformerFactoryImpl"/>
<available classpathref="xslt.classpath" classname="org.apache.xml.serializer.ExtendedContentHandler"/>
</and>
</condition>
<target name="_message_xalan" unless="xalan.present">
<echo>Cannot find all xalan and/or serialiser jars</echo>
<echo>The XSLT formatting may not work correctly.</echo>
<echo>Check you have xalan and serializer jars in ${lib.dir}</echo>
</target>
</project>
1:ant 环境变量
2:GIT 插件配置
3:shell 插件
执行 shell 这一部分脚本可以选择注释掉
4:邮件插件
添加一个 Email Extension Plugin 插件
添加默认接收人和发送人的邮件地址
5:系统邮箱设置
添加发送人邮件
添加 smtp 服务器地址和发送人的邮箱密码(smtp 密钥)
配置默认接收人的邮箱地址
配置邮件默认内容
此处需要将默认内容中 url 通过 nginx 指向服务器