[chef] Re: Chef best practice for multiple developers


Chronological Thread 
  • From: Brad Knowles < >
  • To:
  • Cc: Brad Knowles < >
  • Subject: [chef] Re: Chef best practice for multiple developers
  • Date: Mon, 13 Jan 2014 09:14:13 -0600

On Jan 13, 2014, at 8:28 AM, Ritesh Angural 
< >
 wrote:

> Great question & thanks for the informed reply Brad.
> 
> I've been pondering about this myself. My team is in the initial stages of 
> our Chef implenetation. We're currently a team of 15 developers.We have 
> staging & production environments for all our applications that directly 
> map to develop & master branches in their respective git repositories. We 
> also use Jenkins for integration & deployment across our services so a push 
> to develop or master triggers a deployment to our staging or production 
> servers.

Generally speaking, I would say that the bigger your development team, the 
more you're going to need standards that are automatically enforced, and you 
may need more tools to help you cover all the various different areas of 
concern.

But each tool you use is going to have a certain cost to it, and you will 
want to make sure that you balance that against the benefits that it provides.

> My question is how do we do a similar setup for Chef? Does it make sense to 
> have two different chef servers per environment? My initial guess would be 
> no because chef itself is used to manage the different environments.

Well, for one thing -- application developers are not necessarily system/chef 
developers.  So, you've presumably got a different community of people who 
would be your developers in this case.  Everyone else would be a "user" of 
the services provided by your system developers.

You could certainly have separate Chef servers for your application 
developers to interface with, and then an "air gap" to the Chef servers for 
the production network that is only touched by your most trusted and 
experienced systems developers.

> But, on the other hand it would be ideal to have git branches as the single 
> point of truth such that everything on master branch in the chef-repo is 
> the exact replica of what's on the chef-server.

That's basically what we're doing with several of our customers.  I think the 
issue is how do you get there, and what methods do you use along the way?

What gatekeepers do you have built into that process to try to help ensure 
that all of the code that makes it that far will actually do what you want, 
and that any code refactoring that might occur along the way doesn't 
introduce any new bugs.

Of course, those gatekeepers could be automated tools, but they could also be 
things that are done by humans.

> How are you guys doing it currently?

We start with git hooks for low-level syntax and style checking (e.g., knife 
cookbook test, foodcritic, rubocop, etc...).  We are in the process of 
creating spec tests for all of our cookbooks, as well as test kitchen 
definitions for running all the tests that can be run.

That's combined with proprietary tools to do automated discovery of what's 
defined on the Chef server versus what is in the git repo, automatic creation 
of Jenkins jobs to run all the appropriate tests, creation of a dashboard to 
show the current status of all jobs, etc....

But we don't do deployment of the whole multi-thousand node cluster that this 
is all designed to build.

We're a small system tools developer team, but we're supporting a much larger 
systems development/deployment team, and we're hoping that all of these tools 
and methods can help them get more work done better and faster, and with less 
pain in both the near term and in the long term.

--
Brad Knowles 
< >
LinkedIn Profile: <http://tinyurl.com/y8kpxu>




Archive powered by MHonArc 2.6.16.

§