Friday, July 25, 2014

a thought on deployments

An interesting topic is deployments.  When I was CTO at Enventum we used Fabric (ie: "run ssh commands"), but it was incredibly brittle. At another company we had a mountain of Chef. Alas no one who understood it wanted to help others actually re-use it to accelerate development.  I've done some pure Chef, and a bit of Puppet.  All of these technologies sound useful and powerful, but I've found they're completely outside the domain of the developer. There's no "re-use" of modules or concepts back and forth between the app and the installer. Not even languages.

This "stark division" might be inevitable, but here's a conceptual leap: developer system as part of a continuum. Right now source is edited in several dimensions, one being version control history. Perhaps another "runtime dimension" is audience. Like we do branches and pushes in Git, we can do promotions from dev to CI to staging to limited production to full production.  Developer's server is just a production server with a different set of feature flags.

Hmm. Requires more coffee.

EDIT:

Three Deployment Styles:

1) edit/run things on each server -- Fabric
2) system is a graph of properties, edit/adjust files/services to comply -- Chef/Puppet
3) each server booted from readonly "Golden Image", never update in place -- Immutable Infrastructure

No comments:

Post a Comment