Zuul - The Gatekeeper
Zuul is, among other things, Cross-repo project gating at a massive scale
OpenStack Needed testing
- Large distributed system made of smaller pieces
- Functional testing is not enough -- each service is interdependent on others
- Zomg 900+ developers 40+ orgs all collaborating!
Zuul was developed at this scale
- 1500+ active test nodes at once
- Jenkins was sad -- so we removed it
- Ansible offers a perfect distributed workflow system for running multi-node tests
Features that you can use
- Gerrit and Github Code Review triggering/commenting/voting
- Git based configuration
- Speculative merging for high-velocity gating
- Custom image building/reuse (via Nodepool)
- Multi-Region/Multi-Cloud (via Nodepool)
- Easy multi-node testing
- Massively Scalable
- Cross-repo and Cross-source speculative merge gating
- In-repo secret encryption
YAML config in-repo or centralized defines config
- project:
name: ansible/ansible
third-party-check:
jobs:
- shade-ansible-devel-functional-devstack:
files:
- ^lib/ansible/modules/cloud/openstack/.*
- ^contrib/inventory/openstack.py
- ^lib/ansible/plugins/inventory/openstack.py
- ^lib/ansible/module_utils/openstack.py
- ^lib/ansible/utils/module_docs_fragments/openstack.py
Easy Multi-Node testing
- job:
parent: base
name: test-kolla-ansible
run: kolla_ansible/main.yml
nodeset:
nodes:
- name: meta-api
label: kolla-centos7
- name: cell-api
label: kolla-centos7
- name: db
label: kolla-centos7
- name: mq
label: kolla-centos7
- name: hypervisor
label: kolla-centos7
Easy Multi-Node testing
- name: "Setup docker on servers that will need it."
hosts: cap,map,hv
roles:
- docker
- name: "Setup database on db server."
hosts: db
roles:
- db
- name: "Setup rabbit on mq server."
hosts: mq
roles:
- mq
That's right, it's Webscale
Cross-Repo Dependency Controls
- Make one change depend on another
- Build speculative cross-repo change-set and test the changes together without merging them
- Allows engineers to "fire and forget" on a PR, no merge until it will actually work!
- Struggles with circular deps, you must unroll to use the feature