The Quest for Continuous
Delivery at Pluralsight
Mike Clement
@mdclement
mike@softwareontheside.com
http://blog.softwareontheside.com
Overview of CD
Pluralsight today
The future
If somebody thinks of a good
idea…
…how do we deliver it to users as
quickly as possible?
Continuous Delivery, Introduction
Done?
Done is released
Deployment
Provisioning and managing the environment in which your application
will run (hardware configuration, software, infrastructure,
and external services).
Installing the correct version of your application into it.
Configuring your application, including any data or state it requires.
Continuous Delivery, Chapter 1
Who?
Delivery Team
Product
Testers
Build
Ops
Support
Developers
What?
Managing Risk
Small releases
Automated tests
Visible
Repeatable
Reliable
Predictable
Why?
Reducing Errors
Lowering Stress
Deployment Flexibility
How?
Every change that is made to…
…triggers the pipeline.
Continuous Delivery, Introduction
configuration
source code
environment
data
https://www.chef.io/images/chart-continuous-delivery.png
Version control everything that can change
configuration files
scripts to create databases and their schemas
build scripts
test harnesses
development environments
operating system configurations
Feedback Process
• Build
• Unit tests
• Coverage/static analysis
• Acceptance tests
• “Non-functional” tests (capacity, security, availability)
• UI tests
Practices at Pluralsight
Technology Stack
.NET (C#)
Angular JS
RavenDB
Homegrown XML based DB
IIS/Windows
Windows Services
XP Simple Design
Passes all tests
Clear, expressive, consistent
No duplication
Minimal
Pair Programming
Feedback Process
• Build
• Unit tests
• Coverage/static analysis
• Acceptance tests
• “Non-functional” tests (capacity, security, availability)
• UI tests
Tools at Pluralsight
mSpec
Feedback Process – TeamCity
• Build
• Unit tests
• Acceptance tests
• UI tests
Site Management tool
Octopus
• Variables – application configuration
• Web.config transforms
• NuGet package with application
• Before/after scripting
Hosted ViaWest
• “Private” Cloud
• Commodity virtual hardware
• Moving to…
AWS (EC2)
• Commodity hardware
• Ops configured
Where are we going next?
Every change that is made to…
…triggers the pipeline.
Continuous Delivery, Introduction
configuration
source code
environment
data?
Every change that is made to…
…triggers the pipeline.
Continuous Delivery, Introduction
configuration
source code
environment
data
{
"Title": "AngularJS Fundamentals",
"ShortDescription": "This course will teach you the AngularJS fundamentals required to create testable, MVC-style single page
applications with AngularJS.",
"Description": "In this course you will learn how simple it is to use AngularJS to create maintainable and testable single page
applications. You will learn how to: bootstrap your AngularJS application; use AngularJS markup and expressions; create and use
controllers; use built-in services and create custom services; turn your application into a SPA using routing; and create your own
custom elements and handle events using directives. You will also learn how AngularJS allows you to do all thing using test-driven-
development.",
"PublishedOn": "2013-05-17T00:00:00.0000000",
"ShowTranscripts": true,
"Level": "Intermediate",
"RecentViewTime": 9542531,
"Subcategory": "",
"MaterialsFilePublishDateUtc": "2014-04-11T12:34:15.0000000",
"TotalRating": 7861,
"TotalNumberOfRaters": 1775,
"AllowAnonymousExerciseFiles": false,
"AllowFreeAssessments": false,
"Name": "angularjs-fundamentals",
"Category": {
"CategoryName": "javascript",
"CategoryTitle": "JavaScript"
},
"Duration": 22918,
"ModuleRefs": [
"coursemoduledtos/joe-eames/angularjs-fundamentals-m1-intro",
"coursemoduledtos/joe-eames/angularjs-fundamentals-m2-markup-controllers",
"coursemoduledtos/jim-cooper/angularjs-fundamentals-m3-services",
"coursemoduledtos/jim-cooper/angularjs-fundamentals-m4-routing",
"coursemoduledtos/jim-cooper/angularjs-fundamentals-m5-directives",
"coursemoduledtos/joe-eames/angularjs-fundamentals-m6-testing"
]
}
Feedback Process
• Build
• Unit tests
• Coverage/static analysis
• Acceptance tests
• “Non-functional” tests (capacity, security, availability)
• UI tests
Immediate Future
• Server Management as Code
• More saltstack
• Salt pillars with application code
• Raven to Cassandra
• automate modifications to database schema in Cassandra
• Better staging environment
• SOX
• Automation over Documentation
• Enforcing Traceability
• Change Management
• Better live testing/monitoring – New Relic
A little further out…
• Automated performance testing on stage on every build
• Automated security testing on stage on every build
• Continual automated performance testing on live
• Continual automated security testing on live
• Immutable infrastructure
• Continuous Deployment/Release?
Resources
• Jez Humble - http://continuousdelivery.com/
• Gene Kim - http://www.realgenekim.me/
• Kevin Behr - http://www.kevinbehr.com/
Mike Clement
• @mdclement
• mike@softwareontheside.com
• http://blog.softwareontheside.com
• http://agilecodegames.com
• https://github.com/mdclement
• Utah Software Craftsmanship
• http://utahsc.org
• @utahsc
• We meet the first Wednesday at Pluralsight-Lehi
• http://agileroots.com

The Quest for Continuous Delivery at Pluralsight

  • 1.
    The Quest forContinuous Delivery at Pluralsight Mike Clement @mdclement mike@softwareontheside.com http://blog.softwareontheside.com
  • 2.
  • 6.
    If somebody thinksof a good idea…
  • 7.
    …how do wedeliver it to users as quickly as possible? Continuous Delivery, Introduction
  • 9.
  • 10.
  • 11.
    Deployment Provisioning and managingthe environment in which your application will run (hardware configuration, software, infrastructure, and external services). Installing the correct version of your application into it. Configuring your application, including any data or state it requires. Continuous Delivery, Chapter 1
  • 14.
  • 15.
  • 16.
  • 17.
    Managing Risk Small releases Automatedtests Visible Repeatable Reliable Predictable
  • 18.
  • 19.
  • 20.
  • 21.
    Every change thatis made to… …triggers the pipeline. Continuous Delivery, Introduction configuration source code environment data
  • 22.
  • 24.
    Version control everythingthat can change configuration files scripts to create databases and their schemas build scripts test harnesses development environments operating system configurations
  • 25.
    Feedback Process • Build •Unit tests • Coverage/static analysis • Acceptance tests • “Non-functional” tests (capacity, security, availability) • UI tests
  • 27.
  • 28.
    Technology Stack .NET (C#) AngularJS RavenDB Homegrown XML based DB IIS/Windows Windows Services
  • 29.
    XP Simple Design Passesall tests Clear, expressive, consistent No duplication Minimal
  • 30.
  • 34.
    Feedback Process • Build •Unit tests • Coverage/static analysis • Acceptance tests • “Non-functional” tests (capacity, security, availability) • UI tests
  • 35.
  • 36.
  • 41.
    Feedback Process –TeamCity • Build • Unit tests • Acceptance tests • UI tests
  • 42.
  • 45.
    Octopus • Variables –application configuration • Web.config transforms • NuGet package with application • Before/after scripting
  • 47.
    Hosted ViaWest • “Private”Cloud • Commodity virtual hardware • Moving to…
  • 49.
    AWS (EC2) • Commodityhardware • Ops configured
  • 54.
    Where are wegoing next?
  • 55.
    Every change thatis made to… …triggers the pipeline. Continuous Delivery, Introduction configuration source code environment data?
  • 58.
    Every change thatis made to… …triggers the pipeline. Continuous Delivery, Introduction configuration source code environment data
  • 60.
    { "Title": "AngularJS Fundamentals", "ShortDescription":"This course will teach you the AngularJS fundamentals required to create testable, MVC-style single page applications with AngularJS.", "Description": "In this course you will learn how simple it is to use AngularJS to create maintainable and testable single page applications. You will learn how to: bootstrap your AngularJS application; use AngularJS markup and expressions; create and use controllers; use built-in services and create custom services; turn your application into a SPA using routing; and create your own custom elements and handle events using directives. You will also learn how AngularJS allows you to do all thing using test-driven- development.", "PublishedOn": "2013-05-17T00:00:00.0000000", "ShowTranscripts": true, "Level": "Intermediate", "RecentViewTime": 9542531, "Subcategory": "", "MaterialsFilePublishDateUtc": "2014-04-11T12:34:15.0000000", "TotalRating": 7861, "TotalNumberOfRaters": 1775, "AllowAnonymousExerciseFiles": false, "AllowFreeAssessments": false, "Name": "angularjs-fundamentals", "Category": { "CategoryName": "javascript", "CategoryTitle": "JavaScript" }, "Duration": 22918, "ModuleRefs": [ "coursemoduledtos/joe-eames/angularjs-fundamentals-m1-intro", "coursemoduledtos/joe-eames/angularjs-fundamentals-m2-markup-controllers", "coursemoduledtos/jim-cooper/angularjs-fundamentals-m3-services", "coursemoduledtos/jim-cooper/angularjs-fundamentals-m4-routing", "coursemoduledtos/jim-cooper/angularjs-fundamentals-m5-directives", "coursemoduledtos/joe-eames/angularjs-fundamentals-m6-testing" ] }
  • 63.
    Feedback Process • Build •Unit tests • Coverage/static analysis • Acceptance tests • “Non-functional” tests (capacity, security, availability) • UI tests
  • 64.
    Immediate Future • ServerManagement as Code • More saltstack • Salt pillars with application code • Raven to Cassandra • automate modifications to database schema in Cassandra • Better staging environment • SOX • Automation over Documentation • Enforcing Traceability • Change Management • Better live testing/monitoring – New Relic
  • 65.
    A little furtherout… • Automated performance testing on stage on every build • Automated security testing on stage on every build • Continual automated performance testing on live • Continual automated security testing on live • Immutable infrastructure • Continuous Deployment/Release?
  • 71.
    Resources • Jez Humble- http://continuousdelivery.com/ • Gene Kim - http://www.realgenekim.me/ • Kevin Behr - http://www.kevinbehr.com/
  • 72.
    Mike Clement • @mdclement •mike@softwareontheside.com • http://blog.softwareontheside.com • http://agilecodegames.com • https://github.com/mdclement • Utah Software Craftsmanship • http://utahsc.org • @utahsc • We meet the first Wednesday at Pluralsight-Lehi • http://agileroots.com

Editor's Notes

  • #4 Continuous delivery may seem like Don Quiote tilting at windmills
  • #7 Let’s frame it a different way…
  • #9 This is the “business” goal
  • #10 When are things done?
  • #13 This is the technical goal “It should be as simple as pressing a button.”
  • #14 Aren’t these really the same thing?
  • #22 How do we detect and manage this change?
  • #23 Build a pipeline!
  • #26 As defined in “Continuous Delivery”
  • #30 Start here. Do the simplest thing that works. Can F# help me with this?
  • #34 I could do most of my testing by pushing a button or running a script!
  • #37 I could do most of my testing by pushing a button or running a script!
  • #39 Code on master (limited branching)
  • #42 Orchestrates the feedback Dashboard, email, etc Continuous Integration This is the Pipeline
  • #51 Live Monitoring
  • #52 Deploy tags New Relic
  • #57 Server management as code
  • #58 Configure this via CODE, not manual
  • #61 Document database allows for additions really easily
  • #62 Need to figure this part out. Currently have to get ops to run setup scripts before deployment.
  • #67 This is my quest
  • #68 To follow that star
  • #69 No matter how hopeless No matter how far
  • #70 To fight for the right Without question or pause
  • #71 To be willing to march into Hell For a heavenly cause