Deploying Development Environments With A Single Click

Giving each developer access to on-demand isolated environments to improve code quality.

Working with an electronic payment processor, whose mission is to simplify the Accounts Payable process for anyone needing to collect. We alleviated their development and QA bottlenecks by deploying replicas of their entire development environment with a single click.

Giving every developer access to an on-demand isolated environment to run and test their code changes.

The Client Challenge

Our clients’ application is a collection of independent services. These services are responsible for implementing different parts of the system. Like user authorization, a Payments API, and a separate Customer API.

Due to the distributed nature of these services, it became difficult for each team member to have an isolated development environment to run and test their code changes.

The inflexibility of this environment required large efforts to set up and support testing and validation. Drastically slowing down testing, and furthermore deployment.

Additionally, our client did not have any Continuous Integration (part of CI/CD) pipelines in place to automatically build and merge developer code.

Without a CI pipeline, there was no mechanism to run automated test cases and inspection routines before the team merged their code changes to development/master branches.

Lacking automated code inspection and testing in their development process, broken builds were pushed through to QA that required rework.

The SourceFuse Solution

Using the Infrastructure as Code (IaC) tool Terraform, we moved this online payment provider away from their manually deployed single instance AWS infrastructure. Into an easily deployed multi-instance environment able to keep pace with their developers.

Giving them the ability to roll out a complete replica of their infrastructure with the click of a button and WITHOUT any error-prone human intervention.

 

Talk to our cloud experts

The Details

We built custom data source providers in Terraform which extended its’ native ability to roll out the application with a single command.

Integrated the Serverless Application Framework with Terraform, so that shared resources are agnostic and can be provisioned for different technology platforms.

SourceFuse also implemented a highly available immutable Jenkins server by making use of:

  • Docker images
  • Groovy scripts
  • AWS Parameter Store
  • AWS CloudWatch
Docker images for IaC
Groovy scripts for IaC
AWS CloudWatch for IaC

This gives our client the ability to roll out the Jenkins server purely from code without any manual process in place.

We also added auto scalability utilizing a dynamic slave approach. The Jenkins server provides a robust way to integrate an entire sequence of build, test, and deployment tools as part of the development process.

Lastly, we integrated SonarQube into the CI pipeline to bring various forms of automated code analysis into the process to remove the manual efforts generally required by the development team

The Technical Details

  • Used Terraform to institute Infrastructure as Code as part of the infrastructure process.
  • Deployed and used Jenkins to manage the rollout of temporary development environments using IaC (Terraform).
  • Increased Terraform coverage by integrating additional APIs for AWS services like Lambda, S3, and CloudFront.
  • Further extended Terraform to automate DNS pointing by utilizing CloudFlare.
  • Utilized Terraform Provisioners to create and seed databases during the rollout of new development environments.
  • Added a step in the CI Pipeline to run integration tests when a new Pull Request is generated by the development team. Based on the result of the automated tests, developers are permitted to merge their respective changes into the main code branch.
Terraform is an open-source infrastructure as code software tool
Jenkins is an open source automation server
Amazon Web Services Logo (AWS)
Cloudflare - content delivery network services
The Results