Yeah, the answer is to use environments and to explicitly version pin all your cookbooks. I'm not sure I'd suggest going down the road of explicitly version pinning in your cookbook deps, but instead your promotion from integration to production (or however you have your environments setup) should be to copy the exact version pins in the integration environment file and push them into the production one. Ideally you have a full CD pipeline where you start with "devops"ers working on their laptops doing local changes to cookbooks and using test-kitchen to validate them against virtual images. Then those changes are published and made available as a cookbook version on the chef server, and a jenkins environment that floats on cookbook versions picks them up and runs test-kitchen against them, and if they pass they're promoted to a full-sized integration environment where again there's a test suite that validates that the changes work. If you swallow the whole koolaid then you will eventually do a push to production with any CRB approval since you've proved the change works via multiple testing steps in your different environments. You don't even really need semantic versioning in this system, you just need to keep cookbook versions unique and frozen. The set that gets deployed is the set that was tested together and works, you don't really want any version constraints in your cookbooks at all, you just test latest against latest and if its good you ship it. The same basic workflow also works if you rip out all the CD, but then you've got manual Q/A process and humans pressing buttons to do the environment promotion, and a CRB involved at some point before it goes to prod. On 1/14/14 8:15 AM, Dylan Northrup wrote: " type="cite"> |
Archive powered by MHonArc 2.6.16.