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

Easing into continuous deployment

Easing into continuous deployment

How we moved our team from static deployments into continuous deployment.

Chris Keathley

July 28, 2017
Tweet

More Decks by Chris Keathley

Other Decks in Programming

Transcript

  1. Generated Commands [{:add_todo, “Test Todo”, 1}, {:edit_todo, "Edited", 2}, {:delete_todo,

    "", 1}, {:add_todo, “New Todo", 3}, {:delete_todo, "", 2} {:edit_todo, “Edited Todo”, 2}]
  2. Generated Commands [{:add_todo, “Test Todo”, 1}, {:edit_todo, "Edited", 2}, {:delete_todo,

    "", 1}, {:add_todo, “New Todo", 3}, {:delete_todo, "", 2} {:edit_todo, “Edited Todo”, 2}]
  3. Generated Commands [{:add_todo, “Test Todo”, 1}, {:delete_todo, "", 2}] [{:add_todo,

    “Test Todo”, 1}, {:edit_todo, "Edited", 2}, {:delete_todo, "", 1}, {:add_todo, “New Todo", 3}, {:delete_todo, "", 2} {:edit_todo, “Edited Todo”, 2}]
  4. # Alert for any instance that have a 95th percentile

    > 200ms. ALERT APIHighRequestLatency IF api_http_request_latencies_second{quantile="0.95"} > 0.2 FOR 5m ANNOTATIONS { summary = "High request latency on {{ $labels.instance }}", description = "{{ $labels.instance }} has a median request latency above 1s (current value: {{ $value }}s)", }
  5. defmodule MyApp.FeatureFlags do alias MyApp.User def foo_enabled?(%User{staff: is_staff}), do: is_staff

    def foo_enabled?(_), do: false def bar_enabled?(%User{staff: is_staff}), do: is_staff def bar_enabled?(_), do: false end
  6. def index(conn) do users = experiment("users-query") |> control(&old_query/0) |> candidate(&new_query/0)

    |> candidate(&fancy_query/0) |> run render(conn, "index.json", users: users) end
  7. 1) Do the results match? 2) How long does each

    test take to return? Measure
  8. Lets remove a column 1) all application code needs to

    stop using that column 2) Update all ETL processes
  9. Lets remove a column 1) all application code needs to

    stop using that column 2) Update all ETL processes 3) Update Reporting
  10. Lets remove a column 1) all application code needs to

    stop using that column 2) Update all ETL processes 3) Update Reporting 4) Remove the column
  11. Lets remove a column 1) all application code needs to

    stop using that column 2) Update all ETL processes 3) Update Reporting 4) Remove the column Split all of these up
  12. defmodule Hedwig.Responders.Ping do use Hedwig.Responder @usage """ hedwig: ping -

    Responds with 'pong' """ respond ~r/ping$/i, msg do reply msg, "pong" end end