As a pioneer in global market research and data analytics, our client provides valuable insights about markets and consumers to their clients in media, FMCG, and retail. With operations in multiple countries, they collect, store, and process data at scale from varied data sources to answer challenging questions posed by the above mentioned industries. Their monolithic legacy application was a hindrance to execute frequent releases and faced downtime issues, whenever a software update occurred.
- They required a solution to stay relevant, move faster and bring agility in feature development and deployment
- To keep up with the competition and meet their expectations for shorter cycle times and higher service levels, they were looking for a solution to upgrade their platform and leverage the latest development and deployment trends
- To reduce dependency on module teams, especially the testing and quality assurance (QA) teams, the manual processes had to be integrated and automated
- To handle multiple configuration files in a monolithic application, a specific approach had to be designed that can handle similar inputs but generate multiple output files as per requirement
- The existing approach to process a release was inconvenient, as it had powershell scripts, which were prone to errors and often failed during a production deployment
- Manual configuration changes during the release led to lack of visibility and it became difficult to track certain details, such as who was responsible for the configuration and when was the config file modified. Also, backup wasn’t available for the configuration
- The application was required to be available at all time to serve user access requests
- The client needed an infrastructure which could handle deployment of all kinds and be always available
- Teams needed to deploy independently, without hassle, and not worry about missing codes
Imaginea came up with a solution to refactor the legacy monolithic application, instead of rewriting code, to transform the entire application. We designed a fully automated Continuous Integration (CI) and Continuous Delivery (CD) pipeline, right from receiving data input till the review stage. We provided inter-service communication through REST-based APIs and message queues. We also designed a microservices-based, highly available infrastructure, capable of handling large deployment loads.
How Our Solution Helped
8x increase in release rates without any downtime through the automated CI and CD pipeline
To automate the CI and CD pipeline, we adopted industry standard tools, such as Ansible, AWX, TeamCity, Docker Swarm and so on. Our fully automated solution helped developers to raise a pull/ merge request in the source control system.
When the code is merged, a deployment job is triggered in TeamCity, a CI and CD server, which internally calls the AWX API for deployment. Depending on the environment, the server credentials are picked up from the inventory dynamically and a configuration artifact is generated. By using Ansible with AWX for configuration management, we were able to:
- Reuse provisioning scripts for multiple server environments, such as development, testing and production
- Share provisioning scripts between coworkers to facilitate collaboration in a standardised development environment
- Streamline the process of replicating servers, which facilitates recovery from critical errors
- Run Ansible Playbooks, inventory, and schedule jobs using the web interface
With these AWX features, the software installation and configuration efforts were reduced to a minimum.
The release communication and notification were automated via Barracuda APIs, chat room and Google chatbot APIs.
To make the deployment infrastructure highly available, we used Docker Swarm and Portainer. Portainer has provided an easy and simple solution for managing Docker containers and Swarm services through a web interface. It supports a wide range of features for managing the Docker containers, such as managing the creation and deletion of Swarm services, user authentication, authorizations, connection and execution of commands in the console of running containers, and viewing container logs.
This process enabled multiple teams to execute the release independently, without any downtime. This made the application ‘always available’.
CI-CD flow diagram
- Increased speed to market
- Enabled complete automation of QA regression and production deployment process
- Streamlined artifacts generation via the light-weight, containerized infrastructure
- Provided smoother and faster delivery of the releases
- Reduced cost and provided easy maintenance and updates
- Improved transparency and increased team accountability