32
Continuously Integrating Puppet SNAP Interactive, Inc. Presented by: Matthew Barr Technical Architect Wednesday, April 24, 13

Continuously Integrating Puppet

Embed Size (px)

DESCRIPTION

"Continuously Integrating Puppet" by Matthew Bar at Puppet Camp New York 2013.

Citation preview

Page 1: Continuously Integrating Puppet

Continuously Integrating Puppet

SNAP Interactive, Inc.

Presented by:

Matthew BarrTechnical Architect

Wednesday, April 24, 13

Page 2: Continuously Integrating Puppet

www.snap-interactive.com

Company Overview• SNAP Interactive, Inc.

• Makes AYI: on Facebook, iPhone, Android, AYI.com

• One of the largest social dating platforms on the web (based on monthly active users)

• More than 5 million monthly active users

• Over 1 billion total pieces of structured data from its users

• Synced to 20+ million Facebook profiles

• Receives over 35,000 real-time updates per minute from Facebook

• Subscription-based business model

• SNAP is publicly traded - Ticker: STVI

Wednesday, April 24, 13

Page 3: Continuously Integrating Puppet

www.snap-interactive.com

About me

• Team lead for the operations group

• Sysadmin for over 15 years

• Dev/ops, WebOps, etc.

• LOPSA & USENIX member

• @MatthewBarr - twitter, github

[email protected]

Wednesday, April 24, 13

Page 4: Continuously Integrating Puppet

www.snap-interactive.com

Continuous Integration• The practice of frequently integrating one's

new or changed code with the existing code repository

• Maintain a code repository

• Automate the build

• Make the build self-testing

• Keep the build fast

• Everyone can see the results of the latest build

Wednesday, April 24, 13

Page 5: Continuously Integrating Puppet

www.snap-interactive.com

Puppet

• Puppet Labs

• http://puppetlabs.com/

• You’re at PuppetCamp NYC :)

Wednesday, April 24, 13

Page 6: Continuously Integrating Puppet

www.snap-interactive.com

Jenkins• An extendable open source continuous integration

server

• http://jenkins-ci.org/

Wednesday, April 24, 13

Page 7: Continuously Integrating Puppet

www.snap-interactive.com

So, let’s do this!

• Setup - Dynamic Env & Jenkins

• Static Analysis: Puppet Parsing & Linting

• Module Testing

• Catalog Testing

• Dynamic Analysis: Test deployment & Integrations test

• Nightly Rebuilds

Wednesday, April 24, 13

Page 8: Continuously Integrating Puppet

www.snap-interactive.com

Actual Deployment!

• Canary servers

• Production rollout!

Wednesday, April 24, 13

Page 9: Continuously Integrating Puppet

www.snap-interactive.com

Setup

• Puppet - Dynamic Environments

• Jenkins

• Github / Github Pull Request Builder

Wednesday, April 24, 13

Page 10: Continuously Integrating Puppet

www.snap-interactive.com

Puppet Dynamic Env’s

• google: puppet dynamic environments

• Git based

• Each branch is it’s own environment

• Commit hook / web

• https://puppetlabs.com/blog/git-workflow-and-puppet-environments/

Wednesday, April 24, 13

Page 11: Continuously Integrating Puppet

www.snap-interactive.com

Jenkins install

• puppet module install rtyler-jenkins

• Puppet forge module: rtyler/puppet-jenkins

• But: module is out of date on forge :(

• It’s in our github repos:

• https://github.com/matthewbarr/puppet-jenkins

• https://github.com/rtyler/puppet-jenkins

Wednesday, April 24, 13

Page 12: Continuously Integrating Puppet

www.snap-interactive.com

Jenkins

Wednesday, April 24, 13

Page 13: Continuously Integrating Puppet

www.snap-interactive.com

Github

• Private repos for organizations

• Pull Requests!

Wednesday, April 24, 13

Page 14: Continuously Integrating Puppet

www.snap-interactive.com

GH PR Builder• Monitors github for a pull request

• Triggers a Jenkins build

• Updates merge status

Wednesday, April 24, 13

Page 15: Continuously Integrating Puppet

www.snap-interactive.com

Github Pull Request

Wednesday, April 24, 13

Page 16: Continuously Integrating Puppet

www.snap-interactive.com

Static Analysis

• Puppet Parser / Syntax check• puppet  parser  validate  $file

• ERB Syntax check• erb  -­‐P  -­‐x  -­‐T  '-­‐'  mytempl.erb  |  ruby  -­‐c

• Puppet Lint

• http://puppet-lint.com/

Wednesday, April 24, 13

Page 17: Continuously Integrating Puppet

www.snap-interactive.com

Static Analysis

• Catches errors in syntax & styling

Wednesday, April 24, 13

Page 18: Continuously Integrating Puppet

www.snap-interactive.com

Module Testing

• Rspec-Puppet

• http://rspec-puppet.com/

• Works well for advanced testing of a single module.

• Especially useful for verifying complex internal logic.

Wednesday, April 24, 13

Page 19: Continuously Integrating Puppet

www.snap-interactive.com

Catalog Testing

• Execute a catalog compile (on the puppet master) with a specific set of facts and an environment:

• puppet  master  -­‐-­‐compile  HOST    -­‐-­‐environment  ENV  >  /dev/null

• Another option is Ohad Levy’s manitest

• https://github.com/ohadlevy/manitest

Wednesday, April 24, 13

Page 20: Continuously Integrating Puppet

www.snap-interactive.com

Catalog Testing

Wednesday, April 24, 13

Page 21: Continuously Integrating Puppet

www.snap-interactive.com

Catalog Testing

• Catches dependency loops, unknown modules, variables or facts.

Wednesday, April 24, 13

Page 22: Continuously Integrating Puppet

www.snap-interactive.com

Dynamic Analysis

• Test deployments to all server types

• See the changes to each type of server

• catches: RPM isn’t in a repo, etc

• Integration tests

• catches: Config files that break a service

Wednesday, April 24, 13

Page 23: Continuously Integrating Puppet

www.snap-interactive.com

Test Deployments• ssh  root@testweb1  puppet  agent  -­‐t  -­‐-­‐environment  

pullreq_env  -­‐-­‐color=false

• ssh  root@testmysql1  puppet  agent  -­‐t  -­‐-­‐environment  pullreq_env  -­‐-­‐color=false

Wednesday, April 24, 13

Page 24: Continuously Integrating Puppet

www.snap-interactive.com

Jenkins Log Parser

• Log Parser plugin needs a parsing rules file:

Wednesday, April 24, 13

Page 25: Continuously Integrating Puppet

www.snap-interactive.com

Integration Testing

• Covers critical functionality

• Ensures that systems still serve their function after new code has been applied

• Could be as simple as:

•  curl  http://testweb1/

• But probably isn’t.

Wednesday, April 24, 13

Page 26: Continuously Integrating Puppet

www.snap-interactive.com

Nightly Rebuilds

• What happens when the repos / packages are updated, or a kickstart file is changed?

• Or a manifest has something deleted

• Rebuild your servers from scratch. Often.

• Keeps you confident that you can rebuild your DC & systems

• Only you can prevent bitrot!

Wednesday, April 24, 13

Page 27: Continuously Integrating Puppet

www.snap-interactive.com

Nightly rebuilds

• Create a new VM & get its MAC

• Provision it in cobbler & IPA

• Turn it on

Wednesday, April 24, 13

Page 28: Continuously Integrating Puppet

www.snap-interactive.com

Nightly Rebuild

• Clean up your toys!

• Destroy the VM

• Remove from Cobbler

• Remove from IPA

• Remove from Puppet

Wednesday, April 24, 13

Page 29: Continuously Integrating Puppet

www.snap-interactive.com

Canaries

Wednesday, April 24, 13

Page 30: Continuously Integrating Puppet

www.snap-interactive.com

Going Live!

• On canary servers:

• puppet  apply  -­‐t  -­‐-­‐environment  TEST  -­‐-­‐noop

• puppet  apply  -­‐t  -­‐-­‐environment  TEST

• Merge the pull request :)

• You do have functional checks for the app?

• Your monitoring tools here :)

Wednesday, April 24, 13

Page 31: Continuously Integrating Puppet

www.snap-interactive.com

How You Can Help

• Join the conversation:

• puppet-­‐ci-­‐[email protected]

• Watch for a module to be released to help automate this.

• https://github.com/matthewbarr/puppet-­‐ci

Wednesday, April 24, 13

Page 32: Continuously Integrating Puppet

www.snap-interactive.com

Contact Info• SNAP Interactive, Inc.

www.snap-interactive.com

• Matthew [email protected]

• Twitter & Github: @MatthewBarr

Wednesday, April 24, 13