Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Ops for Everyone

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

John Britton

September 28, 2013
Tweet

More Decks by John Britton

Other Decks in Programming

Transcript

  1. OPS FOR EVERYONE

    View Slide

  2.  johndbrion

    View Slide

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

    View Slide

  4. FIRST PRINCIPLES:

    View Slide

  5. COLLABORATION

    View Slide

  6. AUTOMATION

    View Slide

  7. EXPERIMENTATION

    View Slide

  8. DISTRIBUT-ATION?

    View Slide

  9. HOW DO WE DO IT?

    View Slide

  10. BOXEN

    View Slide

  11. HUBOT

    View Slide

  12. BOXEN

    View Slide

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

    View Slide

  14. DAY ONE

    View Slide

  15. INSTALL XCODE
    COMMAND LINE TOOLS

    View Slide

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

    View Slide

  17.  GRAB A BEVERAGE

    View Slide

  18. HOMEBREW, GIT, GCC, .DEV DNS, NGINX,
    RBENV, RUBY-BUILD, MANY RUBIES,
    NODENV, MANY NODES, HEROKU
    TOOLCHAIN, HUB, MYSQL,
    POSTGRESQL, ELASTICSEARCH, RIAK,
    JAVA

    View Slide

  19. $ boxen github

    View Slide

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

    View Slide

  21. PROJECT
    MANIFEST

    View Slide

  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'
    ]
    }
    }

    View Slide

  23. PERSONAL
    MANIFEST

    View Slide

  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':

    View Slide

  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';

    View Slide

  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

    View Slide

  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"

    View Slide

  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"

    View Slide

  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

    View Slide

  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
    }

    View Slide

  31. IT’S JUST PUPPET, FOR YOUR MAC

    View Slide

  32. HUBOT

    View Slide

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

    View Slide

  34. CHATOPS

    View Slide

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

    View Slide

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

    View Slide

  37. THINK OF CHAT AS A SHARED
    COMMAND LINE

    View Slide

  38. CHATOPS SURFACES OPERATIONS
    THAT WOULD OTHERWISE BE INVISIBLE

    View Slide

  39. NEWCOMERS LEARN BY
    WATCHING EXPERIENCED USERS

    View Slide

  40. TEST

    View Slide

  41. /CI BUILD

    View Slide

  42. View Slide

  43. View Slide

  44. SHIP

    View Slide

  45. /CONFIG

    View Slide

  46. View Slide

  47. View Slide

  48. /DEPLOY

    View Slide

  49. View Slide

  50. /HOSTS

    View Slide

  51. View Slide

  52. /PUPPET RUN

    View Slide

  53. View Slide

  54. MEASURE

    View Slide

  55. /GRAPH ME

    View Slide

  56. View Slide

  57. View Slide

  58. FUN COMMANDS

    View Slide

  59. /WHERE IS

    View Slide

  60. View Slide

  61. View Slide

  62. /FITBIT ME

    View Slide

  63. View Slide

  64. /NEW HIRE ME

    View Slide

  65. View Slide

  66. /ANIMATE ME

    View Slide

  67. View Slide

  68.  johndbrion

    View Slide