# Continuous Deployment

Continuous Deployment (CD) is a software engineering approach in which software functionalities are delivered frequently through automated deployments. It is the next step after Continuous Delivery.

## 1. Continuous Delivery vs. Continuous Deployment

The difference lies in the final step:

*   **Continuous Delivery:** Code changes are automatically built, tested, and prepared for release. However, the actual deployment to production requires a **manual approval** (a human clicks a button).
*   **Continuous Deployment:** Every change that passes the automated tests is deployed to production **automatically**. There is no human intervention.

## 2. Prerequisites

To successfully implement Continuous Deployment, you need a highly mature DevOps culture and infrastructure:

1.  **Robust Automated Testing:** You must trust your tests 100%. If a bug slips through tests, it goes live immediately. This requires high coverage in Unit, Integration, and E2E tests.
2.  **Fast Rollbacks:** If something breaks in production, you need an automated way to revert to the previous version instantly.
3.  **Feature Flags:** Since code goes live immediately, unfinished features must be hidden behind feature flags so they don't affect users.
4.  **Monitoring & Alerting:** Real-time monitoring is crucial to detect issues immediately after a deployment.

## 3. The Pipeline

1.  **Commit:** Developer pushes code.
2.  **Build:** CI server compiles code.
3.  **Test:** Automated tests run (Unit, Integration, Smoke).
4.  **Deploy to Staging:** Deployed to a pre-prod environment for final automated checks.
5.  **Deploy to Production:** If all checks pass, the code is pushed to live servers automatically.

## 4. Benefits

*   **Velocity:** Features reach customers instantly.
*   **Small Batches:** Deploying small changes frequently reduces the risk of massive failures associated with "Big Bang" releases.
*   **Feedback Loop:** Developers get immediate feedback on their code in the real world.

## 5. Challenges

*   **Risk:** Bad code can break production instantly.
*   **Psychological Barrier:** It takes courage to trust the automation completely.
*   **Regulatory Compliance:** Some industries (finance, healthcare) require manual sign-offs for compliance, making true Continuous Deployment difficult.

[[programming/ci-cd-pipelines]]
[[programming/software-testing-basics]]
[[programming/git-version-control]]