An agile software development life cycle (SDLC) adapts quickly to client demands through continuous feedback. Agility provides adaptability, which allows organizations to quickly respond to changes and remain on the market. Agile SDLC adoption makes it faster to solve client demands (decreased time to market), and leads to lower adaptation costs (iterations and sprints) and increased revenue.
As a result of the growing need for agility, incorporating the right best practices during software development is a must. DevOps is a major element in the agility landscape and is mainstream among software companies. In this post, we will walk you through the goals of several CI/CD practices. In a later post, we’ll explore some practical use cases that demonstrate how you can build an end-to-end deployment process on AWS.
Reasons to Embrace DevOps
According to IDC, the “worldwide DevOps software market achieved a level of $3.9 billion in 2017 according to IDC estimates. The market is forecast to reach $8 billion in 2022.”
DevOps practices such as CI/CD and continuous delivery can bring more agility to the product development cycle through daily builds, which leads to:
- Detecting anomalies at an earlier stage (reducing the risk) and minimizing technical debt through unit and functional tests.
- Building features your users actually want. This often results in better user interaction and quicker feedback regarding released features, which can help the product team focus on the most demanded features and build a high-quality product.
- Increasing product quality and reliability through quality and stress tests.
- Having a production-ready artifact available. This is an excellent way to accelerate the time to market.
- Tracking with better visibility into project status and health.
- Driving innovation from feedback while building high-quality products through each iteration.
So, now that we’ve discussed the benefits of CI/CD practices in general, let’s explore what they actually are in more detail.
3 Continuous Practices: Integration, Deployment, and Delivery
Continuous integration (CI) involves having a shared and centralized code repository and directing all changes and features through a complex pipeline before integrating them into the central repository (GitHub, BitBucket, GitLab, etc.). A classic CI pipeline triggers a build whenever a code commit occurs, runs the unit tests and all pre-integration tests (quality and security tests), builds the artifact (Docker image, ZIP file, training model, etc.), and pushes the result to an artifacts-management repository (Docker registry, Amazon S3 bucket, Nexus, Artifactory, etc.).
Continuous deployment (CD) is an extension of continuous integration. Every change that passes all stages of your continuous integration pipeline is released automatically to your staging/pre-production environment. In such a process, there’s no need to decide what will be deployed and when. The pipeline will automatically deploy whatever build components/packages successfully exit the pipeline.
Continuous delivery is similar to CD, but requires human intervention or a business decision before deploying the release to production. The figure below shows how these practices relate to each other.