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镜像的更多相关文章

  1. 制作基于软盘的Linux系统

    制作基于软盘的Linux系统(张宏伟.欧阳平平 2001年07月26日 11:22) 嵌入式Linux由一个几百KB的kernel(内核)和一些根据需要进行定制的系统模块组成.由于Linux是开放源代 ...

  2. 制作JavaCV应用依赖的基础Docker镜像(CentOS7+JDK8+OpenCV4)

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  3. 通过IDEA制作包含Java应程序的Docker镜像

    IDEA官网在IDEA中把Java App制作成Docker镜像并启动一个容器运行 在idea上使用docker作为java的开发环境[][] ubuntu+docker+docker-compose ...

  4. 使用debootstrap制作debian-jessie系统docker镜像

    先看一下Docker官网提示:In general, you'll want to start with a working machine that is running the distribut ...

  5. 转:如何制作一个定制的 PHP 基础 Docker 镜像(一)

    原文来自于:http://open.daocloud.io/ru-he-zhi-zuo-yi-ge-ding-zhi-de-php-ji-chu-docker-jing-xiang/ 目标:准备一个定 ...

  6. 支持HTTP2的cURL——基于Alpine的最小化Docker镜像

    cURL是我喜欢的开源软件之一.虽然cURL的强大常常被认为是理所当然的,但我真心地认为它值得感谢和尊重.如果我们的工具箱失去了curl,那些需要和网络重度交互的人(我们大多数人都是这样的)将会陷入到 ...

  7. Docker容器打包成镜像 - OpenDaylight官方 SDN Hub Tutorial VM 的docker镜像

    由于工作需要,在看OpenDaylight (一个SDN的开源控制器) 官方Tutorial有一个比较基础且介绍比较详细的文档(http://sdnhub.org/tutorials/opendayl ...

  8. Docker源码分析(九):Docker镜像

    1.前言 回首过去的2014年,大家可以看到Docker在全球刮起了一阵又一阵的“容器风”,工业界对Docker的探索与实践更是一波高过一波.在如今的2015年以及未来,Docker似乎并不会像其他昙 ...

  9. Docker 镜像仓库为什么要分库分权限?

    先说一个事故案例: 场景:某大型互联网电商公司,使用一个镜像仓库管理所有Docker镜像.开发者打出的镜像上传到唯一的镜像库,测试通过后,运维环境的 Kubernetes 直接从这个库里拉取镜像,所有 ...

随机推荐

  1. Oracle给大数值添加逗号的分位符形如:9,999,999,999

    SELECT TO_CHAR(1231231123, '9,999,999,999') FROM dual; 1,231,231,123 SELECT TO_CHAR(1231231123, '9,9 ...

  2. 160706、Java HashMap工作原理及实现

    1. 概述 从本文你可以学习到: 什么时候会使用HashMap?他有什么特点? 你知道HashMap的工作原理吗? 你知道get和put的原理吗?equals()和hashCode()的都有什么作用? ...

  3. 用angular做的模糊搜索

    今天大家来试一试用angular做一下简单的搜索功能吧: 首先我们需要写html的部分,我们需要设置几个条件,比如按什么来排序,按升序还是降序搜索,和一个文本框来设置模糊搜索: <nav> ...

  4. 第04章—整合Mybatis

    spring boot 系列学习记录:http://www.cnblogs.com/jinxiaohang/p/8111057.html 码云源码地址:https://gitee.com/jinxia ...

  5. MyBatis动态代理查询出错

     org.apache.ibatis.exceptions.PersistenceException: ### Error querying database.  Cause: org.apache. ...

  6. 005-JSX简介以及使用

    一.概述 考虑这个变量声明: const element = <h1>Hello, world!</h1>; 标签语法既不是字符串也不是HTML. 它被称为JSX,它是Java ...

  7. HBA 卡和RAID 卡

    HBA卡: 只从HBA的英文解释HOST BUS ADAPTER(主机总线适配器)就能看出来,他肯定是给主机用的,一般HBA就是给主机插上后,给主机扩展出更多的接口,来连接外部的设备.大多数讲到HBA ...

  8. C语言-随机数

    C语言使用rand()函数产生随机数, 使用rand()函数之前要先使用srand(time(0)), 以当前时间作为种子, 否则产生的随机数将不会变化. #include <stdio.h&g ...

  9. [转]C#读写远程共享文件夹

    1.在服务器设置一个共享文件夹,在这里我的服务器ip地址是10.200.8.73,共享文件夹名字是share,访问权限,用户名是administrator,密码是11111111. 2.新建一个控制台 ...

  10. 转:css中!important的作用

    转:http://www.cnblogs.com/guoguo-15/archive/2011/08/24/2151859.html {*rule !important}这个css规则当今在网页制作的 ...