Chef and InSpec Builds with Jenkins
My main goal when working with clients is to make the right thing to do the easy thing to do. It’s better for everyone that way. Code is cleaner and more trustworthy, pipelines break less often, developers’ lives are a little less stressful, and velocity is enabled at every level. However, it’s not always easy creating an environment that makes the right thing to do the easy thing to do. After all, if it was easy, everyone would do it. Sometimes it’s just easier to keep doing what you’re doing and checking things off of the task list instead of breaking away and making things right.
For Chef cookbook development, the right thing to do is to practice test driven development using Test Kitchen and InSpec and linting tools like Rubocop, Cookstyle, and Foodcritic. Enforcing the use of these tools, however, even though it’s best for everyone, can be a challenge. At Relativity a huge win was found when we implemented continuous integration builds in Jenkins that first ran linting and Test Kitchen and then notified git (BitBucket) of the status of that build (success or failure). The pipeline was immensely cleaned up, and cookbook development got a lot more delightful.
DevOps methodologies must come into play when implementing strategies like this because there will be push-back every step along the way, not because people don’t want to create better practices, but because it’s hard and backlogs are long! When you finally break through and make the right thing to do the easy thing to do, people quickly turn their disdain for testing into a love affair with it.
I hope you’ll come and hear about how we turned Relativity’s pipelines green and the snowball that grew from it!