publications/lca/index.html

315 lines
7.8 KiB
HTML

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en-US">
<head>
<meta name="generator" content=
"HTML Tidy for Linux/x86 (vers 1st November 2003), see www.w3.org" />
<title>OpenStack Project Continuous Integration and Launchpad</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="copyright" content=
"Copyright &#169; 2005-2010 W3C (MIT, ERCIM, Keio)" />
<meta name="duration" content="15" />
<meta name="font-size-adjustment" content="0" />
<link rel="stylesheet" href="styles/slidy.css" type="text/css" />
<link rel="stylesheet" href="styles/openstack.css" type="text/css" />
<script src="scripts/slidy.js" charset="utf-8" type="text/javascript">
</script>
<style>
div.slide ul {
font-size: 120%
}
</style>
</head>
<body>
<div class="background"><img alt="" id="head-icon"
src="graphics/open-stack-cloud-computing-logo-2.png" /></div>
<div class="slide cover title">
<!-- hidden style graphics to ensure they are saved with other content -->
<img class="hidden" src="graphics/bullet.png" alt="" />
<img class="hidden" src="graphics/fold.gif" alt="" />
<img class="hidden" src="graphics/unfold.gif" alt="" />
<img class="hidden" src="graphics/fold-dim.gif" alt="" />
<img class="hidden" src="graphics/nofold-dim.gif" alt="" />
<img class="hidden" src="graphics/unfold-dim.gif" alt="" />
<img class="hidden" src="graphics/bullet-fold.gif" alt="" />
<img class="hidden" src="graphics/bullet-unfold.gif" alt="" />
<img class="hidden" src="graphics/bullet-fold-dim.gif" alt="" />
<img class="hidden" src="graphics/bullet-nofold-dim.gif" alt="" />
<img class="hidden" src="graphics/bullet-unfold-dim.gif" alt="" />
<img src="graphics/openstack-cloud-software-vertical-large.png" alt="OpenStack logo"
class="cover" /><br clear="all" />
<h1>Scaling OpenStack Development with Git, Gerrit, and Jenkins</h1>
<p>
Monty Taylor
&lt;<a href="mailto:mordred@inaugust.com">mordred@inaugust.com</a>&gt;<br />
James E. Blair
&lt;<a href="mailto:corvus@inaugust.com">corvus@inaugust.com</a>&gt;<br />
</div>
<div class="slide">
<h1>Projects</h1>
<center>
<img src="images/lp-os-projects.png"/>
</center>
</div>
<div class="slide">
<h1>Contributors</h1>
<ul>
<li>Individual Contributors</li>
<li>Commercial Entities</li>
<li>Number, quality, and area of contributions can change daily</li>
</ul>
</div>
<div class="slide">
<h1>Release Management</h1>
<ul>
<li>Time Based Releases</li>
<li>Six Month Cadence<ul>
<li>Tied to Ubuntu Releases</li>
</ul><li>Design summits each cycle</li>
<li>Continuously Open Trunk<ul>
<li>Develop directly on master</li>
</ul><li>One Month Milestone Releases</li>
<li>Post-release Stable Branches</li>
</ul>
</div>
<div class="slide">
<h1>Vision</h1>
<ul>
<li>Consistent Tooling</li>
<li>Consistent Process</li>
<li>Consistent Product</li>
<li>Multiplier Effect</li>
</ul>
</div>
<div class="slide">
<h1>Consistent Tooling</h1>
<ul>
<li>Minimize meta-development</li>
<li>Process divergence == wasted developer time</li>
<li>Lowers onboarding time</li>
<li>Consolidate tool development</li>
<li>Minimize project-specific weird build crud</li>
</ul>
</div>
<div class="slide">
<h1>Development Infrastructure Systems</h1>
<ul>
<li>Gerrit (code review, git) <a href="http://review.openstack.org">http://review.openstack.org</a></li>
<li>Jenkins (CI, automation) <a href="http://jenkins.openstack.org">http://jenkins.openstack.org</a><ul>
<li>pre-merge testing</li>
<li>post-merge testing</li>
<li>post-merge artifact management</li>
</ul><li>Orchestra (bare metal deployment)</li>
<li>Launchpad (bugs, blueprints, releases, translations, SSO) <a href="http://launchpad.net/openstack">http://launchpad.net/openstack</a></li>
<li>Documentation servers</li>
<li>IRC bots</li>
<li>planet.openstack.org</li>
<li>Package repositories</li>
<li>Etherpad</li>
</ul>
</div>
<div class="slide">
<h1>Environment</h1>
<ul>
<li>Ubuntu</li>
<li>Python<ul>
<li>pep8 standards</li>
<li>openstack.common</li>
</ul><li>virtualenv/pip</li>
<li>IRC (#openstack-dev, #openstack-meeting)</li>
<li>devstack</li>
<li>gated trunk based on master</li>
</ul>
</div>
<div class="slide">
<h1>Gated Trunk</h1>
<ul>
<li>Ensures Code Quality</li>
<li>Protects developers<ul>
<li>Devs always start from working code</li>
</ul><li>Protects tree<ul>
<li>Bad code doesn't land</li>
</ul><li>Egalitarian<ul>
<li>Process is the same for everyone</li>
<li>Process is transparent</li>
<li>Process is automated</li>
</ul></ul>
</ul>
</div>
<div class="slide">
<h1>Everything Is Automated</h1>
<img src="images/jenkins-gate.png" />
</div>
<div class="slide">
<h1>Process Flow</h1>
<ul>
<li>Code is written and locally tested in a virtualenv</li>
<li>Code is submitted for code review to gerrit</li>
<li>Code is peer-reviewed</li>
<li>Code is accepted or rejected by core team</li>
<li>Code is run through pre-merge automated checks</li>
<li>Code is merged or rejected</li>
<li>Code is run through post-merge automated checks</li>
</ul>
</div>
<div class="slide">
<h1>Gerrit</h1>
<ul>
<li>Developed by Google for Android</li>
<li>Stand-alone patch review system</li>
<li>Integration points: hooks, JSON queries, event-stream</li>
<li>Extensible review categories, default: Verified, Code-Review</li>
</ul>
</div>
<div class="slide">
<h1>Pre-merge Check</h1>
<img src="images/gerrit-jenkins.png"/>
</div>
<div class="slide">
<h1>Approved Reviews</h1>
<img src="images/gerrit-approved.png"/>
</div>
<div class="slide">
<h1>Types of Jenkins Gerrit Triggers</h1>
<ul>
<li> Patchset uploaded </li>
<li> Change merged </li>
<li> Comment added (review state) </li>
</ul>
</div>
<div class="slide">
<h1>OpenID SSO Integration</h1>
<img src="images/gerrit-sso.png"/>
</div>
<div class="slide">
<h1>Bug Integration - Gerrit</h1>
<img src="images/gerrit-bug.png"/>
</div>
<div class="slide">
<h1>Bug Integration - Launchpad</h1>
<img src="images/lp-bug.png"/>
</div>
<div class="slide">
<h1>Blueprints - Gerrit</h1>
<img src="images/gerrit-bp.png"/>
</div>
<div class="slide">
<h1>Blueprints - Launchpad</h1>
<img src="images/lp-bp.png"/>
</div>
<div class="slide">
<h1>Blueprints - Gerrit Topics</h1>
<img src="images/gerrit-bp-topic.png"/>
</div>
<div class="slide">
<h1>Git Review</h1>
<ul>
<li>External Git subcommand</li>
<li>Developers can easily incorporate code review into git workflow</li>
<li>Zero-configuration</li>
<li>Can be used for any project, being adopted by other projects</li>
</ul>
</div>
<div class="slide">
<h1>Types of Tests</h1>
<ul>
<li> Unit tests </li>
<li> Functional tests
<ul>
<li> Can be run on real or virtual servers </li>
<li> Easy for developers to run </li>
</ul>
</li>
<li> Integration tests
<ul>
<li> May be able to run on virtual servers, should run on real servers </li>
<li> Difficult or impossible for a developer to run </li>
</ul>
</li>
</ul>
</div>
<div class="slide">
<h1>Integration Testing</h1>
<ul>
<li>Install and test code</li>
<li>Targets
<ul>
<li>Single cloud server</li>
<li>Multiple cloud servers</li>
<li>Bare metal machines
<ul>
<li>HP</li>
<li>Rackspace</li>
<li>Cisco</li>
<li>Citrix</li>
</ul></li>
</ul><li>Tests
<ul>
<li>tempest</li>
<li>bindings unittests (jclouds, libcloud, fog)</li>
</ul></li>
</ul>
</div>
<div class="slide">
<h1>Bare-metal Test process</h1>
<p>One time (Orchestra driven):</p>
<ul>
<li> PXE boot </li>
<li> Install Ubuntu </li>
<li> Install OpenStack de
<li> Snapshot LVM volume </li>
</ul>
<p>Each test:</p>
<ul>
<li> Kexec boot into LVM snapshot
<li> Install OpenStack </li>
<li> Run test suite </li>
</ul>
</div>
<div class="slide">
<h1>Thanks!</h1>
<p><img src="images/stack-o-pancakes-150x150.png"/>
</div>
</body>
</html>