Ops for Everyone

Efc09baeb94ed440b185710062c8956d?s=47 John Britton
September 28, 2013

Ops for Everyone

At GitHub, system administration is a first class citizen. Changes are collaboratively developed, peer reviewed, revision controlled, and ship with tests. Automation isn't just for production; we apply the same techniques to our individual developer workstations. In this talk, I'll give you a sneak peek into how a GitHub developer experiences Ops. We'll start with setting up a new machine using Boxen and jump right into the specifics of how to deploy and ship a new feature using the "ChatOps" shared command line. I will show you how we deploy configuration changes to individual and groups of hosts. We'll finish up with a look at how GitHub instruments application performance and exceptions to make it easy to spot newly introduced issues.

Video with Japanese translation: http://vimeo.com/76414801

Efc09baeb94ed440b185710062c8956d?s=128

John Britton

September 28, 2013
Tweet

Transcript

  1. OPS FOR EVERYONE

  2.  johndbrion

  3. I THOUGHT OPS WAS JUST FOR NECKBEARDS I WAS WRONG

  4. FIRST PRINCIPLES:

  5. COLLABORATION

  6. AUTOMATION

  7. EXPERIMENTATION

  8. DISTRIBUT-ATION?

  9. HOW DO WE DO IT?

  10. BOXEN

  11. HUBOT

  12. BOXEN

  13. ELIMINATE FRICTION BOXEN MAKES IT POSSIBLE TO BUILD SOMETHING MEANINGFUL

    ON DAY ONE
  14. DAY ONE

  15. INSTALL XCODE COMMAND LINE TOOLS

  16. $ curl -s https://example.com/script/boxen.sh > /tmp/ install-boxen; bash /tmp/install-boxen |

    sh
  17.  GRAB A BEVERAGE

  18. HOMEBREW, GIT, GCC, .DEV DNS, NGINX, RBENV, RUBY-BUILD, MANY RUBIES,

    NODENV, MANY NODES, HEROKU TOOLCHAIN, HUB, MYSQL, POSTGRESQL, ELASTICSEARCH, RIAK, JAVA
  19. $ boxen github

  20. YOU’VE GOT GITHUB, NOW GO WRITE SOME CODE

  21. PROJECT MANIFEST

  22. class projects::education-web { github::project { 'education-web': dotenv => true, elasticsearch

    => true, redis => true, ruby => '1.9.3-p231-tcs-github', postgresql => [ 'education_web_development', 'education_web_test' ] } }
  23. PERSONAL MANIFEST

  24. class people::johndbritton { # boxen/puppet-osx include osx::dock::autohide include osx::dock::clear_dock include

    osx::dock::disable include osx::finder::unhide_library include osx::global::enable_keyboard_control_access include osx::software_update include osx::universal_access::ctrl_mod_zoom # applications include adium include caffeine include chrome include dropbox include firefox include flux include onepassword include sequel_pro include sublime_text_2 include transmission include vlc package { 'Bartender':
  25. class people::johndbritton { # boxen/puppet-osx include osx::dock::autohide include osx::dock::clear_dock include

    osx::dock::disable include osx::finder::unhide_library include osx::global::enable_keyboard_control_access include osx::software_update include osx::universal_access::ctrl_mod_zoom # applications include adium include caffeine include chrome include dropbox include firefox include flux include onepassword include sequel_pro include sublime_text_2 include transmission include vlc package { 'Bartender': provider => 'compressed_app', source => 'http://www.macbartender.com/Demo/Bartender.zip';
  26. include osx::dock::autohide include osx::dock::clear_dock include osx::dock::disable include osx::finder::unhide_library include osx::global::enable_keyboard_control_access

    include osx::software_update include osx::universal_access::ctrl_mod_zoom # applications include adium include caffeine include chrome include dropbox include firefox include flux include onepassword include sequel_pro include sublime_text_2 include transmission include vlc package { 'Bartender': provider => 'compressed_app', source => 'http://www.macbartender.com/Demo/Bartender.zip'; 'SublimeText3': provider => 'appdmg', source => 'http://c758482.r82.cf2.rackcdn.com/Sublime%20Text%20Build%203047.dmg'; } # homebrew
  27. include chrome include dropbox include firefox include flux include onepassword

    include sequel_pro include sublime_text_2 include transmission include vlc package { 'Bartender': provider => 'compressed_app', source => 'http://www.macbartender.com/Demo/Bartender.zip'; 'SublimeText3': provider => 'appdmg', source => 'http://c758482.r82.cf2.rackcdn.com/Sublime%20Text%20Build%203047.dmg'; } # homebrew package { ['grc', 'iftop', 'watch', 'wget']: } # shell include zsh $home = "/Users/${::boxen_user}" $src = "${::boxen_srcdir}" $my = "${src}/johndbritton" $dotfiles = "${my}/dotfiles"
  28. provider => 'compressed_app', source => 'http://www.macbartender.com/Demo/Bartender.zip'; 'SublimeText3': provider => 'appdmg',

    source => 'http://c758482.r82.cf2.rackcdn.com/Sublime%20Text%20Build%203047.dmg'; } # homebrew package { ['grc', 'iftop', 'watch', 'wget']: } # shell include zsh $home = "/Users/${::boxen_user}" $src = "${::boxen_srcdir}" $my = "${src}/johndbritton" $dotfiles = "${my}/dotfiles" # oh-my-zsh repository { 'oh-my-zsh': source => 'robbyrussell/oh-my-zsh', path => "${src}/robbyrussell/oh-my-zsh", require => File[$src] } file { "${home}/.zshrc": ensure => link, target => "${dotfiles}/zshrc"
  29. source => 'http://c758482.r82.cf2.rackcdn.com/Sublime%20Text%20Build%203047.dmg'; } # homebrew package { ['grc', 'iftop',

    'watch', 'wget']: } # shell include zsh $home = "/Users/${::boxen_user}" $src = "${::boxen_srcdir}" $my = "${src}/johndbritton" $dotfiles = "${my}/dotfiles" # oh-my-zsh repository { 'oh-my-zsh': source => 'robbyrussell/oh-my-zsh', path => "${src}/robbyrussell/oh-my-zsh", require => File[$src] } file { "${home}/.zshrc": ensure => link, target => "${dotfiles}/zshrc" } # github projects include projects::education-web
  30. $home = "/Users/${::boxen_user}" $src = "${::boxen_srcdir}" $my = "${src}/johndbritton" $dotfiles

    = "${my}/dotfiles" # oh-my-zsh repository { 'oh-my-zsh': source => 'robbyrussell/oh-my-zsh', path => "${src}/robbyrussell/oh-my-zsh", require => File[$src] } file { "${home}/.zshrc": ensure => link, target => "${dotfiles}/zshrc" } # github projects include projects::education-web }
  31. IT’S JUST PUPPET, FOR YOUR MAC

  32. HUBOT

  33. SHARE THE TERMINAL HUBOT MAKES IT POSSIBLE TO TEST, SHIP,

    AND MEASURE EVERYTHING
  34. CHATOPS

  35. NOBODY CAN SEE WHAT COMMANDS ARE RUN ON THE TERMINAL

  36. IT’S HARD FOR NEW HIRES TO FIGURE OUT HOW TO

    DEPLOY
  37. THINK OF CHAT AS A SHARED COMMAND LINE

  38. CHATOPS SURFACES OPERATIONS THAT WOULD OTHERWISE BE INVISIBLE

  39. NEWCOMERS LEARN BY WATCHING EXPERIENCED USERS

  40. TEST

  41. /CI BUILD

  42. None
  43. None
  44. SHIP

  45. /CONFIG

  46. None
  47. None
  48. /DEPLOY

  49. None
  50. /HOSTS

  51. None
  52. /PUPPET RUN

  53. None
  54. MEASURE

  55. /GRAPH ME

  56. None
  57. None
  58. FUN COMMANDS

  59. /WHERE IS

  60. None
  61. None
  62. /FITBIT ME

  63. None
  64. /NEW HIRE ME

  65. None
  66. /ANIMATE ME

  67. None
  68.  johndbrion