制作基于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 直接从这个库里拉取镜像,所有 ...
随机推荐
- 【BZOJ4552】[Tjoi2016&Heoi2016]排序 二分+线段树
[BZOJ4552][Tjoi2016&Heoi2016]排序 Description 在2016年,佳媛姐姐喜欢上了数字序列.因而他经常研究关于序列的一些奇奇怪怪的问题,现在他在研究一个难题 ...
- 【BZOJ2208】[Jsoi2010]连通数 DFS
[BZOJ2208][Jsoi2010]连通数 Description Input 输入数据第一行是图顶点的数量,一个正整数N. 接下来N行,每行N个字符.第i行第j列的1表示顶点i到j有边,0则表示 ...
- IOS 计算本周的起至日期
unsigned units=NSMonthCalendarUnit|NSDayCalendarUnit|NSYearCalendarUnit|NSWeekdayCalendarUnit; NSCal ...
- [hihoCoder] 题外话·堆
A direct applicatin of the heap data structure. Specifically, a max heap is used. The required funct ...
- CSRF Laravel
Laravel 使得防止应用 遭到跨站请求伪造攻击变得简单. Laravel 自动为每一个被应用管理的有效用户会话生成一个 CSRF “令牌”,该令牌用于验证授权用 户和发起请求者是否是同一个人. 任 ...
- SQL 2005 分页存储过程
-- ============================================= -- Description: <高效分页存储过程,适用于Sql2005以上> -- ...
- Android Studio 启动时不自动打开项目
主界面中,选择单击菜单栏 File ,单击 Settings 选择 Appearance & Behavior 选项.选择System Settings选项.取消勾选Reopen last p ...
- Android学习十二---在android上实现图像匹配
一.效果图及功能描述 效果图 点击ShowImg后 点击match,然后点击showmatch,可以不断点击showmatch. 主要功能描述:显示在SD卡上已经存在的图片test.jpg,根据图片在 ...
- xcode中全文查询某个中文字
查询所有中文 [^"]*[\u4E00-\u9FA5]+[^"\n]*? 查询某个中文字“中”字 [^"]*[\u4e2d]+[^"\n]*? 中文字转成uni ...
- NoSQL选型及HBase案例详解(转)
从 NOSQL的类型到 常用的产品,我们已经做过很多关于NoSQL的文章,今天我们从国内著名的互联网公司及科研机构的实战谈一下NoSQL数据库. NoSQL一定程度上是基于一个很重要的原理—— CAP ...