OpenStack DevStack项目:从Zuul V2迁移CI任务到V3的完整指南
前言
随着OpenStack持续集成系统的演进,Zuul从V2版本升级到了V3版本。这一变化带来了更强大的功能,特别是通过Ansible角色实现的任务部分重用和任务间的继承能力。本文将详细介绍如何将DevStack相关的CI任务从Zuul V2迁移到V3原生格式。
Zuul V3任务定义的位置
在Zuul V3中,任务定义可以放在包含被测试代码的代码库中。对于OpenStack服务来说,这意味着:
- 可以将基于DevStack的CI任务定义在服务代码所在的代码库中
- 对于无分支的代码库(如Tempest插件),这是存放任务定义的理想位置,因为任务变更不需要向后移植
示例:
- job:
name: myplugin-tests-tempest
description: 运行来自MyPlugin的Tempest测试
parent: devstack-tempest
选择基础任务
根据你的测试需求,可以选择不同的基础任务作为起点:
1. 仅需要DevStack部署的OpenStack云(不运行Tempest测试)
- devstack任务:适用于单节点和多节点任务,包含集成门禁中使用的服务列表(keystone、glance、nova、cinder、neutron和swift)
- devstack-base任务:类似于devstack但不指定任何必需的代码库或服务,适合需要非常精简的DevStack设置
2. 需要DevStack部署并运行Tempest测试
- devstack-tempest任务:适用于单节点和多节点任务,可以通过切换子任务中使用的nodeset实现不同拓扑
任务自定义选项
无需编写Ansible代码即可实现的自定义:
- DevStack服务:添加/移除服务
- 配置:添加或修改DevStack和服务配置
- 插件:安装DevStack插件
- 节点扩展:增加子节点数量(仅限多节点)
- 日志:定义要上传的额外日志文件和目录
- 日志格式:定义要重写为.txt的日志文件扩展名
对于Tempest任务,还可以:
- 定义使用的Tempest tox环境
- 定义测试并发度
- 定义测试正则表达式
任务变量设置
在Zuul V3中,变量可以在三个位置添加:
- job.vars:全局变量,对所有节点可用
- job.host-vars.[HOST]:仅对指定主机可用的变量
- job.group-vars.[GROUP]:仅对指定组可用的变量
Zuul通过任务继承合并字典变量。主机和组变量会覆盖同名的全局变量。
DevStack Gate标志迁移
原CI系统使用DevStack、Tempest和devstack-gate的组合来设置测试环境。在Zuul V3中,devstack-gate的逻辑被移到了不同的代码库中。下表展示了如何将DEVSTACK_GATE_*标志映射到新系统:
| 原标志 | 新实现方式 | |--------|------------| | OVERRIDE_ZUUL_BRANCH | 在任务定义中使用override-checkout: [branch] | | DEVSTACK_GATE_NET_OVERLAY | 使用多节点桥接角色设置br-infra桥 | | DEVSTACK_CINDER_VOLUME_CLEAR | 在job.vars的devstack_localrc中设置CINDER_VOLUME_CLEAR | | DEVSTACK_GATE_NEUTRON | 默认启用,可通过禁用devstack_services中的所有neutron服务来关闭 | | DEVSTACK_GATE_CONFIGDRIVE | 在devstack_localrc中设置FORCE_CONFIG_DRIVE | | DEVSTACK_GATE_INSTALL_TESTONLY | 在devstack_localrc中设置INSTALL_TESTONLY_PACKAGES | | DEVSTACK_GATE_VIRT_DRIVER | 在devstack_localrc中设置VIRT_DRIVER | | DEVSTACK_GATE_LIBVIRT_TYPE | 在devstack_localrc中设置LIBVIRT_TYPE |
未迁移的标志
部分标志尚未迁移或被视为遗留标志:
- DEVSTACK_GATE_TOPOLOGY:正在开发中,拓扑取决于使用的基础任务和关联的nodeset
- DEVSTACK_GATE_GRENADE:将在grenade代码库中实现
- DEVSTACK_GATE_IRONIC系列标志:可能在ironic侧实现
- DEVSTACK_GATE_POSTGRES:已通过post角色支持,被视为遗留标志
- DEVSTACK_GATE_ZEROMQ等:在devstack-gate中无实际效果,被视为遗留标志
最佳实践
- 优先使用现有角色:充分利用DevStack提供的角色、play和任务
- 合理使用继承:通过任务继承减少重复配置
- 逐步迁移:先确保基本功能可用,再逐步添加高级特性
- 测试验证:迁移后仔细验证任务行为是否符合预期
通过遵循这些指南,你可以顺利将DevStack相关的CI任务从Zuul V2迁移到V3,并充分利用新版本提供的强大功能。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考