cd-manifesto
cd-manifesto copied to clipboard
Everything as code
I'm wondering if we are missing a broader scope of the principle of "version control everything." (maybe its mostly missing with respect to infrastructure). I know it is covered slightly in application config deploys with artifact, but especially with modern applications being deployed to modern platforms with woefully out of date practices, (especially with respect to cloud infrastructure) I'm wondering if there is a tie in here. It may also be that something more needs to go into the application config section (app config plus infrastructure?). Can you be confident in all changes to your app as the infrastructure changes beneath you?
Sorry if I'm late to the party.
Don't be sorry, the party never stops! I think this is an excellent question and something I've wondered about myself. I feel like there's a difference between "having your app always ready to deploy" == CD and "high availability infra" == SRE/platform. I imagine someone probably read that last sentence and thought it was pretty dumb though, so I'd appreciate feedback there.
I think I read suggestions to a few different things here:
- Version control everything. Trunk-based development strongly implies version control, but there are many cases where many of the product's assets are not diffable: graphics, XML configurations for tools like Salesforce, ML models and so on. So, version control for everything is unattainable.
- Infrastructure as code is not a blocker for CD. The on-prem network architecture is often not volatile nor automated. IaC is a good practice on the cloud. Also, there is a line to be drawn: The DNS NS record configuration should probably not deploy with every microservice. The original intent of "application configuration deploys with artifact" is that production may not crash on a null for a new configuration flag.
- Application survives infrastructure changes would be a requirement for the CD of IaC but impossible to generalise. Either Microsoft or Apple should take responsibility for this on desktop ;)
I think things like this would work well in the "beyond the minimums" section. I agree that everything is VC is the goal and also not required for Minimum CD. I've done CD while my DB was owned by a team in another VP area. Fun fact, they didn't use version control at all. It was terrifying.
I've added a recommended practices section in PR https://github.com/Minimum-CD/cd-manifesto/pull/183/files This would be a good add there after it's merged.
Seeing this as I perusing changes over the last year since this greatness was proposed. <3 @JustinThomsen - Do you still have interest in adding this info?
@tracybannon - I'll take a look - I think there is still some value in having this written out, might take me some time to gather the right wordsmithing.
A few examples that would fit on the beyond the minimums page:
https://openpracticelibrary.com/practice/everything-as-code/
https://hackernoon.com/everything-as-code-explained-0ibg32a3
Otherwise, I can also write out a section for recommended practices.
@tracybannon @bdfinst I'll work on a write up for the recommended practices page for everything as code. It'll take me a bit because I'm an over editor.