The Customer and Scope of Work
Our customer, a global transportation solutions provider has a prominent presence in the Europe. After acquiring a customer in the USA, they wanted an overhaul of their existing architectural system, based on physical servers. This would enable the continuous integration and continuous delivery of their application, which handled automated fare collections.
The scope of work with the USA customer involved handling new data regulations and working with a third-party company for end-user application development. We decided to adopt software as a service approach towards a new architectural system and guarantee continuous integration and continuous delivery by using a cloud-based system.
Environment Issues Were Slowing Us Down
A mature build and automation practice with efficient build management and deployment in local environments already existed for the project. However, environment creation was still a manual process, which required several days for provisioning physical virtual machine servers.
Our Approach to a Solution
The initial approach involved a lift-and-shift to replicate the existing physical deployment infrastructure onto AWS. Once done, we started identifying better alternatives for various processes on cloud. The purely-web components were identified and we decided to harness Elastic Beanstalks for hosting and maintaining them. Amazon Relational Database Service was our go-to choice for PostgreSql databases. Once the entire deployment diagram was planned and ready, we worked on bringing it to life.
After multiple rounds of sandboxing and proof-of-concepts we had an automated pipeline in place, employing the following toolsets:
- Git for Version Control System
- Docker for the Containers
- TeamCity to enable future Build Management and Continuous Integration
- NUnit and JUnit for automation of Unit Testing
- JMeter and Pytest for Integration Automation Testing
- JMeter for Performance Automation Testing
- AWS and its plethora of services for handling cloud environment and infrastructure
The End-Result and Its Impact
With CloudFormation used as the basis for infrastructure as code, we were able to provision different environments on AWS. The revamped workflow ended up looking like this:
- Developers would receive new tickets via Jira based on which new feature branches would be created and sent to a designated Lead for review and for merging of the changes
- The automated pipeline would go into action with TeamCity picking the change and triggering a Continuous Integration build to compile the solution and to create an installable artifact
- Once completed, another TeamCity build would pick the installer and upload it to Amazon Simple Storage Service through integrated AWS Command Line Interface
- Then, either Elastic Beanstalk packages or AWS CloudFormation templates would be executed to populate or update the AWS Continuous Integration environment from the fresh installer
- Once the cloud environment was established, another build of the TeamCity integration project would run JMeter and Pytest automation tests on the fresh deployment. This would generate test run reports, to evaluate the health and accuracy of the environment
This automated pipeline has been useful for various production releases, with time to market reduced to just half a day. Provisioning of new environments was also much quicker, having been cut down from a few weeks to just a few hours for any new variants. By adopting a cloud-based infrastructure, we were also unshackled from the limitations of a physical server when it came to preparing new virtual machines. Environments could be constructed and deconstructed with limitless flexibility.
What the Future Holds
After the successful development of this environment, we’re looking towards further refining the automation pipeline. We’re now focusing on cost optimization, code sanity and coverage checks, and environment specific optimization to fully harness cloud-based environment and latest AWS products. The customer’s developers and testers have been receiving training sessions to familiarize themselves with the pipeline and have even contributed to enhancing it. With a clear vision and dedicated resources, we’ve enabled the DevOps journey of the customer’s product by effectively implementing it in their organization. This is crucial in enabling a shift towards completely serverless architecture, which will be necessary because the Digital ecosystem is constantly evolving and updating itself to achieve the same goal.
See how Sasken's expertise in DevOps is utilized for seamless delivery of DevOps based solutions.
Next Post Quality Assurance for Machine Learning Models - Part 2