In agile teams and a fast paced working environments maintaining always working software can a big challenge. But is also expected from software developers. Web application developers are expected to fix bugs and develop new features quickly while the software works and can be released to a global audience in minutes. How can we enable this?
Continuous Integration means that the software is continuously checked without developer inference. After each push, after each commit. This gives developers and product owners a good feeling about the software stability and the ability to release software often and early.
Continuous Delivery is built on top of Continuous Integration and means that the software is automatically or semi-automatically deployed very regularly. In many scenarios it is possible to deploy an application multiple times per day or even per hour.
You can find research on how Continuous Integration & Delivery is beneficial to your team and organization here. The key points are:
Firms with high-performing IT organizations were twice as likely to exceed their profitability, market share and productivity goals.
The use of continuous delivery practices including version control, continuous integration, and test automation predicts higher IT performance.
Continuous Delivery measurably reduces both deployment pain and team burnout.
The process of setting up Continuous Integration & Delivery is not trivial and involves a couple of steps:
There is no sense in starting with Continuous Integration without automated tests since you must know if your software works. For this there must be a sufficiently high test coverage so most people will know: If our tests succeed it is likely that everything works fine.
A build environment means that a set of automated scripts exists which execute the automated tests in a reproducible manner. This often involves installing dependencies setting up databases and similar tasks.
There are different levels of automation from automating your full server setup (infrastructure automation) to assuming all system level packages (and maybe even libraries) are already there and only automating the setup of your own software. While more automation is generally advisable it might be too much to start with.
The technologies used for this vary a lot. We have most experience using ant and ansible. But we also know to use shell or PHP scripts, Makefiles, Grunt or Phing. The technology matters less then the ideas.
Software changes and so do its dependencies and data structures. If you are using Continuous Integration or Delivery you must ensure that, for example, your database structure (SQL) is correctly updated to the latest requirements. Since this can involve data loss it must be handled with care.
This is finally the step which is named Continuous Integration, but the prior steps are all essential to this one. Using build servers like Jenkins, Travis or Bamboo is trivial once the other steps are completed. There are still many configuration options to think about like different target environments or sane visualizations of build failures.
The last step, Continuous Delivery, can again only be taken if you walked all the way here. It means triggering deployments automatically or semi-automatically:
In a workshop we will walk the full path together with your developers for your application. One step after another we will ensure your software can first be integrated and automatically tested continuously. Once we got there we can even implement Continuous Delivery for your software.
We are offering a newsletter with technical articles you can register for right now.
Qafoo maintains multiple fully automated setups with Continuous Integration & Delivery. We helped several customers implementing this for their stack. We helped automating very different and complex setups involving single servers or even server farms with different automation requirements.
Implementing Continuous Delivery will give a new yet unknown peace of mind during software development. Always knowing that your software is in a working state and can be released regularly is a great accomplishment. Automate your setup for your own placidity.