- A working software application can be usefully decomposed into four components: executable code, configuration, host environment, and data.
- In many software projects, release is a manually intensive process.
Create a Repeatable, Reliable Process for Releasing SoftwareAs releases become less fraught, it is easier to consider things like the agile ideal of a release at the end of each iteration. Even if that isn’t appropriate for a particular project, it means that we get our weekends back.These days, many companies are putting out multiple releases in a day. This is possible even with large projects with complex codebasesOur highest priority is to satisfy the customer through early and continuous delivery of valuable softwareWhen deployments aren’t fully automated, errors will occur every time they are performed.
Automatize-* Crif Tech Days 2012 Boris Bucha
Tech days 20111. Get it 2. Configure it3. Build it 4. Run it 5. Deploy it
“There should be two tasks for a human being toperform to deploy software into a development,test, or production environment: to pick theversion and environment and to press the“deploy” button.” [Continuous Delivery]
What we aim for?• Build application binaries – ant, make… √• Configuration (tools ??) X• Database (tools ??) X• Delivery (tools ??) X
VCS almighty• DB scripts … all configurations … deployment scripts … application source code EVERYTHING!
Antipattern #1• Manual Configuration Management of Production Environments – Hours to enable new team member – Hours to install any new environment – Hours to get WHY it doesn’t work on my PC ?!
Infrastructure as code• “Infrastructure as code is an approach whereby infrastructure configuration is scripted or described by files that are stored in version control, and changes are pushed out to the datacenter in a controlled manner. This parallels the discipline of source control and build promotion used in software development, hence ‘as code’” [http://www.thoughtworks.com/articles/technology- radar-january-2011]
Antipattern #2• Deploying Software Manually – Diffing Test DB with some “prod-like” DB – Long installation instructions – Long delivery cycles – Broken productions – Evenings / Weekends in office fixing
Deliver often• MVP hype [Agile-*, Lean-*] -> feedback• Incremental DB patches (*-Migrations libs)• Automatic package build –best documentation• Enterprise software on any unplugged laptop• Feature toggles (use feature branches not version branches) “If it hurst …”
So again1. Get it 2. Configure it3. Build it 4. Run it 5. Deploy it
Not there yet• Automatic setup of web applications (and services like Mystic) – mitigated by F5 execution• Visible dashboards• 100% host environment control (Puppet - http://projects.puppetlabs.com/projects/puppet)
• “Repeatability and reliability derive from two principles: automate almost everything, and keep everything you need to build, deploy, test, and release your application in version control.“ [Continuous Delivery]