To the moon!
But first to the cloud

TechOps

Staging

Development

Production

Playground

TechOps

  • Our individual accounts
  • Serves as gateway for all others

Development

  • Running services for local development
    • mjml
    • a full back-end for FE devs?
  • Full Access to all developers

Staging

  • For internal testing / QA
  • Read-only access to all developers

Production

  • The real thing
  • Accessible only to admins

Playground

  • For everyone
  • Get your hands dirty & break things

Sandbox

Oh, we may need a Sandbox one as well

 

(same as production,
but with testnets and stuff)

Local

Development

bin/setup

bin/server

bin/client

bin/test

(almost) Painless environment variables

config :foo, Bar,
  api_key: System.get_env("FOO")
config :foo, Bar,
  api_key: {:system, "FOO"}
defmodule Bar
  defp api_key
    System.get_env("FOO")
  end
end
defmodule Bar
  @api_key System.get_env("FOO")
end

Compile-time vs Run-time

Local Production Server

Coming soon

  • Run the whole stack locally
  • With docker
  • For manual testing

Continuous Integration

  • Build on every push
     
  • Measure Code coverage
     
  • Periodically run a longer test suite
    • Dyalizer
    • Maybe end-to-end tests?
    • Maybe UI regression tests?
       
  • Publish a production-ready Docker image
    (only for master builds)

CircleCI

Services

http://mjml.dev-utrust.com

 

http://deriver.dev-utrust.com

 

http://merchants.dev-utrust.com

Standardized Log entries

{
  "app_id": "mjml_webservice"
  "timestamp": "2018-01-01-01:01:01",
  "git_hash": "abcdefg",
  "env": "production",
  "type": "http",
  "correlation_id": "abcdefg",
  "content": { "text": "Hello, world!" }
}
GET /ref

{
  "app_id" => "mjml_webservice",
  "git_hash" => "abcdefg"
}

Debugging & healthcheck endpoint

Questions?

UTRUST

By Miguel Palhas

UTRUST

  • 286