© MIRANTIS 2013 PAGE© MIRANTIS 2013
OpenStack -
development
and testing
processes
Ruslan Kamaldinov
© MIRANTIS 2013 PAGE
OpenStack community
• More than a hundred commercial entities
• More than a thousand individual contributors
• 700-1000 patch-set per day
• ~250 commits per day
© MIRANTIS 2013 PAGE
OpenStack community
* all projects, including stackforge and openstack-infra
© MIRANTIS 2013 PAGE
OpenStack community
© MIRANTIS 2013 PAGE
Code review - Gerrit
• Raise bus factor
• Ensure code readability
• Catch bugs
• Everybody gets reviewed (no exceptions)
© MIRANTIS 2013 PAGE
Workflow
© MIRANTIS 2013 PAGE
Project gating
• Automated testing
• Ensures code quality
• Protects developers
• Protects source tree
• Process is the same for everyone
© MIRANTIS 2013 PAGE
Project gating
© MIRANTIS 2013 PAGE
Project gating
© MIRANTIS 2013 PAGE
Project gating
© MIRANTIS 2013 PAGE
Zuul
• Interfaces with Gerrit and Jenkins
• Listens for events from Gerrit and launches
Jenkins jobs
• Allows parallel testing of serialized changes
© MIRANTIS 2013 PAGE
Zuul
- name: openstack/sahara
template:
- name: python-jobs
- name: check-requirements
- name: integrated-gate-sahara
check:
- gate-sahara-pylint
post:
- hook-sahara-rtfd
- sahara-upstream-translation-update
pre-release:
- sahara-tarball
- hook-sahara-rtfd
release:
- sahara-tarball:
- hook-sahara-rtfd
© MIRANTIS 2013 PAGE
Zuul
project-templates:
- name: python-jobs
check:
- 'gate-{name}-pep8'
- 'gate-{name}-docs'
- 'gate-{name}-python26'
- 'gate-{name}-python27'
gate:
- 'gate-{name}-docs'
- 'gate-{name}-pep8'
- 'gate-{name}-python26'
- 'gate-{name}-python27'
post:
- '{name}-branch-tarball'
- '{name}-coverage'
© MIRANTIS 2013 PAGE
Jenkins Job Builder
Jenkins Job Builder is a system for configuring
Jenkins jobs using simple YAML files stored in
Git.
© MIRANTIS 2013 PAGE
Jenkins Job Builder
- project:
name: sahara
github-org: openstack
node: bare-precise
tarball-site: tarballs.openstack.org
doc-publisher-site: docs.openstack.org
jobs:
- python-jobs
- gate-{name}-pylint
- hook-{name}-rtfd
- pypi-jobs
- translation-jobs
- openstack-publish-jobs
© MIRANTIS 2013 PAGE
Jenkins Job Builder
- job-template:
name: 'gate-{name}-pep8'
builders:
- revoke-sudo
- gerrit-git-prep
- pep8:
github-org: '{github-org}'
project: '{name}'
publishers:
- console-log
node: '{node}'
© MIRANTIS 2013 PAGE
Resources
● http://ci.openstack.org/
● https://git.openstack.org/cgit/openstack-infra/config/tree/
● https://git.openstack.org/cgit/openstack-infra/zuul/tree
● https://git.openstack.org/cgit/openstack-infra/jenkins-job-builder/tree
● #openstack-infra at freenode.net
● #openstack-dev at freenode.net
● #openstack-sahara at freenode.net
● http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
● http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-infra
© MIRANTIS 2013 PAGE
Q&A

6.1

  • 1.
    © MIRANTIS 2013PAGE© MIRANTIS 2013 OpenStack - development and testing processes Ruslan Kamaldinov
  • 2.
    © MIRANTIS 2013PAGE OpenStack community • More than a hundred commercial entities • More than a thousand individual contributors • 700-1000 patch-set per day • ~250 commits per day
  • 3.
    © MIRANTIS 2013PAGE OpenStack community * all projects, including stackforge and openstack-infra
  • 4.
    © MIRANTIS 2013PAGE OpenStack community
  • 5.
    © MIRANTIS 2013PAGE Code review - Gerrit • Raise bus factor • Ensure code readability • Catch bugs • Everybody gets reviewed (no exceptions)
  • 6.
    © MIRANTIS 2013PAGE Workflow
  • 7.
    © MIRANTIS 2013PAGE Project gating • Automated testing • Ensures code quality • Protects developers • Protects source tree • Process is the same for everyone
  • 8.
    © MIRANTIS 2013PAGE Project gating
  • 9.
    © MIRANTIS 2013PAGE Project gating
  • 10.
    © MIRANTIS 2013PAGE Project gating
  • 11.
    © MIRANTIS 2013PAGE Zuul • Interfaces with Gerrit and Jenkins • Listens for events from Gerrit and launches Jenkins jobs • Allows parallel testing of serialized changes
  • 12.
    © MIRANTIS 2013PAGE Zuul - name: openstack/sahara template: - name: python-jobs - name: check-requirements - name: integrated-gate-sahara check: - gate-sahara-pylint post: - hook-sahara-rtfd - sahara-upstream-translation-update pre-release: - sahara-tarball - hook-sahara-rtfd release: - sahara-tarball: - hook-sahara-rtfd
  • 13.
    © MIRANTIS 2013PAGE Zuul project-templates: - name: python-jobs check: - 'gate-{name}-pep8' - 'gate-{name}-docs' - 'gate-{name}-python26' - 'gate-{name}-python27' gate: - 'gate-{name}-docs' - 'gate-{name}-pep8' - 'gate-{name}-python26' - 'gate-{name}-python27' post: - '{name}-branch-tarball' - '{name}-coverage'
  • 14.
    © MIRANTIS 2013PAGE Jenkins Job Builder Jenkins Job Builder is a system for configuring Jenkins jobs using simple YAML files stored in Git.
  • 15.
    © MIRANTIS 2013PAGE Jenkins Job Builder - project: name: sahara github-org: openstack node: bare-precise tarball-site: tarballs.openstack.org doc-publisher-site: docs.openstack.org jobs: - python-jobs - gate-{name}-pylint - hook-{name}-rtfd - pypi-jobs - translation-jobs - openstack-publish-jobs
  • 16.
    © MIRANTIS 2013PAGE Jenkins Job Builder - job-template: name: 'gate-{name}-pep8' builders: - revoke-sudo - gerrit-git-prep - pep8: github-org: '{github-org}' project: '{name}' publishers: - console-log node: '{node}'
  • 17.
    © MIRANTIS 2013PAGE Resources ● http://ci.openstack.org/ ● https://git.openstack.org/cgit/openstack-infra/config/tree/ ● https://git.openstack.org/cgit/openstack-infra/zuul/tree ● https://git.openstack.org/cgit/openstack-infra/jenkins-job-builder/tree ● #openstack-infra at freenode.net ● #openstack-dev at freenode.net ● #openstack-sahara at freenode.net ● http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev ● http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-infra
  • 18.