Let’s have a look at the software development process in a modern, agile approach. This process is based on a regular repetition of the tasks in the elements of a software development lifecycle, like design, analysis, programming, executable format, unit testing and acceptance testing.
Post-programming tasks can be heavily automated, which is necessary to ensure that testing does not deprive the team of human resources, and also for providing quicker feedback to developers and thus verifying whether the latest changes were successful. These automated steps practically constantly integrate the developer’s source code changes into the app. That’s the reason why this phase is called ‘Continuous Integration’. It is easy to see that this methodology, compared to traditional waterfall-type methods, where one often has to wait months for feedback, is much more flexible and has a lower risk. This results in projects that are much more easily adaptable to ongoing changes in the business environment.
Continuous Integration is furthered in Continuous Delivery and Continuous Deployment. Continuous Delivery is where one makes the newly built feature available quickly and regularly. As a part of this, they are automatically relocated to a test server which is not yet the client’s server. This is an intermediate system, where potential users can have a look. Here the function will be managed by a kind of quality assurance procedure.
Continuous Deployment is the last phase when all this, through automatism, will be relocated to the live system.
The goal during the whole process is to automatically and accurately test the program. However, running a lot of tests takes time and is a great burden to the system. This requires a lot of resources.
And here’s where Kubernetes can have a role again.
Since certain processes require more resources and others require fewer (depending on the number and nature of the tests, the needs of tested components, and the degree of parallelisation of the automatisms) the resources involved in the execution should be scaled dynamically. One of the possible technologies for this is containerisation. Kubernetes has a well-functioning, open-source support platform is well suited for these kinds of projects.
While the task may seem simple from a distance, if we have a closer look it turns out to be extremely complex. Like flying an aeroplane, it’s easy to board the plane to fly to your holiday, but the cockpit of that plane has hundreds of buttons. The same goes here, too. It’s easy to start working with Kubernetes, but you have to master it for efficient use.
The world however, seems to be going in this direction.
In fact, the developer society has practically fallen in love with this solution, because it made a great deal of useful things achievable which was not possible before. The development of related tools has a increased at a dizzying pace thanks to the community, many updates that come out monthly, which makes its use easier and easier but it means that we are continuously learning.
And customers are really happy.
Practical application of the CI / CD concept greatly contributes to the more efficient utilisation of resources. Thus, the customer gets a more profitable, less error-prone program at a more favourable price. As mentioned before, all changes are immediately tested, you do not lose time and feedback happens at lightning speed. While earlier, it used to take time for the operating team to relocate the program to the live system, it is not an issue now. The user experience is also immediately available.
Of course, agility is a prerequisite for all of this. The former Waterfall model comes from the traditional engineering approach of the sixties, from the time of skyscrapers, bridges and spectacular investments. In the software industry, however, it was a huge waste. So, the time has come for a new paradigm, because the customer won’t wait.
And from now on, they do not have to.