“Does it work?” and “Can we ship?” are the two biggest questions that have always needed proof backing the answer to make the release decision. Continuous Integration and Continuous Delivery (CI/CD) process aim to solve this problem by providing early insights on shippability and working of the code.
At Zapr DevOps, we are committed to giving feedback to the developer early in the development phase. This allows him/her to push a shippable code while being confident that it will not break upon integration. This early insight also allows the developer to fix the code while still working on it and not wait for feedback from the Nightly Build. Our aim is to have confidence across the floor that each build on the mainline is a Release Candidate.
The tools that we use to achieve CI/CD are:
–> BitBucket – Source control and hosting service
–> Jenkins – to automate and execute the build process
–> SonarQube – for Static Code Analysis
–> JenkinsFile – to have Pipeline as code (For better review-ability and maintenance of build process)
–> Developer creates the Pull-Request.
–> A Dev-CI-Build is triggered, which checks for merge conflicts, compilation issues, performs unit tests and runs Static Code Analysis (SonarQube)
–> A build is marked successful if it passes all stages
–> Developer is notified of build success or failure. BitBucket Pull-Request is also updated with build status
–> The artifacts of a successful build are packaged with dev configs and uploaded to AWS S3 and can be deployed to QA servers on one click by QA
–> We allow merging of Pull-Request only if there is at least one successful build and one code review approval
–> Upon merging the code to mainline, we initiate the Prod-CICD-Build where apart from all the steps of Dev-CI-Build, we also release the code to Maven
–> The artifacts of a successful build are packaged with prod configs and uploaded to AWS S3. Then, the stakeholders are notified
–> The package is deployed to QA and a regression test suite is triggered.
–> We have the capability of 1-Click deployment to our production systems. This allows us to deploy any release in our production, at any time
Plans in the pipeline
We’ll be looking at improving the unit and regression test suite by giving Dev and QA team insights on code coverage of the test suites. Later, we’re planning on putting checks and thresholds on coverage. Also, we would be looking into containerization of our applications.
Our goal is to enrich our test suites and make the CI/CD process mature enough to give us confidence for taking the big leap of Automated Continuous Deployments.