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.