Continuous Delivery
Benefits
- Solve Problems Quickly
- Reduce Errors
- Empower Teams
- Increase Confidence in Deployments
- Make Deployments More Flexible
- Iterate Quickly
Fundamentals
- Releases must be repeatable & reliable
- Automate everything
- Everything in version control*
- Done means released
- Build Quality In
- Everyone is responsible for the release
- Improve continuously
Anti-patterns
- Deploying Software Manually
- Only deploying to a production-like environment after development is complete
- Any manual modifications (configuration, data, etc) of production environments
Best Practices
- Make every change trigger a CI build, with a testing phase included
- Make your feedback loops as short as possible to enact change more quickly
- Prioritize fixing failures in the pipeline right away
- If something is painful, do it more often
Best Practices (Continued)
- Build artifact only once
- Keep everything in version control*
- Integrate Frequently
- Only check in working code
- Same delivery mechanism for every environment
Best Practices (Continued)
- Smoke test production deployments (Critical Path)
- Run tests in a CI server
- If anything fails in master, stop the line
- If anything fails in feature, drop the line
- Claim broken builds
- Don't go home with a broken build
Automated Testing
- Paramount to effective CI/CD
- Drastically reduce feedback loops
- Automated tests can provide feedback in minutes or even seconds instead of hours or days
- Repeatable / Consistent validation
- Minimize manual work
Operational Considerations
- Documentation and Auditing
- Monitoring / Alerting for Abnormal Events
- Control Access to Your Infrastructure
Phoenix Server (Immutable Server)