现在的位置: 首页 > 综合 > 正文

OpenStack CI测试之devstack-gate ( by quqi99 )

2014年01月14日 ⁄ 综合 ⁄ 共 3749字 ⁄ 字号 评论关闭

                                                                                         OpenStack CI测试之devstack-gate ( by quqi99 )

作者:张华 写于:发表于:2012-06-30
版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明

( http://blog.csdn.net/quqi99 )

           在openstack中有一个CI测试 ( https://github.com/openstack-ci/devstack-gate ),openstack使用git做为版本控制,gerrit作为代码评审工具,jekins作为CI工具。gerrit与jekins作了集成,就是说当有代码提交评审时,会自动触发CI过程(这个设置可见
https://jenkins.openstack.org/view/Tempest/job/gate-tempest-devstack-vm/configure
 )。然后devstack-gate会自动从一个openstack云上部署一个新的虚机,然后再这个新虚机安安装必要的软件、下载openstack-ci-puppet工程的代码、下载openstack的代码,最后将这个虚机做个快照做为模板。触发CI测试后,就会从这些已经准备好的虚机中调用devstack脚本分布式安装openstack环境,最后运行$devstack/exersise.sh脚本执行一些基本的单元测试和功能测试(或者是执行tempest工程的功能测试)

          下面具体说说在一台机器上运行它的流程。

           前提条件:

          1)devstack-gate只支持ubuntu

          2)需要一个openstack云,那就用devstack脚本迅速准备一个吧。我在运行devstack时准备的localrc文件如下,所有的组件安装在一台ubuntu的虚机上。

                 HOST_IP=192.168.100.171
MYSQL_PASSWORD=password
RABBIT_PASSWORD=password
SWIFT_HASH=ADMIN
SERVICE_TOKEN=ADMIN
SERVICE_PASSWORD=password
ADMIN_PASSWORD=password
MYSQL_PASSWORD=password
UPLOAD_LEGACY_TTY=True
DEST=/bak/openstack

FIXED_RANGE=10.0.1.0/24
FIXED_NETWORK_SIZE=256

FLOATING_RANGE=192.168.100.224/27
TEST_FLOATING_RANGE=192.168.100.96/27

ENABLED_SERVICES="g-api,g-reg,key,n-api,n-cpu,n-net,n-sch,n-vnc,horizon,mysql,rabbit,openstackx,q-svc,quantum,q-agt"
Q_PLUGIN=openvswitch
LIBVIRT_FIREWALL_DRIVER=nova.virt.firewall.NoopFirewallDriver
SERVICE_HOST=192.168.100.171
MYSQL_HOST=192.168.100.171
RABBIT_HOST=192.168.100.171
HOST_IP=192.168.100.171
FLAT_INTERFACE=eth0
VLAN_INTERFACE=eth0

SKIP_EXERCISES=boot_from_volume,client-env,swift

          

          步骤:

          首先,因为我在测试机上不想安装jekins,想用它调试,所以加环境变量

         

export WORKSPACE=/home/jenkins/workspace
export DEVSTACK_GATE_PREFIX=wip-
export SKIP_DEVSTACK_GATE_PROJECT=1
export SKIP_DEVSTACK_GATE_JENKINS=1
export GERRIT_BRANCH=master
export GERRIT_PROJECT=testing

         1)在mysql上准备数据库, 将$devstack-gate/vmdatabase.py中的修改下列代码:

               #        engine = create_engine('sqlite:///%s' % path, echo=False)
               engine = create_engine('mysql://root:password@localhost/devstackgate', echo=True)

              然后运行 python vmdatabase.py 命令即可创建数据库。

         2) 初始化数据,里面有下面5张表:

                provider, openstack云的连接信息,它需要云openstack云上创建虚机,创建snapshot模板,这个表,我使用的初始数据如下 ( provider的名字叫quqi, 下面要用):

                                 '1', 'quqi', '1', '0', '1.1', '0', 'admin', 'password', 'http://192.168.100.171:5000/v2.0', 'admin', 'compute', 'RegionOne', 'Compute Service'

                base_image, 你要使用openstack云上哪个镜像云创建虚机,我使用的初始数据如下(使用tty这个镜像):

                                  '1', '1', 'tty', 'tty', '1', '128'

                snapshot_image, devstack-vm-update-image.py脚本会根据base_image所指定的镜像在provider表中所指定的openstack云上创建虚机,然后在虚机上装一些东西,然后将它做个快照之后作为模板使用,这个表存储模板信息,不需要初始化数据。

                machine, devstack-vm-launch.py脚本会定期根据上面的模板创建一些虚机备用,这些备用的虚机信息存在这个表中,不需要初始化数据

                result,出错后写日志的地方

        3) ./devstack-vm-update-image.sh quqi 准备模板镜像

        4)  ./devstack-vm-launch.py quqi 定期准备测试用的虚机

        5)./devstack-vm-gate-dev.sh <IP> 想在上面的哪台虚机上做测试,这里的<IP>就填它,这句会自动调用devstack脚本在你指定的虚机上创建openstack测试环境

        6) ok

        如果不想准备虚机,只是想用devstack-gate脚本做一下测试的话,只需要:

                export WORKSPACE=/bak/tmp/workspace
export DEVSTACK_GATE_PREFIX=wip-
export SKIP_DEVSTACK_GATE_PROJECT=1
export GERRIT_BRANCH=master
export GERRIT_PROJECT=testing
export JOB_NAME=test
export BUILD_NUMBER=42
export GERRIT_CHANGE_NUMBER=1234
export GERRIT_PATCHSET_NUMBER=1
export NODE_IP_ADDR=192.168.100.171

        rsync -az --delete /bak/openstack/ /bak/tmp/workspace/  (这句不是必须的,因为我机器上已经在/bak/openstack目录有devstack和openstack的代码,网速太慢不想重下花时间,我才直接将它copy 到测试目录/bak/tmp/workpace下)

        最后执行devstack-vm-gate.sh脚本会自动调用execises.sh进行测试(它受localrc文件中的SKIP_EXERCISES=boot_from_volume,client-env,swift参数的控制)

    

         

             

        

           

抱歉!评论已关闭.