OpenStack logo

How OpenStack Improves Code Quality with Project Gating and Zuul

James E. Blair <jeblair@openstack.org>

About this Presentation

most insane CI infrastructure I've ever been a part of

— Alex Gaynor

About this Presentation

OpenStack

Is open source software for building private and public clouds.

Projects

https://wiki.openstack.org/wiki/Projects

Contributors

Consistent Tooling

Project Gating

Everything Is Automated

Process Flow

Gerrit

States of a Patch

Types of Gerrit Triggers

Job Feedback

Jenkins

Types of jobs:

Zuul

Speculative Execution

Zuul Simulation

Check Pipeline

pipelines:
  - name: check
    manager: IndependentPipelineManager
    precedence: low
    trigger:
      gerrit:
        - event: patchset-created
    success:
      gerrit:
        verified: 1
    failure:
      gerrit:
        verified: -1

Gate Pipeline

pipelines:
  - name: gate
    manager: DependentPipelineManager
    precedence: high
    trigger:
      gerrit:
        - event: comment-added
          approval:
            - approved: 1
    start:
      gerrit:
        verified: 0
    success:
      gerrit:
        verified: 2
        submit: true
    failure:
      gerrit:
        verified: -2

Post-Merge Pipeline

pipelines:
  - name: post
    manager: IndependentPipelineManager
    trigger:
      gerrit:
        - event: ref-updated
          ref: ^(?!refs/).*$

Experimental Pipeline

pipelines:
  - name: experimental
    precedence: low
    trigger:
      gerrit:
        - event: comment-added
          comment_filter: (?i)^\s*check experimental\s*$
    success:
      gerrit:
        force-message: true
    failure:
      gerrit:
        force-message: true

Silent Pipeline

pipelines:
  - name: silent
    manager: IndependentPipelineManager
    trigger:
      gerrit:
        - event: patchset-created

Release Pipelines

pipelines:
  - name: release
    manager: IndependentPipelineManager
    precedence: high
    trigger:
      gerrit:
        - event: ref-updated
          ref: ^refs/tags/([0-9]+\.)+[0-9]+$

  - name: pre-release
    manager: IndependentPipelineManager
    precedence: high
    trigger:
      gerrit:
        - event: ref-updated
          ref: ^refs/tags/([0-9]+\.)+[0-9]*(alpha|beta|candidate|rc|a|b|c|r|g)[0-9]*$

Periodic Pipeline

  - name: periodic
    description: Jobs in this queue are triggered on a timer.
    manager: IndependentPipelineManager
    precedence: low
    trigger:
      timer:
        - time: '0 6 * * *'

Zuul Project Configuration

projects:
  - name: openstack/nova
    check:
      - gate-nova-pep8
      - gate-nova-docs
      - gate-nova-python27
      - gate-tempest-devstack-vm-full
    gate:
      - gate-nova-pep8
      - gate-nova-docs
      - gate-nova-python27
      - gate-tempest-devstack-vm-full
    experimental:
      - gate-devstack-vm-cells
    silent:
      - gate-tempest-devstack-vm-large-ops
    post:
      - nova-branch-tarball
      - nova-coverage
      - nova-docs
      - nova-upstream-translation-update
    pre-release:
      - nova-tarball
    release:
      - nova-tarball
      - nova-docs
    periodic:
      - nova-propose-translation-update
      - periodic-nova-python27-stable-folsom
      - periodic-nova-python27-stable-grizzly

Zuul Change Queues

Projects with shared jobs automatically get a shared queue:

projects:
  - name: openstack/nova
    gate:
      - gate-nova-python27
      - gate-tempest-devstack-vm

  - name: openstack/glance
    gate:
      - gate-glance-python27
      - gate-tempest-devstack-vm

Status View

Launcher: Gearman

Triggers / Reporters

Development / Contributing

Thanks!

These slides available at: https://github.com/openstack-ci/publications