Making releases easier with automation
Analysts predict that the market volume for containerized apps will quadruple by 2023. This growth stems from the current popularity of microservice architecture, which uses containers.
Let’s take a closer look at the transition from monolithic architecture to microservices, specifically the step of automating application builds and deployments.
Recently one of our clients developed an automation instrument, which for privacy reasons we’ll call AutoReleaser (AR). Our product team learned that it would make building, testing, and deploying a matter of one click instead of hours of work.
Our engineering team had to use this instrument and make sure all applications would migrate to AR. We broke this complex and time-consuming task down into these steps:
- Divide applications made within monoliths into microservices
- Prep the microservices in a Docker-controlled environment (a step called dockerizing)
- Transfer the repository from Git Flow to GitHub Flow, so that every pull request to the main branch automatically appeared as a new release
- Set Terraform and Kubernetes GitOps manifests to allow automatic deployment of any infrastructure needed
- Fine-tune outer integrations, such as secure storage, authorization services, and more
- Enable automatic testing on GitHub Action workflows
It took just 4 months to migrate 4 applications to AR, and the process went smoothly most of the time. Of course, breaking down monolithic apps can be challenging, but that would fill up another article.
Back to business — now, application release is fully automated:
- Every new pull request to the main branch gets tagged with a new version of the release
- AR composes and tests each release in safe environments, with tests from unit to e2e
- After passing the tests, the application deploys in the Kubernetes production cluster and becomes available to users
The whole process takes only a couple of minutes and provides great advantages for our client:
- Unified building, testing, and deployment of all applications — now teams can create and describe unified best practices and engineers can easily switch between projects
- More speed — goodbye long hours of testing, as every new feature comes as a release, is described in a dedicated system ticket, and is fully covered by automatic testing
- Easier troubleshooting — less new functionality in each release makes it simple to track problems
- Fewer regressions — with the testing now automatic, the concept has shifted from QA to SDET
- Less labor — maintaining the automation and deploy code base of all apps — and there are more than 100 of them — will take a just handful of DevOps engineers from the AR team
Migration of one application to AR now takes only a week of effort from one engineer (not including decoupling), allowing the product team to seamlessly work on the new functionality.
Best of all, calculized per 100 apps, this process can save hundreds of hours per release .
The only bottleneck of this approach is breaking down monolithic architecture into microservices. However, once it’s done, it pays off with simplified development, maintenance, and deployment of new releases, as well as applications, becoming simpler and more compact.
Yes, breaking down monoliths and setting up microservices to automate the building, testing, and deployment of releases take a significant initial investment. But in the long run, it can save hours of work, and engineers will have more time to concentrate on features.