Scalable CI/CD and Storage Migration from Jenkins to GitHub Actions on AWS
The problem
The company faced significant challenges with its existing infrastructure, which relied on Jenkins for continuous integration and quality assurance environments running on bare metal machines.
This setup led to scalability issues, high maintenance costs, and limited flexibility. Each run of the test suites for a single environment required 30 GB of data storage, resulting in a substantial amount of data generated across nearly thirty environments.
The goal was to migrate the existing infrastructure to AWS to leverage its scalability, reduce operational overhead, and transition CI/CD processes from Jenkins to GitHub Actions for a more integrated and streamlined development workflow.
Our solution
The solution involved a comprehensive migration strategy. Initially, we set up the infrastructure on AWS, configuring dedicated EC2 instances as GitHub self-hosted runners to execute the CI/CD pipelines triggered by GitHub Actions. These instances also created the appropriate database schema and populated it with test data, sourced from the ECS. Application instances running the environments were deployed on additional EC2 instances, with application services running in Docker containers within these instances.
For storage, we utilized Amazon S3, designating one bucket for storing logs from test suites and another for application-related data. The application database was managed using Amazon RDS PostgreSQL within the VPC to ensure reliable and scalable data storage.
To handle application data, services were launched in ECS to fill the database and use the appropriate data for the application. We migrated the CI/CD pipelines from Jenkins to GitHub Actions, implementing workflows to automate tests and data handling. The entire infrastructure was configured using Terraform and Terragrunt, ensuring reproducibility and easy backup.
Security and monitoring were critical components of our solution. We employed AWS IAM to manage access to AWS resources, while Amazon CloudWatch provided monitoring for infrastructure and application performance, delivering logs, metrics, and alerts. AWS Key Management Service was utilized to manage encryption keys securely.
Lastly, we implemented a dedicated Lambda function for scaling and cost-saving purposes, optimizing resource usage and reducing operational costs.
Results achieved
The migration to AWS and transition to GitHub Actions resulted in several significant improvements:
- Enhanced CI/CD: The development pipeline was streamlined with GitHub Actions, resulting in faster and more reliable deployments.
- Increased flexibility: Dynamic provisioning of environments was enabled, reducing setup time for QA and development tasks.
- Reliable storage: Amazon S3 ensured reliable, scalable, and cost-effective storage for the data generated per Robot test suite run.
- Standardization: Using a consistent schema for all projects within the organization enhanced standardization.
- Lower maintenance costs: Leveraging cloud solutions reduced maintenance costs and improved the service level agreement (SLA).
Furthermore, we conducted a detailed Total Cost of Ownership (TCO) analysis, comparing the costs of maintaining bare metal infrastructure versus utilizing AWS services. Our research highlighted significant savings in hardware maintenance, energy consumption, and labor costs. The pay-as-you-go pricing model of AWS provided further cost optimization, aligning expenses with actual usage. Additionally, Amazon S3's tiered storage options offered cost-effective data management solutions.
- Cloud Migration
- System Architecture
- DevOps