Step Away From That Knife!
Who am I?
Michael Goetz
Manager, Solutions Engineering @ Chef
@michaelpgoetz
mpgoetz@chef.io
Knife, Y U No Automate?
• Who built this thing and why do they suck?
• What were they thinking?
• Do we really care?
How I want to feel
How I really feel
Ye Olde Automation Pattern
• Local Development (Vagrant, Chef, SSH)
• Source Control (Maybe)
• CI (Run it again!)
• Chef Server (chef-solo?)
• Deploy! (cross your fingers)
This Is NOT The Future I Signed Up For
I want changes to be...
• Safe
• Compliant
• Fast
The path to safety
Code CollaborationLocal Development
Continuous
Integration
Chef Code
Deployment
What
local development
/ˈlōk(ə)l dəˈveləpmənt/
noun
1. Development performed in an isolated environment, such as a laptop or individual virtual machine
Code CollaborationLocal Development
Continuous
Integration
Chef Code
Deployment
ChefSpec Berkshelf
What
Code CollaborationLocal Development
Continuous
Integration
Chef Code
Deployment
Write Code Commit Code
Write Code Test Code Commit Code
Write Tests Write Code Commit Code
Start Here:
Next Step:
End State:
What
Code CollaborationLocal Development
Continuous
Integration
Chef Code
Deployment
ChefSpec
Write
Code
Style
Check
Testing
Frameworks
Testing
Automation
What
Code CollaborationLocal Development
Continuous
Integration
Chef Code
Deployment
● “Clean Room” development?
● In place iteration?
● Why not both?
Truly safe design requires validation in clean and dirty environments
What
Code CollaborationLocal Development
Continuous
Integration
Chef Code
Deployment
Isolation Collaboration
● No one can break my stuff
● In pursuit of perfection
● I know how it all works
● The Bubble
● My stuff could break at any moment
● Good enough to share
● I teach others how my piece works
● Leaving the Nest
What
Code CollaborationLocal Development
Continuous
Integration
Chef Code
Deployment
documentation
/ˌdäkyəmənˈtāSH(ə)n/
noun
1. material that provides official information or evidence or that serves as a record
commit message
http://programmers.stackexchange.com/questions/52267/why-should-i-write-a-commit-message
Q: Why should I write a commit message? - acidzombie24
A: Because when some poor maintainer is hunting a bug and finds that it was added in rev. xyz, he will
want to know what rev. xyz was supposed to do. - Peter Taylor
When you file a pull request, all you’re doing is requesting that another developer
(e.g., the project maintainer) pulls a branch from your repository into their
repository.
https://www.atlassian.com/git/tutorials/making-a-pull-request
What
Code CollaborationLocal Development
Continuous
Integration
Chef Code
Deployment
What
Code CollaborationLocal Development
Continuous
Integration
Chef Code
Deployment
continuous integration
/kənˈtinyo͞ oəs ˌin(t)əˈɡrāSH(ə)n/
noun
1. a software development practice where members of a team integrate their work frequently
continuous delivery
/kənˈtinyo͞ oəs dəˈliv(ə)rē/
noun
1. a software development discipline where you build software in such a way that the software can be
released to production at any time
What
Code CollaborationLocal Development
Continuous
Integration
Chef Code
Deployment
ChefSpec
Style
Check
Testing
Frameworks
Testing
Automation
What
Code CollaborationLocal Development
Continuous
Integration
Chef Code
Deployment
What do you need to get started?
● SCM credentials (deploy key)
● Chef server account (service account)
● https://github.com/zts/cooking-with-jenkins
● http://www.cryptocracy.
com/blog/2014/01/03/cooking-with-jenkins-test-
kitchen-and-docker
What
Code CollaborationLocal Development
Continuous
Integration
Chef Code
Deployment
What
Code CollaborationLocal Development
Continuous
Integration
Chef Code
Deployment
Promote your changes
● Tag your changes in Git
● Freeze your cookbook on the Chef Server
● https://github.com/jonlives/knife-spork
What
Code CollaborationLocal Development
Continuous
Integration
Chef Code
Deployment
What’s next?
● Notifying nodes
○ Meatspace mode
○ Daemon mode
○ Push Jobs
● Notifying humans
○ Email
○ Change management tools
○ Dashboards

Step away from that knife!