制作基于Buildbot的自动化测试系统Docker镜像
Buildbot in Docker
前言
最近使用Buildbot做了一个自动测试的框架,为了部署方便,可以把测试框架做成Docker镜像,方便部署。这里记录下过程,供大家参考。
项目介绍
项目是一个Online的基于http的交易系统,其实就是一个Ad Exchange。然后为了对它进行自动化测试,我们会另外启动一个mock server模拟DSP,然后再启动一个mock client来向exchange发送请求,exchange会与后端DSP通讯后得到最终结果并且返回给client,client通过对收到结果的校验来进行测试。
另外,我们希望当exchange,mock client,mock dsp以及测试数据中的任意一个更新时,都去跑一遍完整的测试流程。
关键点
- 如何启动server
buildbot里直接启动web server会导致buildbot持续等待进程结束,无法到下一步。而这里我们需要启动exchange和mock dsp两个server。处理办法就是把这两个server利用supervisor来做成service,这样buildbot只需要作为一个client发出start/end命令即可。具体实施时,需要在docker镜像生成时去写supervisor的conf文件,添加service。而在buildbot进行build时,去调用supervisorctl start/end命令启停service。
Dockerfile以及master.cfg
- Dockerfile
from ubuntu:14.04
run /bin/echo -e "\
deb http://mirrors.163.com/ubuntu/ trusty main multiverse restricted universe\n\
deb http://mirrors.163.com/ubuntu/ trusty-security main multiverse restricted universe\n\
deb http://mirrors.163.com/ubuntu/ trusty-updates main multiverse restricted universe\n\
deb http://mirrors.163.com/ubuntu/ trusty-proposed universe restricted multiverse main\n\
deb http://mirrors.163.com/ubuntu/ trusty-backports main multiverse restricted universe" >\
/etc/apt/sources.list
run apt-get update
run DEBIAN_FRONTEND=noninteractive apt-get install -y python-pip python-dev \
git sudo ssh nodejs npm supervisor lsof python3-setuptools python3-dev python3-pip
run pip install buildbot buildbot_slave
首先加入国内源,以及安装必须软件。我们的测试系统是基于python的,所以加入了python3的一些依赖。
run ln -s /usr/bin/nodejs /usr/bin/node
run mkdir /programs
workdir /programs
#install mock dsp && mock client
run git clone https://***.git
run git clone https://***.git
run cd mockdsp; python3 setup.py install
run cd mockclient; python3 setup.py install
这里mock dsp和client都会自动安装到系统path中,方便以后调用。
run mkdir -p /data/buildbot
workdir /data/buildbot
#create master
run buildbot create-master master
ADD master.cfg master/master.cfg
#create slaves
run buildslave create-slave exchange localhost:9989 exchange exchange
安装buildbot,并且添加自己写的master.cfg。
#write supervisor configuration file
run /bin/echo -e "\
[program:exchange]\n\
command=npm start\n\
directory=/data/buildbot/exchange/builder-exchange/exchange\n\
autostart=false\n\
\n\
[program:mockDsp]\n\
command=/usr/local/bin/mockDsp\n\
directory=/tmp\n\
\n\
[program:master]\n\
command=twistd --nodaemon --no_save -y buildbot.tac\n\
directory=/data/buildbot/master\n\
\n\
[program:slave]\n\
command=twistd --nodaemon --no_save -y buildbot.tac\n\
directory=/data/buildbot/exchange\n" > \
/etc/supervisor/conf.d/buildbot.conf
把exchange, mockDSP都做成service,另外buildbot master和buildbot slave是肯定要做成service的,这样可以在一个docker中运行他们。
cmd ["/usr/bin/supervisord", "-n"]
启动supervisor。
- master.cfg
基本的配置比如slaves,端口,codebases我就不贴出来了。这里列出就列出supervisor启动用的Steps
####### BUILD STEPS
factory = util.BuildFactory()
...
factory.addStep(steps.ShellCommand(
command=['supervisorctl', 'start', 'exchange']
, description="starting exchange"
, descriptionDone="start exchange"
, workdir="exchange"))
factory.addStep(steps.ShellCommand(
command=["supervisorctl","restart","mock"]
, description="restarting rmock"
, descriptionDone="rmock restarted"
, workdir="rmock"))
#跑完测试后
factory.addStep(steps.ShellCommand(
command=["supervisorctl", "stop", "exchange"]
, descriptionDone="shutdown exchange"
, workdir="testData"))
#mock server会一直运行
然后把image build出来运行就行啦,就这么简单!
制作基于Buildbot的自动化测试系统Docker镜像的更多相关文章
- 制作基于软盘的Linux系统
制作基于软盘的Linux系统(张宏伟.欧阳平平 2001年07月26日 11:22) 嵌入式Linux由一个几百KB的kernel(内核)和一些根据需要进行定制的系统模块组成.由于Linux是开放源代 ...
- 制作JavaCV应用依赖的基础Docker镜像(CentOS7+JDK8+OpenCV4)
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- 通过IDEA制作包含Java应程序的Docker镜像
IDEA官网在IDEA中把Java App制作成Docker镜像并启动一个容器运行 在idea上使用docker作为java的开发环境[][] ubuntu+docker+docker-compose ...
- 使用debootstrap制作debian-jessie系统docker镜像
先看一下Docker官网提示:In general, you'll want to start with a working machine that is running the distribut ...
- 转:如何制作一个定制的 PHP 基础 Docker 镜像(一)
原文来自于:http://open.daocloud.io/ru-he-zhi-zuo-yi-ge-ding-zhi-de-php-ji-chu-docker-jing-xiang/ 目标:准备一个定 ...
- 支持HTTP2的cURL——基于Alpine的最小化Docker镜像
cURL是我喜欢的开源软件之一.虽然cURL的强大常常被认为是理所当然的,但我真心地认为它值得感谢和尊重.如果我们的工具箱失去了curl,那些需要和网络重度交互的人(我们大多数人都是这样的)将会陷入到 ...
- Docker容器打包成镜像 - OpenDaylight官方 SDN Hub Tutorial VM 的docker镜像
由于工作需要,在看OpenDaylight (一个SDN的开源控制器) 官方Tutorial有一个比较基础且介绍比较详细的文档(http://sdnhub.org/tutorials/opendayl ...
- Docker源码分析(九):Docker镜像
1.前言 回首过去的2014年,大家可以看到Docker在全球刮起了一阵又一阵的“容器风”,工业界对Docker的探索与实践更是一波高过一波.在如今的2015年以及未来,Docker似乎并不会像其他昙 ...
- Docker 镜像仓库为什么要分库分权限?
先说一个事故案例: 场景:某大型互联网电商公司,使用一个镜像仓库管理所有Docker镜像.开发者打出的镜像上传到唯一的镜像库,测试通过后,运维环境的 Kubernetes 直接从这个库里拉取镜像,所有 ...
随机推荐
- centos 6.5 安装图形界面【转】
最近想在centos 6.5上安装图形界面,在网上找到了方法.[原文链接] CentOS6相对于CentOS5的安装有了不少的进步,有不少默认的选项可以选择,如: Desktop :基本的桌面系统,包 ...
- 【BZOJ3439】Kpm的MC密码 Trie树+可持久化线段树
[BZOJ3439]Kpm的MC密码 Description 背景 想Kpm当年为了防止别人随便进入他的MC,给他的PC设了各种奇怪的密码和验证问题(不要问我他是怎么设的...),于是乎,他现在理所当 ...
- Webservice工作原理及实例
Web Service工作原理及实例 一.Web Service基本概念 Web Service也叫XML Web Service WebService是一种可以接收从Internet或者In ...
- [LintCode] 正则表达式匹配
class Solution { public: /** * @param s: A string * @param p: A string includes "." and &q ...
- Pycharm如何取消自动换行
1.只对当前文件有效的操作是: 菜单栏->View -> Active Editor -> Use Soft Wraps (不选中) 2.要是想对所有文件都起到效果,就要在setti ...
- String trim 坑 对于ascii码为160的去不掉
大家在使用string 的trim去除空格的时候,要注意一个坑呀,对于ascii码为160的去不掉 import java.util.Arrays; /** * Created by bjchen ...
- jQuery选择器-常用
jQuery选择器-常用 1.基本选择器 $("#id") //ID选择器 $("div") //元素选择器 $(".classname") ...
- Python高级教程-sorted
Python中的排序算法 排序是程序中经常用到的算法.通常规定,对于两个元素x和y,如果认为x<y,则返回-1,如果认为x == y,则返回0,如果认为x > y,则返回1,这样,排序算法 ...
- python web框架 Django的APP以及目录介绍 django 1.11版本
如果有很多业务请求函数 应该放在app目录 很多业务放在主站上 当用户一点跳到分站 例如 一个项目叫运维平台 他的业务 有资产管理 私有云 监控 不同业务线 chouti项目 - chouti - ...
- System.Core, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e, Retargetable=Yes”
“System.Core, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e, Retargetable=Yes” 或 ...