At PubMatic, we look for technology-driven methods to accelerate go-to-market time, to release quality products with confidence and to reduce overall cost and manual effort.
We aim to release high-quality software quickly and efficiently to our customers. A simple goal but with multiple moving parts, behind the scenes.
To improve our efficiency and release of products, we initiated the decoupling of our large monolithic applications into a set of smaller manageable applications, automating the deployment process and executing automated tests in a staging environment. Breaking the application into smaller, more manageable pieces, allows the integration process to be more flexible rather than requiring coordination across all of our individual engineering teams.
We needed a system that could validate code quality at an early stage and maintain the stability of the application, as a whole. Further, we wanted to streamline the integration of changes to the master branch to provide a seamless and timely delivery of service to our clients. To achieve this, we adopted continuous integration across development, testing and release phases.
Objectives for Continuous Integration
We set the following goals:
- Minimize the duration and effort required for each code integration—an achievable goal since multiple cross-functional development teams in multiple locations are able to work simultaneously
- Enhance our ability to release updated versions of the product when required with the help of automated builds, tests and deployment
- Achieve a higher level of operational efficiency by introducing automation to the development process
We realized that adopting continuous integration in our development lifecycle was more than just a process. Continuous integration is backed by several important principles and practices which are the foundation for the whole software development process. PubMatic created the rollout plan with these best practices and principles in mind.
Changes Introduced to Achieve Continuous Integration
Prior to rolling out continuous integration for our teams, we needed to make a few adjustments to our current processes. The list below is not comprehensive but serves as an example of steps other developers might also consider:
- Introduce a standard branching strategy
- Automate the code merge and build process
- Improve efficiency of obtaining versions of artifacts, at any given point of time
- Automate unit testing
- Automate checks, measurement and insights of unit testing results
- Automate QA drops and builds
- Automate functional testing in production-like environments
- Dockerization of applications/microservices across all components
- Automate and standardize deployments (Docker-based) across environments
Continuous Integration Technology Stack at PubMatic
Let’s get technical for a moment. In order to implement continuous integration, we used a number of tools along the way. They include some of the following, in addition to custom tools and a staging and integration environment:
- JFrog Artifactory: We use this for artifact version management and storage
- Jenkins: To assist in automated builds and deployments
- SonarQube, JaCoCo, Gcovr, Cobertura : For code coverage and quality reports
- Liquibase: Allows database versioning and operations
- Docker: Used for container-based deployments
- Apache Mesos and Marathon: Facilitates orchestration of container-based deployments
Continuous Integration Benefits
As a result of our efforts, we observed the following benefits:
- 30 percent time reduction in overall testing phase
- Enabled test driven development
- Significant improvement in QA drop quality
- Drastic drop in integration issues
- Earlier signals of any dependencies/failure
- Standard deployment process for all environments
- Automated and error-free database DDL operations in production
- Enabled at-will deployments
- One-click deployment and a significant drop in deployment time
- Optimal usage of development, QA and production infrastructure
- Efficient response to rollbacks
- Significant drop in production issues
- Reduced time to go-to-market
Our efforts in achieving the continuous integration objectives provided very positive results which allow us to provide our clients with faster access to new features and a more stable platform. We continue to adopt new technologies and processes to further strengthen our software delivery lifecycle and achieve greater levels of efficiency, optimization and stability.
Want to Join Us?
Our engineering team works hard to provide an efficient infrastructure for our clients, and we are constantly innovating to address industry needs. If you want to join our team, check out our open positions or contact us today.