We dive into what it takes to adhere to minimum viable continuous delivery while Michael isn’t going to quit his day job, Allen catches the earworm, and Joe is experiencing full-on Stockholm syndrome.
The full show notes for this episode are available at https://www.codingblocks.net/episode179.
- Shortcut – Project management has never been easier. Check out how Shortcut is project management without all the management.
- Revisiting unit testing private methods in 2022, what would you do?
Minimum Viable Continuous Integration
CD is the engineering discipline of delivering all changes in a standard way safely.minimumcd.org
- The belief is that you must at least put a certain core set of pieces in play to reap the benefits of Continuous Delivery.
- The outcome that they’re looking for is the improved speed, quality, and safety of the deployment pipeline.
- Minimum requirements:
- Use continuous integration, continuously integrating work into the trunk of your version control and ensuring, as much as possible, that the product is releasable.
- The application pipeline is the ONLY way to deploy to an environment.
- The pipeline decides if the work is releasable.
- The artifacts created by the pipeline meet the organization’s requirement for being deployable.
- The artifacts are considered immutable, nobody may change them after they were created by the pipeline.
- All feature work stops if the pipeline status is red.
- Must have a production like test environment.
- Must have rollback on demand capability.
- Application configuration is deployed with the artifacts.
If the pipeline says everything looks good, that should be enough – it forces the focus on what ‘releasable’ means.Dave Farley
- Use trunk based development.
- Integrated daily at a minimum.
- Automated testing before merging work code to the trunk.
- Work is tested with other work automatically during a merge.
- All feature work stops when the build is red.
- New work does not break already delivered work.
Trunk Based development
- What is trunk based development?
- Developers collaborate on a single branch, usually named trunk, main, or something similar.
- You must resist any pressure to create other long-lived development branches.
- The argument is that the simplicity of this structure is more than worth anything you might gain by any other structure.
- For small teams, this is easy, each committer commits straight to trunk, after a build/test gate.
- For larger teams, you use short-lived feature branches that might live for a couple days max and end with a PR review and build/test gate.
- What does this buy us?
- The codebase is always releasable on demand.
- Google, Facebook, authors of Continuous Delivery and The DevOps Handbook advocate for it.
- But how do we …
- Big feature? Feature flag it off.
- Hot fix? Fix forward.
- But …
- What if you need multiple CONSECUTIVE releases? i.e. think of the Kubernetes release cycle.
- What if you need multiple CONCURRENT releases? i.e. think of Microsoft support for multiple versions of Windows.
Resources we Like
- Minimum Viable CD (MinimumCD.org)
- What Is a Deployment Pipeline? (Informit)
- Trunk Based Development: Introduction (TrunkBasedDevelopment.com)
- Real Example of a Deployment Pipeline in the Fintech Industry (YouTube)
- The Twelve-Factor App, III. Config (12Factor.net)
- Kubernetes Best Practices: Blueprints for Building Successful Applications on Kubernetes (Amazon)
- Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation (Amazon)
- Comparing Git Workflows (episode 90)
- Our discussions of The DevOps Handbook: How to Create World-Class Agility, Reliability, and Security in Technology Organizations (Coding Blocks)
Tip of the Week
- Did you know you cannot set environment variables in Java?
- Terms & Conditions Apply is a game where you have to avoid giving up all your juicy data to Evil Corp by carefully avoiding accepting the terms and conditions. Good luck. Thanks Lars Onselius! (TermsAndConditions.game)
- Test Containers is a Java library that gives you a way to interact with and automate containers for testing purposes. Thanks Rionmonster! (TestContainers.org)
- Maybe it’s time for JSON to die? YAML is finicky, but it’s easier to read and it allows comments.
- YamlDotNet is a library that makes this easy in C#. (YamlDotNet.org)
- PowerToys are a collection of utilities from Microsoft that extend Window with some really powerful and easy to use features. Thanks Scott Harden! (Microsoft)
- Did you know you can now include diagrams inside your markdown files on Github? Mermaid is the name and you can create the diagrams directly in your files and keep it versioned along with your code. Thanks Murali and Scott Harden! (github.blog)