Continuous Delivery at Netflix

29,678 views

Published on

A high level view of how Netflix culture, open source technology, and custom software can build a continuous delivery pipeline to allow multiple deployments a day.

Published in: Technology

Continuous Delivery at Netflix

  1. 1. Continuous Delivery at Netflix Speed at Scale Monday, December 23, 13
  2. 2. Rob Spieldenner Senior Software Engineer on Engineering Tools at Netflix @robspieldenner -> Twitter Monday, December 23, 13
  3. 3. Netflix Culture Monday, December 23, 13
  4. 4. Culture Deck http://jobs.netflix.com/ Monday, December 23, 13
  5. 5. Freedom & Responsibility Monday, December 23, 13
  6. 6. Context, not Control Monday, December 23, 13
  7. 7. Self Service Monday, December 23, 13
  8. 8. Developers on call for their services Monday, December 23, 13
  9. 9. Netflix OSS http://netflix.github.io/ Monday, December 23, 13
  10. 10. OODA Loop - Observe, Orient, Decide, Act Monday, December 23, 13
  11. 11. Continuous Delivery Pipeline Commit Monday, December 23, 13 Build Unit Test Bake Deploy To Test Integration & Acceptance Tests Red/Black Push
  12. 12. Commit and Code Review Monday, December 23, 13
  13. 13. Build simplify build file with plugins add metadata calculate version output jar/war, sources, javadoc, rpm/deb Monday, December 23, 13
  14. 14. Ant build.xml <project name="example"> <property environment="env"/> <import file="${env.CBF_HOME}/library.xml"/> </project> ivy.xml list dependencies list publications Monday, December 23, 13
  15. 15. Gradle build.gradle apply plugin: ‘nebula’ publications { JAR JAVADOC SOURCES } dependencies { testCompile ‘junit:junit:4.+’ } Monday, December 23, 13
  16. 16. Jenkins Monday, December 23, 13
  17. 17. Job-DSL https://wiki.jenkins-ci.org/display/JENKINS/Job+DSL +Plugin Monday, December 23, 13
  18. 18. Job DSL Example example def project = 'quidryan/aws-sdk-test' def branchApi = new URL(“https://api.github.com/repos/${project}/branches”) def branches = new groovy.json.JsonSlurper().parse(branchApi.newReader()) branches.each { def branchName = it.name job { name “${project}-${branchName}”.replaceAll(‘/’, ‘-’) scm { git(“git://github.com/${project}.git”, branchName) } steps { gradle(‘test’) } } } Monday, December 23, 13
  19. 19. Bake Monday, December 23, 13
  20. 20. aminator https://github.com/Netflix/aminator Monday, December 23, 13
  21. 21. chef for base image Monday, December 23, 13
  22. 22. Apply deb/rpm, snapshot Monday, December 23, 13
  23. 23. Unit of deployment Monday, December 23, 13
  24. 24. Deploy Monday, December 23, 13
  25. 25. Asgard https://github.com/Netflix/asgard Monday, December 23, 13
  26. 26. Monday, December 23, 13
  27. 27. UI or REST API Monday, December 23, 13
  28. 28. Canary Deploys Monday, December 23, 13
  29. 29. Red / Black Push Monday, December 23, 13
  30. 30. Testing Webdriver Geb Betamax and manual Monday, December 23, 13
  31. 31. Monitoring How many people are watching? Can the new version handle load? Errors and logging suro, jmx Monday, December 23, 13
  32. 32. Alert on issues Monday, December 23, 13
  33. 33. Maybe automatic rollback Monday, December 23, 13
  34. 34. Resiliency / Anti-Fragility Monday, December 23, 13
  35. 35. Simian Army https://github.com/Netflix/SimianArmy Chaos Monkey Chaos Gorilla Chaos Kong Latency Monkey Janitor Monkey Conformity Monkey Monday, December 23, 13
  36. 36. Assume services will break, disappear, slow Monday, December 23, 13
  37. 37. Books Monday, December 23, 13
  38. 38. Other Presentations Adrian Cockcroft Flowcon Keynote - Velocity and Volume (or Speed Wins) - http://www.youtube.com/ watch?v=wyWI3gLpB8o Roy Rapoport - Cloud Operations at Netflix - http:// www.youtube.com/watch?v=7779Wrun5fo AWS re:Invent - http://reinvent.awsevents.com/ recap2013.html Monday, December 23, 13
  39. 39. Netflix is Hiring http://jobs.netflix.com/ Monday, December 23, 13

×