56
Continuous Delivery Continuous Quality Continuous Integration

Continuous Integration, Continuous Quality, Continuous Delivery

Embed Size (px)

Citation preview

Continuous DeliveryContinuous Quality

Continuous Integration

Who is this guy, anyway?

John Ferguson Smart

ConsultantTrainerMentorAuthorSpeakerCoder

Training and Consulting Services in

TDD, BDD and ATDD

Automated Acceptance and Regression Testing

Build Automation and Continuous Delivery

Clean Coding Practices

4

Continuous DeliveryGetting value to the business.

Fast.Often.

Continuous Delivery: everyone wants it

5

But Continuous Delivery is impossible without Continuous Quality

Quality must be built in to the process

So how do you deliver?

Examples

Stories

Features

Capabilities

Goals

Acceptance Criteria

“We are going to build an online classifieds website”

Successful projects start with a shared vision

You define goals to achieve your vision

“Let’s increase advertising revenue by letting sellers post their classified ads

“Let’s get more sales for our advertisers by making the ads easier to find online.”

Goals that will deliver business value

Features help deliver these goals

“Let’s get more sales for our advertisers by making the ads easier to find online.”

Notify potential buyers about new itemsIn order to increase sales of advertised articlesAs a sellerI want previous buyers to know about new items that they might be interested in buying

Search for online adsIn order to increase sales of advertised articlesAs a sellerI want buyers to be able to easily find ads for articles they want to buy

We use examples and stories to explore the features

“Searching by category”

Search for online ads

“Searching by keyword and category”

“Searching by keyword and location”

“Filter ads by price”

We use examples and stories to explore the features

Searching by keyword and location

Search for online ads

Given  Sally  wants  to  buy  a  puppy  for  her  son  

When  she  looks  for  ads  in  the  ‘Pets  and  Animals’  category  containing  

       the  word  ‘puppy’  in  New  South  Wales

Then  she  should  obtain  a  list  of  ads  for  puppies  in  New  South  Wales.

Acceptance Criteria illustrate and validate the stories

We automate the acceptance criteria

Scenario: Searching by keyword and location

Given Sally wants to buy a puppy for her son When she looks for ads in the ‘Pets and Animals’ category containing the word ‘puppy’ in New South WalesThen she should obtain a list of ads for puppies in New South Wales.

search_by_keyword_and_location.story

And we implement the acceptance criteria

search_by_keyword_and_location.story

Scenario: Searching by keyword and location

Given Sally wants to buy a puppy for her son When she looks for ads in the ‘Pets and Animals’ category containing the word ‘puppy’ in New South WalesThen she should obtain a list of ads for puppies in New South Wales.

We can now execute our automated acceptance tests

“Searching by keyword and location” is now a pending test

...and implement the application code for that feature

When it is implemented, it will be displayed as a passing test

...and implement the application code for that feature

And the corresponding feature is now partially completed

What’s so important about automating the Acceptance Criteria?

So why automate your acceptance criteria?

They define your goals

They keep you on track

So why automate your acceptance criteria?

They provide better visibility

So why automate your acceptance criteria?

They allow faster release cycles

So why automate your acceptance criteria?

Reduce Risk

So why automate your acceptance criteria?

Reduce Costs

So why automate your acceptance criteria?

Jenkins - it’s how we automate stuff, boss.

Compile and Test

Quality Gateways

Release Candidates

Reporting and Documentation

Automated Deployment

Continuous Delivery

TEST UATPROD

Build Pipelines

Getting your code into production

A simple build pipeline

Build  and  Fast  Tests

Slower  Tests

Acceptance  Tests

Code  Quality  Metrics

Release  Candidate

Deploy  to  Test

Deploy  to  UAT

Deploy  to  ProducLon

1.0.1

PROD

UAT

TEST

Each step is a quality gateway

Build  and  Fast  Tests

Slower  Tests

Acceptance  Tests

Code  Quality  Metrics

Release  Candidate

Deploy  to  Test

Deploy  to  UAT

Deploy  to  ProducLon

1.0.1

PROD

UAT

TEST

Build and initial tests

Fail fastLet people knowNever ignore a broken build

Build  and  Fast  Tests

Slower  Tests

Acceptance  Tests

Code  Quality  Metrics

Release  Candidate

Deploy  to  Test

Deploy  to  UAT

Deploy  to  ProducLon

1.0.1

PROD

UAT

TEST

Build and initial tests

Fail fastLet people knowNever ignore a broken build

Build  and  Fast  Tests

Slower  Tests

Acceptance  Tests

Code  Quality  Metrics

Release  Candidate

Deploy  to  Test

Deploy  to  UAT

Deploy  to  ProducLon

1.0.1

PROD

UAT

TEST

Build and initial tests

Fail fastLet people knowNever ignore a broken build

Build  and  Fast  Tests

Slower  Tests

Acceptance  Tests

Code  Quality  Metrics

Release  Candidate

Deploy  to  Test

Deploy  to  UAT

Deploy  to  ProducLon

1.0.1

PROD

UAT

TEST

Build and initial tests

Fail fastLet people knowNever ignore a broken build

Instant Messaging PluginEmail-ext Plugin

Hudson Sounds Plugin...

Build  and  Fast  Tests

Slower  Tests

Acceptance  Tests

Code  Quality  Metrics

Release  Candidate

Deploy  to  Test

Deploy  to  UAT

Deploy  to  ProducLon

1.0.1

PROD

UAT

TEST

Automated Acceptance Tests

Progress reportsLiving DocumentationHelp for testers

Build  and  Fast  Tests

Slower  Tests

Acceptance  Tests

Code  Quality  Metrics

Release  Candidate

Deploy  to  Test

Deploy  to  UAT

Deploy  to  ProducLon

1.0.1

PROD

UAT

TEST

Automated Acceptance Tests

Progress reportsLiving DocumentationHelp for testersMake them fast

Distributed buildsSelenium Grid

SauceLabs...

Build  and  Fast  Tests

Slower  Tests

Acceptance  Tests

Code  Quality  Metrics

Release  Candidate

Deploy  to  Test

Deploy  to  UAT

Deploy  to  ProducLon

1.0.1

PROD

UAT

TEST

Automated Acceptance Tests

Progress reportsLiving DocumentationHelp for testersMake them public

NotificationsHTML Publisher Plugin

...

Build  and  Fast  Tests

Slower  Tests

Acceptance  Tests

Code  Quality  Metrics

Release  Candidate

Deploy  to  Test

Deploy  to  UAT

Deploy  to  ProducLon

1.0.1

PROD

UAT

TEST

Automated Acceptance Tests

Progress reportsLiving DocumentationHelp for testers

HTML Publisher Plugin

Make them public

Build  and  Fast  Tests

Slower  Tests

Acceptance  Tests

Code  Quality  Metrics

Release  Candidate

Deploy  to  Test

Deploy  to  UAT

Deploy  to  ProducLon

1.0.1

PROD

UAT

TEST

Checking Code Quality

If a metric matters, fail the buildProactive Code QualityComplements Sonar

Build  and  Fast  Tests

Slower  Tests

Acceptance  Tests

Code  Quality  Metrics

Release  Candidate

Deploy  to  Test

Deploy  to  UAT

Deploy  to  ProducLon

1.0.1

PROD

UAT

TEST

Checking Code Quality

If a metric matters, fail the buildProactive Code QualityComplements Sonar

Build  and  Fast  Tests

Slower  Tests

Acceptance  Tests

Code  Quality  Metrics

Release  Candidate

Deploy  to  Test

Deploy  to  UAT

Deploy  to  ProducLon

1.0.1

PROD

UAT

TEST

Checking Code Quality

If a metric matters, fail the buildProactive Code QualityComplements Sonar

Build  and  Fast  Tests

Slower  Tests

Acceptance  Tests

Code  Quality  Metrics

Release  Candidate

Deploy  to  Test

Deploy  to  UAT

Deploy  to  ProducLon

1.0.1

PROD

UAT

TEST

Checking Code Quality

If a metric matters, fail the buildProactive Code QualityComplements Sonar

Enforcing code quality

Cobertura PluginCheckstyle PluginFindBugs Plugin

...

Build  and  Fast  Tests

Slower  Tests

Acceptance  Tests

Code  Quality  Metrics

Release  Candidate

Deploy  to  Test

Deploy  to  UAT

Deploy  to  ProducLon

1.0.1

PROD

UAT

TEST

Generating a release candidate

Build a release candidate earlyReuse, don’t rebuild

Build  and  Fast  Tests

Slower  Tests

Acceptance  Tests

Code  Quality  Metrics

Release  Candidate

Deploy  to  Test

Deploy  to  UAT

Deploy  to  ProducLon

1.0.1

PROD

UAT

TEST

Generating a release candidate

Build a release candidate earlyReuse, don’t rebuild

Choose a release strategy

Build  and  Fast  Tests

Slower  Tests

Acceptance  Tests

Code  Quality  Metrics

Release  Candidate

Generating a release candidate

SCM server

SCM  commit

SNAPSHOT

1.0.1

Build  and  Fast  Tests

Slower  Tests

Acceptance  Tests

Code  Quality  Metrics

Release  Candidate

Generating a release candidate

SCM server

SCM  commit

SNAPSHOT

1.0.1

What about maven?

Generating a release candidate

What about maven?Strategy 1 : The Maven Release Plugin

but not as we know it...

1.0.65

mvn  release

1.0.0-SNAPSHOT

Generating a release candidate

What about maven?Strategy 2 : Just set the version

1.0.65

mvn  versions:set

1.0.0-SNAPSHOT

mvn  install

Artifactory PluginNexus Plugin

Build  and  Fast  Tests

Slower  Tests

Acceptance  Tests

Code  Quality  Metrics

Release  Candidate

Deploy  to  Test

Deploy  to  UAT

Deploy  to  ProducLon

1.0.1

PROD

UAT

TEST

Generating a release candidate

Build a release candidate earlyReuse, don’t rebuild

Choose an archiving strategy

Build  and  Fast  Tests

Slower  Tests

Acceptance  Tests

Code  Quality  Metrics

Release  Candidate

Deploy  to  Test

Deploy  to  UAT

Deploy  to  ProducLon

1.0.1

PROD

UAT

TEST

Generating a release candidate

Build a release candidate earlyReuse, don’t rebuild

Copy Artifacts PluginArtifactory Plugin

Nexus Plugin...

1.0.1

maven

Build  and  Fast  Tests

Slower  Tests

Acceptance  Tests

Code  Quality  Metrics

Release  Candidate

Deploy  to  Test

Deploy  to  UAT

Deploy  to  ProducLon

1.0.1

PROD

UAT

TEST

Automated Deployment

Automate your deploymentsReuse deployment processesDeploy your environments too

Build  and  Fast  Tests

Slower  Tests

Acceptance  Tests

Code  Quality  Metrics

Release  Candidate

Deploy  to  Test

Deploy  to  UAT

Deploy  to  ProducLon

1.0.1

PROD

UAT

TEST

Automated Deployment

Automate your deploymentsReuse deployment processesDeploy your environments too

Deployer PluginSSH Plugin

...

Visualizing the build process

Build  and  Fast  Tests

Slower  Tests

Acceptance  Tests

Code  Quality  Metrics

Release  Candidate

Deploy  to  Test

Deploy  to  UAT

Deploy  to  ProducLon

1.0.1

PROD

UAT

TEST

Build  and  Fast  Tests

Slower  Tests

Acceptance  Tests

Code  Quality  Metrics

Release  Candidate

Deploy  to  Test

Deploy  to  UAT

Deploy  to  ProducLon

1.0.1

PROD

UAT

TEST

Visualizing the build process

Build  and  Fast  Tests

Slower  Tests

Acceptance  Tests

Code  Quality  Metrics

Release  Candidate

Deploy  to  Test

Deploy  to  UAT

Deploy  to  ProducLon

1.0.1

PROD

UAT

TEST

So how do you deliver?

Rigorous testing and reporting gives us confidence in our product...

So how do you deliver?

And a Jenkins build pipeline makes automated delivery possible.

John  Ferguson  SmartEmail:  [email protected]:  hGp://www.wakaleo.com

TwiGer:  wakaleo

どうもありがとうございまし

Thank  You

Training and Consulting Services in

TDD, BDD and ATDD

Automated Acceptance and Regression Testing

Build Automation and Continuous Delivery

Clean Coding Practices