在openstack中有一个CI测试 ( https://github.com/openstack-ci/devstack-gate ),openstack使用git做为版本控制,gerrit作为代码评审工具,jekins作为CI工具。gerrit与jekins作了集成,就是说当有代码提交评审时,会自动触发CI过程(这个设置可见 https://jenkins.openstack.org/
下面具体说说在一台机器上运行它的流程。
前提条件:
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参数的控制)