Joining the Ranks of DevOps Experts
In my second job, I had the privilege of working alongside seasoned engineers who had built a solid foundation. We were again using AWS, this time leveraging Chef cookbooks and Terraform for infrastructure as code. It was a relief to leave the console behind and dive deep into these powerful tools. I quickly became an expert in their use.
One of the most significant projects was optimizing our self-hosted Jenkins server for speed and efficiency.
The Java application’s compile and test cycle took a staggering two hours, which was unacceptable. To address this, I implemented several optimizations:
- Individualized Pull Request Testing: Each GitHub pull request now had its own dedicated tests, rather than relying solely on the main branch.
- Custom AMI for Jenkins Nodes: I created a custom Amazon Machine Image (AMI) for the Jenkins nodes, pre-installing Postgres and Redis to accelerate test execution by 35%.
- Test Parallelization: I parallelized test execution, reducing execution time by 50%.
- Parallel Production Deploys: I parallelized deployments to multiple AWS Elastic Beanstalk environments, cutting deploy time in half.
- Groovy Health Checks: I wrote Groovy code to perform health checks on AWS Elastic Beanstalk and AWS Opsworks instances after deployments, ensuring all were online.
- Jenkins Shared Library: I created a Jenkins shared library to centralize Groovy code in a single Git repository.
- EC2 Spot Instance Autoscaling: I set up autoscaling for EC2 spot instances based on the job queue.
Additionally, I implemented monitoring of Redis queues using Python, submitting queue size metrics to AWS CloudWatch.