Goal: Any deploy to any env is a fully automated process that can be performed on demand trivially.
Including:
- Deploy to local machine (ie local testing)
- Deploy to pre-existing testing environment
- Deploy to brand new environment
- Deploy to new/existing dynamically specified environment
- Deploy to production
Stages
Key idea: Tiered levels of testing to enable near immediate feedback on code that’s changed.
Key idea: Self service deployment ensures deployment to dev is the same as to production. Taking the fear out of deployment
Key idea: Manual testing will always be required, but by automating the deployment of environments, it can be made fully reproducible and methodical.
-
Commit stage: only a few minutes to run
- must be fixed immediately if fails.
-
Acceptance stage: more comprehensive test suite
- Once they pass these, and all other automated tests, self-service deployment is possible
-
Have ability to run interactive and/or exploratory tests/envs. Integration, capacity, etc.
- Self service deployment,using same method as deploy to staging and/or production
- Deploy to staging
- Deploy to production
Ties together Configuration, Continuous Integration, Test Suites, Continuous Delivery in a holistic way.
Best Practices
resources:
- https://builtin.com/software-engineering-perspectives/continuous-delivery-pipeline
-
https://engineering.monday.com/?p=9714
- Interesting because it solves a Psychological Safety problem rather than a raw infrastructure problem.
- Not the same as “merge trains” a la gitlab in Always Green Master