- Each step runs inside a docker container
- Steps are specified in small Makefiles/scripts
- Check, test, and build steps can be run from a developer laptop
- Deploy steps can be run from a developer laptop
- Docker containers can be built
- IAM roles are assumed by the CI system/developer rather than baked into steps
- Secrets are provided by the CI system/developer rather than baked into steps
- The packaged application runs in the same environment as tests
- Medium-sized tests (ie: tests that span multiple processes/containers) can be run
- The CI system caches steps and only runs steps that have changes
- Common steps can be reused across repos
- UI to see the CI logs
- GitHub status checks that notify of success/failure
- Steps can be blocks that require manual intervention
- Steps can be expressed in YAML rather than a general-purpose language
- Pipelines can run on a schedule
- Pipelines changes can be made on branches, ie: the master branch pipeline can remain as is until merged
- Steps can run in parallel/asynchronously (improves end to end timed)
Assumes green/blue deployment (is this reasonable for CF/k8s?)
Q: where do medium-sized tests go?
-
check-test
- check (linter, static type analyse)
- test
-
build
- build docker container
- push container
-
!master branch deploy
- deploy to test
- smoke test
- flip
-
master branch deploy
- deploy to prod
- smoke test
- flip
- notifications - slack, new relic release events
- publish to corp catalogue