Continuous deployment


Published on

A brief talk

Published in: Technology
  • Be the first to comment

  • Be the first to like this

No Downloads
Total views
On SlideShare
From Embeds
Number of Embeds
Embeds 0
No embeds

No notes for slide

Continuous deployment

  1. 1. Continuous Deployment Stephen Donner / James Socol September 13, 2011 Mozilla All-Hands
  2. 2. What is Continuous Deployment?  
  3. 3. TRUST vs FEAR  
  4. 4. Why do we need/want it?  Where do we plan on going? <ul><li>From : </li></ul><ul><li>  </li></ul><ul><ul><li>Pushing code to production needs to be automated , for all but the biggest, downtime-requiring changes. </li></ul></ul><ul><ul><li>We need to expand automated test coverage to include our front-end and JavaScript code. </li></ul></ul><ul><ul><li>Our code reviews and standards will need to be even higher . </li></ul></ul><ul><ul><li>We’ll need to redefine the relationship between development and QA . </li></ul></ul><ul><ul><li>When there are problems, we need the agility to respond quickly and the focus to learn from them and improve. </li></ul></ul><ul><ul><li>We’ll need to be able to dark launch and flip on features , preferably with the flexibility to test with small groups. </li></ul></ul><ul><ul><li>We’ll need to reevaluate our branch management and staging environments . </li></ul></ul><ul><ul><li>We’ll need to rethink how we organize and prioritize work . </li></ul></ul>
  5. 5. WebQA's initial thoughts/questions: <ul><ul><li>Pretty radical change (fear): </li></ul></ul><ul><ul><ul><li>&quot;What's wrong with our current setup/weekly release cycle?&quot; </li></ul></ul></ul><ul><ul><ul><li>&quot;There goes our Selenium test suite&quot; </li></ul></ul></ul><ul><ul><ul><li>&quot;So we'll be relegated to manual testers?&quot; </li></ul></ul></ul><ul><ul><ul><li>&quot;Developers are going to test everything?&quot;  &quot;o rly...&quot; </li></ul></ul></ul><ul><ul><ul><li>&quot;How are we going to measure quality?&quot; </li></ul></ul></ul><ul><ul><ul><li>&quot;What happens to environmental testing?&quot; </li></ul></ul></ul>
  6. 6. What were we doing before? <ul><ul><li>Development: </li></ul></ul><ul><ul><ul><li>unit tests </li></ul></ul></ul><ul><ul><li>WebQA: </li></ul></ul><ul><ul><ul><li>manual testing </li></ul></ul></ul><ul><ul><ul><ul><li>Litmus, ad-hoc, regression testing </li></ul></ul></ul></ul><ul><ul><ul><li>Selenium test suites, running on: </li></ul></ul></ul><ul><ul><ul><ul><li>trunk/dev </li></ul></ul></ul></ul><ul><ul><ul><ul><li>staging </li></ul></ul></ul></ul><ul><ul><ul><ul><li>production </li></ul></ul></ul></ul><ul><ul><li>IT: </li></ul></ul><ul><ul><ul><li>Etherpad writeup of the deployment steps </li></ul></ul></ul><ul><ul><ul><ul><li>deploy scripts </li></ul></ul></ul></ul>
  7. 7. A shift in our (WebQA) understanding <ul><ul><li>Realized we now: </li></ul></ul><ul><ul><ul><li>have to maintain fewer Selenium tests </li></ul></ul></ul><ul><ul><ul><li>have the impetus to increase development/QA collaboration on automation, and testing in general </li></ul></ul></ul><ul><ul><ul><li>can better-test features in real-world conditions (production), safely </li></ul></ul></ul><ul><ul><ul><li>can and should better-collaborate with the community </li></ul></ul></ul>
  8. 8. Where are we today?  What tools are we using? <ul><ul><li>Development: </li></ul></ul><ul><ul><ul><li>Django waffle to manage features via flags </li></ul></ul></ul><ul><ul><ul><li>Graphite along with StatsD to visualize business-logic in near real-time </li></ul></ul></ul><ul><ul><ul><li>Oremj's commander to deploy </li></ul></ul></ul><ul><ul><li>WebQA: </li></ul></ul><ul><ul><ul><li>Much fewer, more purposeful, and better-placed Selenium tests (we've been whittling away at them, have more to go) </li></ul></ul></ul><ul><ul><li>  </li></ul></ul><ul><ul><li>  </li></ul></ul><ul><ul><li>  </li></ul></ul>
  9. 9. StatsD and Graphite <ul><li>StatsD - Front End for Graphite </li></ul><ul><ul><li>Aggregate and average metrics </li></ul></ul><ul><ul><li>Provide UDP endpoint </li></ul></ul><ul><li>Graphite </li></ul><ul><ul><li>RRD </li></ul></ul><ul><ul><li>Pretty Graphs </li></ul></ul>
  10. 10. Graphite <ul><li>Allows us to monitor user/system interactions in real-time </li></ul>
  11. 11. Django Waffle <ul><li>Feature Flags </li></ul><ul><li>Turn site features on/off for </li></ul><ul><ul><li>Users </li></ul></ul><ul><ul><li>Groups </li></ul></ul><ul><ul><li>Percentage of users </li></ul></ul><ul><li>Throttle and roll out new features </li></ul><ul><ul><li>Test under real-world use cases </li></ul></ul><ul><ul><li>Address issues before general rollout </li></ul></ul>
  12. 13. What's left to do? <ul><ul><li>Merge WebQA's Jenkins with Webdev's, at the very least </li></ul></ul><ul><ul><li>Land Selenium tests into the Kitsune repo on GitHub </li></ul></ul><ul><ul><li>Post-commit hook running of Selenium tests (key off SCM) </li></ul></ul><ul><ul><li>Push to dev/stage from Jenkins </li></ul></ul><ul><ul><li>Run Qunit on all the major browsers </li></ul></ul><ul><ul><li>Green/red push-button deployment (Chief) </li></ul></ul>