Automated django deployment
March 19, 2010 – 17:02We at 42 Coffee Cups do alot of django projects. Additionally I care about developer staffing, which means one more test project per candidate.
That totals to about 20 commercial and internal projects any time and 10-15 test projects.
That’s not a trivial amount and, given we deploy projects onto testing/staging server after each feature integration, the time spent in deployment is rather big. Last informal survey showed that PM doing the integration work, spends 10% to 50% of his time reviewing and deploying updates!
Of course, we automated it to the point of executing make deploy
but I’ve always wondered of other options. Especially given the virtues of Continuous Deployment we would love to enjoy on every project.
Right now under the hood of make deploy
we have scripts that
- tag a version in a git repository
- create a version archive
- upload it to server
- unpack and play with symlinks to mark this version current
What’s missing is:
- automated db migration
- automated server restart
- fallback if something goes wrong
- automated creation and management of versioned environment
So I’ve researched the area a bit and come down to the following DIY solutions:
- manage dependencies via
pip
- virtualize the package environment either via
virtualenv
orbuildout
- deploy with
fabric
Am I missing something, trendy or not?
Perhaps there are commercial (SaaS?) solutions available that I’ve not been able to dig out?
What’s your experience in this regard?