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

Deploy like nobody is watching

bascht
March 11, 2015

Deploy like nobody is watching

Re-Run of my »Deployment« Talk for RubyShift Munich.

bascht

March 11, 2015
Tweet

More Decks by bascht

Other Decks in Technology

Transcript

  1. * { /* No idea what I'm cascading here… */

    color: 'Kornblumenblau' !important; }
  2. nginx::resource::upstream { 'here_be_dragons': members => [ 'lolcathost:8080', 'lolcathost:8081', 'lolcathost:8082', ],

    } nginx::resource::vhost { 'app.yournextstartup.com': proxy => 'http://here_be_dragons', }
  3. MANAGEMENT = :mediocre CUSTOMER = :opinionated def my_little_farm(requirements) engineering =

    :truly_optimistic trap("SIGINT") { ignore_those_admins } pray_for(some.kind_of? Wonder) ship! end
  4. gut metrics Who truly understands every base / helper /

    tools / domain class? Who understands your deployment process?
  5. Why not… deploy as often as possible? let the new

    employee deploy on her first day? deploy when nobody is watching?
  6. Are your problems bubbling up… …from app code? …from your

    server configuration? …during rollout? …because of poor orchestration?
  7. No more excuses. Infrastructure problem? File an issue Infrastructure change?

    Hand in a story App Changes need infrastructure changes? Orchestrate your rollouts.
  8. No commit without an issue id / feature branch. No

    major release without documentation in an issue.
  9. Sorry, but there is no one-size-fits-all solution. Quelle: GFDL image

    by user Fanghong. Creative Commons Attribution-Share Alike 3.0 Unported
  10. --Chet Ramey “ ... there are dark corners in the

    Bourne shell, and people use all of them. ”
  11. Build for the worst. Do your error pages cover every

    layer? Will every layer fail gracefully? Can you roll back? Should you roll back? Can you deactivate features? Can you afford to deliver stale content?
  12. Steal good ideas! $ curl -XGET 'lolcathost:9200/_cluster/health?pretty=true' { "cluster_name" :

    "prism_europe", "status" : "green", "timed_out" : false, "number_of_nodes" : 242, "number_of_data_nerds" : 242 "active_primary_shards" : 50, "active_shards" : 100, "people_actually_reading_this_slide": 1, "relocating_shards" : 0, "initializing_shards" : 0 }
  13. Use obvious tools. var casper = require('casper').create(); var baseurl =

    casper.cli.get("baseurl") || 'http://bascht.com'; casper.start(baseurl, function() { this.capture('shots/homepage.png'); this.test.assertTitle('bascht.com'); this.test.assertExists('input[action$="/search"]', 'Yay!'); this.clickLabel('Blog', 'a'); });
  14. See how things work out. # ~/.bash_login rm ~/.bash_history &&

    sync; echo "They never fail who die, In a great cause! Lord Byron"; echo "Welcome to $(hostname).";
  15. Sebastian Schulze (@bascht / @bscht) , 29.years Software- & infrastructure

    developer Vogtland, Leipzig, Köln, Berlin, Munich Thank you! Twitter / Github / ADN: @bascht