Blog & Engineering Insights
Today, most modern applications require developing bespoke code using a wide variety of platforms and tools. This means that the teams involved in the app-building process need to use a consistent mechanism to integrate and validate changes. This is where CI (Continuous Integration) and CD (Continuous Delivery) come in, providing an automated way to create, package, integrate, test, and deploy applications.
As such, we will take an in-depth look at a real example of how our tremendous team has managed to modernize a CI/CD solution using AWS services.
Tremend provided for our client, a large retailer in Europe, a wide array of Enterprise Architecture services in order to centralize and manage subjects related to IT architecture and document the current IT landscape. Our Enterprise Architects worked with our client’s digital product teams to identify the architecture, the business flow, the delivery pipeline, and the legacy components of the ERP.
Based on our findings, we came up with a unique proposal and a bespoke transformation plan. Our specialists also performed cloud migration, switching to new technologies, and splitting a Java 1.5 monolith in microservices.
Challenges we had to overcome
We faced challenges in both the application technology stack and the build-and-deploy environments. The biggest improvement target was the APIs backend services – the client’s API used an old tech stack, including Java 1.5, Jenkins, SVN, Oracle DB, and OpenShift on Bare Metal – which we have rewritten completely.
In parallel, our team has also successfully managed to migrate the client’s ERP from Java 1.5 to Java 11, and then migrate all the other components to AWS RDS & DynamoDb, Github, AWS CodePipeline, and AWS Elastic Compute Cloud.
From Java 1.5 to NodeJS APIs
Following a technical sustainability analysis, our development team decided to rewrite the application APIs in NodeJS, offering some proven benefits to our client. First off, the cumbersome maintenance of a legacy system was longer needed, thus relieving the strain put on the team managing the ERP system. Second, our client’s system got to experience fewer security threats, faster initial loading time, and constant support from the cloud provider.
We started at the lower levels with the Infrastructure-as-Code (IaC) and improved the overall system. The resource load time has been exponentially decreased and the people working on the project are now able to see all the changes in real-time. For IaC we used CloudFormation, the native options from AWS. Another option we’re considering for the next optimization iterations is AWS Cloud Development Kit, coupled with Pulumi and Terraform external tools. The newly created resources with the IaC tools include IAM, VPC & networking components, and Load Balancer & Pipeline with code.
From Oracle Database 11g to Dynamo DB
This task was quite difficult, especially as we needed to keep some basic components of Oracle 11. However, by integrating Dynamo DB we’ve managed to reap some marvelous benefits: extremely low latency, improved scaling capabilities, less complexity, and enhanced pagination.To top it all off, Dynamo DB enabled us to easily decouple and move certain elements to a secondary database. Our team made the initial migration from Oracle Database 11g to 19c and with the new version of the Oracle Database, it was easier to write a small application that keeps both databases synchronized.
From SVN to Git
Another optimization we’ve done in terms of architecture was the part of the migration from SVN to Git. This was a welcomed upgrade, especially as the application footprint was quite large. This migration allowed us to use the “identity secrets” open-source python application to find if the code contains any secret components (e.g. credentials) and remove them. We’ve also migrated the code contributors from SVN by creating a new list based on the LDAP IDs and mapping it to their names and the email address used for the new git accounts.
Since the branches were not properly defined in the SVN, we’ve redefined the branch policies. As part of the migration process, we’ve pushed the code to the git repositories and we’ve designed the main, develop and release branches.
In terms of code improvement, Git came with lighter infrastructure, fully managed code, security improvements, and high availability. We also employed AWS CodeCommit, which is coming with AWS support and complete AWS IAM integration.
Jenkins no more, CodePipeline is here
The next step was the update of the CI/CD. While Jenkins came with its own set of pros, such as a wide variety of plugins, open source perks, and self-hosted options, it fell back in terms of management support, container support/build environment, auditing, and maintenance.
By switching over to the AWS CodePipeline, we said goodbye to incompatibility issues with certain plugins, downtime during upgrades, unclear messages during debugging, and a tedious infrastructure to maintain. The new CI/CD solution came with the entire AWS suite and was easy to integrate with GitHub, Amazon ECR, and AWS CodeCommit. It also enabled us to create our own custom plugins and use declarative templates.
AWS Code Deploy
We’re using AWS Code Deploy to rapidly release new features. The rollback and stop features were extremely useful, especially in pinpointing mistakes and code errors. The AWS Code Deploy console enabled us to create automated deployments and gain full control over the entire flow.
This is what the current project code setup looks like:
Using the full suite of AWS developer tools ( AWS Code* ), we managed to automate the entire deployment process and work with components such as artifacts, source code, applications, on-premise instances, and pipelines.
Want to dive deeper into the subject? Watch Catalin’s presentation at the webinar organized by Tremend and Amazon Web Services on how CI/CD techniques allow teams to develop and integrate high-quality code faster than before.
Tremend is a Select+ Consulting Partner for AWS, with a large team of certified solution architects, certified cloud practitioners, DevOps engineers, and SysOps admins. We come with extensive experience in AWS integration, having worked with a plethora of clients in areas such as financial, healthcare, retail, and the public sector.