SlideShare ist ein Scribd-Unternehmen logo
1 von 130
Downloaden Sie, um offline zu lesen
Supportive Cast
Marcin Grzejszczak
Spring Cloud developer at Pivotal
Twitter: @mgrzejszczak
Blog: http://toomuchcoding.com
Cora Iberkleid
Senior Platform Architect at Pivotal
Twitter: @ciberkleid
Continuously Delivering Business Value
https://www.youtube.com/watch?v=7APZD0me1nU by Onsi Fakhouri
The Circle of Code...
• Depicts an ideal, iterative manner of delivering
business value to production
• Enables the business and developers to test ideas
against reality quickly
• Aims to improve software quality and
responsiveness to changing customer requirements
Spring Cloud Pipelines is the answer :-)
But what is the question?
How can we avoid creating a deployment
pipeline from scratch for each new project?
What is Spring Cloud Pipelines?
• opinionated template of a deployment pipeline
• based on good practices from different projects
• uses the “Infrastructure as Code” approach
• if automation server goes down you can recover everything quickly
• the automation server setup should be automated too!
• you can even write tests for your pipelines
Spring Cloud Pipelines
• Supports the following automation servers out of the box:
• Concourse
• Jenkins using Jenkins Job DSL plugin
• Jenkins using Jenkinsfile with Blue Ocean
• Logic of all steps done via Bash scripts
• you can convert the internals to suit your needs
• you can use whatever automation server you want
• supports Maven & Gradle
• Includes 150 Bash tests to validate your customizations of SCP
• using https://github.com/sstephenson/bats
Spring Cloud Pipelines – some opinionated defaults
• Four environments (Build, Test, Stage, Prod)
• Types of tests
• e.g. Unit, API compatibility, Smoke, Integration, Rollback, End to end
• Use cloud-native apps
• Use contracts for integration testing
• PaaS deployment platform
Spring Cloud Pipelines
Spring Cloud Pipelines
Spring Cloud Pipelines - Concourse
Spring Cloud Pipelines – The big picture on Concourse
Concourse
Spring Cloud Pipelines - Jenkins Job DSL
Spring Cloud Pipelines - Jenkinsfile & Blue Ocean
Why do we deploy software?
• We’re paid for delivering business value
• Features are done when they are deployed to production
• It’s better to deploy frequently for faster feedback
• It’s better to fail the deployment pipeline as fast as possible
• Deployments should take place in a standardized, automated fashion
• Your deployment pipeline should test rollback
• That way you can perform A/B or zero downtime deployment to production
Why do we deploy software?
• We’re paid for delivering business value
• Features are done when they are deployed to production
• It’s better to deploy frequently for faster feedback
• It’s better to fail the deployment pipeline as fast as possible
• Deployments should take place in a standardized, automated fashion
• Your deployment pipeline should test rollback
• That way you can perform A/B or zero downtime deployment to production
Spring Cloud Pipelines
Problem - slow feedback
• Nobody wants to wait until the end of the pipeline to see that
something is not working fine
• We want to fail fast - even during build time
• If integration is faulty
• If our API is backward incompatible
• There should be no need to wait until end to end tests are executed
Solution - fail fast
• We’re running unit and integration tests during build time
• To test faulty integration we use Spring Cloud Contract for HTTP / messaging
• Producer defines a contract
• From the contract
o tests are generated to see if the producer is not lying
o stubs are generated for consumers to use
• Consumer can reuse it without running the producer
• Fail at build time if integration fails (fail fast!)
• All stubs reside in Bintray / Nexus / Artifactory (thus can be reused)
Broken build Current implementation (V2)
does not support old contracts
(V1)
Why do we deploy software?
• We’re paid for delivering business value
• Features are done when they are deployed to production
• It’s better to deploy frequently for faster feedback
• It’s better to fail the deployment pipeline as fast as possible
• Deployments should take place in a standardized, automated fashion
• Your deployment pipeline should test rollback
• That way you can perform A/B or zero downtime deployment to production
STANDARDIZATION GIVES LOWER SUPPORT
COSTS AND MORE CHANCES OF PEOPLE
ROTATION
Solution - PaaS & tooling
• Use a PaaS to standardize the way you deploy and monitor your software
• Spring Cloud Pipelines uses Cloud Foundry [1] or Kubernetes [2] as a PaaS
implementation
• You can also use PCF Dev [3] or Minikube [4]
• PaaS abstracts the application governance from underlying infrastructure
• you can deploy, scale, manage applications in the same way if PaaS was running on your
laptop, Amazon, Google, Azure etc.
• Database schema upgrade is done via tools like Flyway [5] or Liquibase [6]
[1] https://www.cloudfoundry.org, [2] https://kubernetes.io/
[3] https://pivotal.io/pcf-dev, [4] https://github.com/kubernetes/minikube
[5] https://flywaydb.org/, [6] http://www.liquibase.org/
Spring Cloud Pipelines
Spring Cloud Pipelines
After the application got deployed to test environment
• The database schema gets updated upon application startup
• We run a handful of smoke tests to see if crucial parts of our application are
working fine
• We want to test if the app is properly packaged
• The application is surrounded by stubs - no real integrations take place
• Spring Cloud Contract Stub Runner Boot app is responsible for serving stubs
Problem - rollback DB
• Deployment pipelines should test whether the application can be rolled back
• Rolling back database changes is extremely difficult
• Especially if you deploy once every 6 months (the number of changes is gigantic)
• How can you roll back a deletion of a column?
Spring Cloud Pipelines
Solution - application rollback
• The easiest solution is… NOT TO DB ROLLBACK
• Perform only backward compatible changes (always add data)
• Or perform backward incompatible changes in a backward compatible way [1]
• Roll back the application only (the JAR)
• The application and DB changes need to be backward compatible
• That way you can ensure that two applications (old / new versions) can run
at the same time
[1] https://spring.io/blog/2016/05/31/zero-downtime-deployment-with-a-database
Backward incompatible DB change
Old application (V1) can’t work
with new database (V2)
Deploy (V1) and connect to the
new database (V2)
Spring Cloud Pipelines
Problem - end to end tests
• End to end tests are slow and brittle
• QA department writes an E2E for every feature we have
• E2E environment setup
• one environment shared between all applications?
• one environment per application?
• Surrounding apps should be deployed in
• production versions?
• development versions?
Solution - don’t do E2E?
• Regardless of the time spent on QA / UAT you can still have bugs
on production
• Assuming that you ...
• embrace failure
• introduce monitoring of business key performance indicators (KPIs)
• introduce alerting over the metrics
• ensure that you can rollback on production
• … you could stop doing any end to end tests
Spring Cloud Pipelines
• Deploy to stage and running e2e tests are manual steps
• you have to wait for your turn for the env
• some manual work has to be done to purge stale data etc.
Spring Cloud Pipelines
Problem - deployment to production
• We don’t want to deploy the application to production at night
• We want to treat a production deployment like any other deployment
• We’d like to be able to perform A/B testing and zero downtime deployment
• We’d like to easily rollback when something goes wrong
Solution - PaaS + SC Pipelines
• Our application has KPI monitoring in place
• Alerting are set for KPIs
• It has been tested that the application can be easily rolled back
• PaaS (CF or K8S) can take care of zero downtime deployment
Spring Cloud Pipelines
• prod-deploy deploys the pipeline version of the app to production
next to the current production version
• Once deployed we tag the repo with prod/VERSION_NUMBER
• prod-complete stops the old instance, leaving only the new one
running
• prod-rollback deletes the new instance, removes the
prod/VERSION_NUMBER tag and leaves only the old one running
A/B ON CF
DEMO
Two versions running at the same time
Two versions registered
under same hostname
Old instance
New instance
MIGRATING TO SPRING CLOUD PIPELINES DEMO
based upon the
Step-by-step Cloud Foundry migration
tutorial by @ciberkleid
Application Refactoring for
Spring Cloud Pipelines
A Story in Three Acts
Premise
Main Characters
48
Greeting UI Fortune Service Fortune DB
Simon
Supporting Characters
49
The SCS Triplets
and their pet Rabbit
Greeting UI Fortune Service Fortune DB
Simon
The Setting
Story Line
51
Greeting UI
Simon
Story Line
52
Greeting UI
Simon
Hey in !
Story Line
53
Greeting UI
The SCS Triplets
and their pet Rabbit
Simon
Hey in !
Story Line
54
Greeting UI
The SCS Triplets
and their pet Rabbit
???
Simon
Hey in !
Story Line
55
Greeting UI
The SCS Triplets
and their pet Rabbit
!!!
Fortune Service
Simon
Hey in !
Story Line
56
Greeting UI
The SCS Triplets
and their pet Rabbit
Fortune Service
Simon
Hey in !
Story Line
57
Greeting UI
The SCS Triplets
and their pet Rabbit
Fortune Service Fortune DB
Simon
Hey in !
Story Line
58
Greeting UI
The SCS Triplets
and their pet Rabbit
Fortune Service Fortune DB
Simon
Hey in !
Story Line
59
Greeting UI
The SCS Triplets
and their pet Rabbit
Fortune Service Fortune DB
Simon
Hey in !
Story Line
60
Greeting UI
“Do h k ”
Simon
Story Line
61
Greeting UI
Simon
Gre vi ! Who
sa ?
Story Line
62
Greeting UI Fortune Service
Simon
Gre vi ! Who
sa ?
Story Line
63
Greeting UI Fortune Service
Simon
Gre vi ! Who
sa ?
Story Line
64
Greeting UI Fortune Service Fortune DB
Simon
Gre vi ! Who
sa ?
Story Line
65
Greeting UI Fortune Service Fortune DB
Simon
Gre vi ! Who
sa ?
Story Line
66
Greeting UI Fortune Service Fortune DB
Simon
It’s o t
ha q e n...
Story Line
67
Greeting UI Fortune Service Fortune DB
Simon
It’s o t
ha q e n...
The SCS Triplets
and their pet Rabbit
Story Line
68
Greeting UI Fortune Service Fortune DB
Simon
I ju w t
k o ...
The SCS Triplets
and their pet Rabbit
Story Line
69
Greeting UI Fortune Service Fortune DB
Simon
PI NE
T E H S!!!
The SCS Triplets
and their pet Rabbit
Act I
The Scaffold
Act I: The Scaffold
71
● Objective:
○ Automate the deployment of greeting-ui and fortune-service
a.k.a. Make the pipelines run green
○ Establish environments (PCF spaces) in accordance with SCP
recommendations
● Approach:
○ Minimum changes to apps (scaffolding, not code)
○ Create a pipeline for each
○ Create PCF spaces
○ Run the pipelines
Greeting and Fortune
● Spring Boot apps
● Source code on GitHub
● Maven
● No tests
● Use 5 services
○ MySQL database (for Fortune)
○ Spring Cloud Services: Eureka, Hystrix/Turbine, Config Server
○ Rabbit - for Config Server refresh trigger propagation
● Add 2 new branches to the app repos
App Scaffold
73
● Add 2 new branches to the app repos
● Add a Maven wrapper
○ mvn -N io.takari:maven:wrapper
App Scaffold
74
● Add 2 new branches to the app repos
● Add a Maven wrapper
○ mvn -N io.takari:maven:wrapper
● Add artifact repo info to app pom.xml (and ~/.m2/settings.xml)
○ distributionManagement.repository.id
○ distributionManagement.repository.url
App Scaffold
75
● Add 2 new branches to the app repos
● Add a Maven wrapper
○ mvn -N io.takari:maven:wrapper
● Add artifact repo info to app pom.xml
○ distributionManagement.repository.id
○ distributionManagement.repository.url
● git push!
App Scaffold
76
Pipeline Configuration - Git and Mvn
77
● Create a credentials file for each app (copy sample in SCP)
○ Git url and branch of your app
○ Git url and branch of the SCP code base use v1.0.0.M8 or later for cf)
○ Your git name, email, and private key
○ Your maven repo info and credentials
Build - Success!
78
● At this point, the Build jobs should all succeed
● App builds, jar uploads to maven repo, git tagged as “dev/<version>”
● The api compatibility job runs “mvn clean verify -P apicompatibility”, but the
profile does not exist yet, so it really isn’t doing much
● Takes place on Concourse worker
● Create app manifest.yml
● Create a new manifest for SCP (e.g. sc-pipelines.yml)
○ Provide info for SCP to provision services on CF (test* & stage)
● Git push!
App Scaffold
79
test:
services:
- name: fortune-db
type: broker
broker: cleardb
plan: spark
- name: config-server
type: broker
broker: p-config-server
plan: standard
params:
git:
uri: https://github.com/ciberkleid/app-config
useExisting: true
...
Pipeline Configuration - CF
80
● Add general CF info to the credentials file
○ paas-type: cf
○ pipeline-descriptor (the sc-pipelines manifest)
○ paas-hostname-uuid (to avoid route collision)
● Add target & login info for Test, Stage and Prod
○ For Test, you specify a prefix. SCP appends the app name
Cloud Foundry Setup: Test, Stage, Prod
81
● Create the Test, Stage, and Prod spaces
● Manually provision services in Prod
○ And maybe Stage
○ But not Test
Test, Stage & Prod - Success!
82
● App deployed to PCF through Prod
● Git tagged as prod/<version>
● Ability to trigger rollback through Concourse
83
84
Act I: The Scaffold - Recap
85
● Objective:
○ Automate the deployment of greeting-ui and fortune-service
a.k.a. Make the pipelines run green
○ Establish environments (PCF spaces) in accordance with SCP
recommendations
● Approach:
○ Minimum changes to apps (scaffolding, not code)
○ Create a pipeline for each
○ Create PCF spaces
○ Run the pipelines
Is That Enough?
86
Nope!
87
Same for apicompatibility and e2e
Act II: The Test
Act II: The Test
89
● Objective:
○ Increase effectiveness of and confidence in the pipelines
○ Standardize approach to testing
● Approach:
○ Use mvn profiles to control test executions
○ Add/organize tests in agreement with SCP framework
○ Enable DB backward compatibility testing
Test Control - Maven Profiles
90
● Add profiles to the app pom.xml
○ default
○ apicompatibility
○ smoke
○ e2e
<profile>
<id>default</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<includes>
<include>**/*Tests.java</include>
<include>**/*Test.java</include>
</includes>
<excludes>
<exclude>**/smoke/**</exclude>
<exclude>**/e2e/**</exclude>
</excludes>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</profile>
Test Control - Organize Tests
91
● Organize tests into packages matching the profiles
● Add tests for each profile
Test Coverage - Fortune Smoke
92
fortune-service
fortune-db
Test Coverage - Fortune E2E
93
greeting-ui
fortune-db
fortune-service
Assuming same domain...
Test Coverage - Greeting Smoke
94
greeting-ui
circuit breaker fallback
Test Coverage - Greeting E2E
95
greeting-ui
fortune-service
Enable Database Rollback Testing
96
● Flyway
○ OSS DB migration tool
○ For relational databases
○ Convention over configuration
○ Database versioning
○ Migration on app startup (good for CD!)
DB Schema Creation With Flyway
97
● Disable JPA auto-generated schemas; let flyway do it
● Follow flyway conventions for SQL file name
● Tada! Schema is now versioned!
DB Schema Population With Flyway
98
● Add INSERT statements to V1__init.sql
● Data is populated upon app startup, but only once per DB version
Act II: The Test - Recap
99
● Objective:
○ Increase effectiveness of and confidence in the pipelines
○ Standardize approach to testing
● Approach:
○ Use mvn profiles to control test executions
○ Add/organize tests in agreement with SCP framework
○ Enable DB backward compatibility testing
Is THAT Enough?
100
● Good:
○ You are in a great position to include well-organized, robust testing and
derive a high level of confidence from your pipelines
○ You can ensure safe rollbacks in case of database schema changes
● Better:
○ Implementing a contract-driven approach will have additional benefits to
your general development practice
○ Inter-team communication will be simpler
○ Contract tests will catch breaking API changes in build rather than stage
○ Troubleshooting will be easier
○ Failure and feedback will be faster
Act III: The Contract
Act III: The Contract
102
● Objective:
○ Increase reliability - strive to maximize pipeline benefits
○ Encourage contract-based programming practices
● Approach:
○ Add contracts, stubs, and a stubrunner
○ Enable API backward compatibility testing
The Greeting/Fortune Contract
103
import org.springframework.cloud.contract.spec.Contract
Contract.make {
description("""
should return a fortune string
""")
request {
method GET()
url "/"
}
response {
status 200
body "foo fortune"
}
}
Spring Cloud Contract Basics
104
● Add the Spring Cloud Contract Maven Plugin to your pom.xml (Fortune)
○ Plugin requires a base class to set up the context and stub out the service
that satisfies the API call (e.g. the DB)
public class BaseClass {
@Before
public void setup() {
FortuneService service = BDDMockito.mock(FortuneService.class);
BDDMockito.given(service.getFortune()).willReturn("foo fortune");
RestAssuredMockMvc.standaloneSetup(new FortuneController(service));
}
}
Spring Cloud Contract Basics
105
● Add the Spring Cloud Contract Maven Plugin to your pom.xml (Fortune)
○ Plugin will auto-generate tests and stubs (and a stub.jar)
○ Stub jar is uploaded to the maven repo, along with the app jar
For Back-Compatibility, Use Prod Contracts
106
<profile>
<id>apicompatibility</id>
<plugin>
<configuration>
<contractsRepositoryUrl>${repo.with.binaries}</contractsRepositoryUrl>
<contractDependency>
<groupId>${project.groupId}</groupId>
<artifactId>${project.artifactId}</artifactId>
<classifier>stubs</classifier>
<version>${latest.production.version}</version>
</contractDependency>
...
In this case, we want the contracts plugin to generate tests based on contracts outside of the
project (the ones from the latest prod jar on our maven repo). Pipeline injects values in red
dynamically
Greeting: Build with Stubrunner
greeting-ui
circuit breaker fallback
or manually configured
WireMock
greeting-ui
stubs
without stubrunner with stubrunner
● Greeting starts an in-process stubrunner that automatically configures
WireMock
Greeting: Integration Tests Aligned with Stubs
108
For in-process stubrunner, the
server-side Wiremock port
For in-process stubrunner, the
client-side endpoint config
Greeting: Test with Stubrunner (standalone)
greeting-ui
circuit breaker fallback
greeting-ui
stubrunner
without stubrunner with stubrunner
Note: Update the
greeting smoke tests
accordingly
Home Stretch: Standalone Stubrunner Config
● You need a stubrunner app!
○ Clone spring-cloud-samples/cloudfoundry-stub-runner-boot
○ Build it, and upload the jar to your maven repo
● Your stubrunner app needs a manifest!
○ Put it in your app repo (e.g. greeting-ui repo)
● You need to tell SCP to deploy the stubrunner app!
○ Do it through the pipeline descriptor (e.g. sc-pipelines.yml)
Home Stretch: Standalone Stubrunner Config
● Specify the server side (stubrunner) ports
<properties>
<stubrunner.ids>io.pivotal:fortune-service:_latest:stubs:10000</stubrunner.ids>
</properties>
● Disable Eureka lookup for smoke tests
● Provide URLs to non-8080 stubrunner ports explicitly
Act III: The Contract - Recap
112
● Objective:
○ Increase reliability - strive to maximize pipeline benefits
○ Encourage contract-based programming practices
● Approach:
○ Add contracts, stubs, and a stubrunner
○ Enable API back compatibility testing
So what have we achieved
113
● The Scaffold:
○ Automate the deployment of greeting-ui and fortune-service
a.k.a. Make the pipelines run green
○ Establish environments (PCF spaces) in accordance with SCP
recommendations
● The Test:
○ Increase effectiveness of and confidence in the pipelines
○ Standardize approach to testing
● The Contract
○ Increase reliability - strive to maximize pipeline benefits
○ Encourage contract-based programming practices
Finally...
One More Thing...
Just Kidding :-)
You’re Done!
Though Really, You’re Just Beginning...
118
Because now…
● You can evolve your app faster
● With (hopefully) better code
● Consistent testing practices
● Fast failure and feedback
● Contract-based API definitions
● API and DB rollback assurance
● And…. instant pipelines from source to production!
What About Poor Simon?
119
Greeting UI Fortune Service Fortune DB
Simon
W O D
Do h k !?
What About Poor Simon?
120
Greeting UI Fortune Service Fortune DB
Simon
W O D
Do h k !?
Contract.make{“””
should return author name
“””)
...
What About Poor Simon?
121
Greeting UI Fortune Service Fortune DB
Simon
W O D
Do h k !?
Fortune Service
Stub
What About Poor Simon?
122
Greeting UI Fortune Service Fortune DB
Simon
W O D
Do h k !?
V2:
ALTER TABLE fortune
CHANGE COLUMN text TO fortune,
ADD author CHAR (50);
What About Poor Simon?
123
Greeting UI Fortune Service Fortune DB
Simon
W O D
Do h k !?
What About Poor Simon?
124
Greeting UI Fortune Service Fortune DB
Simon
Piv sa t
t e m !
Simon Spring Cloud Pipelines
125
Greeting UI Fortune Service Fortune DB
Oh, ri t!
I k e t .
Sample Code...
126
● Github repos showing the
end-state of each “act”
● Step-by-step instructions will
be published soon and made
accessible through the repo
Readmes
Summary
• Continuous Deployment allows you to continuously deliver business value
• Spring Cloud Pipelines gives you OOB tooling to test your software via
• unit and integration testing
• contract testing
• rollback testing
• You can gradually migrate your applications to start using SC Pipelines
• SC Pipelines allows you to easily adjust the deployment pipeline to suit your
company’s needs
• Thanks to PaaS you can easily do A/B & zero downtime deployment
● Github Analytics: https://github.com/spring-cloud-samples/github-analytics
● Github Webhook: https://github.com/spring-cloud-samples/github-webhook
● Fortune Service: https://github.com/ciberkleid/fortune-service
● Greeting UI: https://github.com/ciberkleid/greeting-ui/
● SC-Pipelines documentation: https://cloud.spring.io/spring-cloud-pipelines/
● Pivotal Web Services trial : https://run.pivotal.io/
● PCF Dev (CF on your laptop) : https://docs.pivotal.io/pcf-dev/
Links
Learn More. Stay Connected.
▪ Read the docs
http://cloud.spring.io/spring-cloud-pipelines/
▪ Talk to us on Gitter
https://gitter.im/spring-cloud/spring-cloud-pipelines
Twitter: twitter.com/springcentral
YouTube: spring.io/video
LinkedIn: spring.io/linkedin
Google Plus: spring.io/gplus
ciberkleid
mgrzejszczak
JavaFXpert

Weitere ähnliche Inhalte

Was ist angesagt?

Anatomy of a Build Pipeline
Anatomy of a Build PipelineAnatomy of a Build Pipeline
Anatomy of a Build PipelineSamuel Brown
 
Chef for DevOps - an Introduction
Chef for DevOps - an IntroductionChef for DevOps - an Introduction
Chef for DevOps - an IntroductionSanjeev Sharma
 
Journée DevOps : De l'intégration continue au déploiement continu avec Jenkins
Journée DevOps : De l'intégration continue au déploiement continu avec JenkinsJournée DevOps : De l'intégration continue au déploiement continu avec Jenkins
Journée DevOps : De l'intégration continue au déploiement continu avec JenkinsPublicis Sapient Engineering
 
Building a CICD pipeline for deploying to containers
Building a CICD pipeline for deploying to containersBuilding a CICD pipeline for deploying to containers
Building a CICD pipeline for deploying to containersAmazon Web Services
 
CI and CD Across the Enterprise with Jenkins (devops.com Nov 2014)
CI and CD Across the Enterprise with Jenkins (devops.com Nov 2014)CI and CD Across the Enterprise with Jenkins (devops.com Nov 2014)
CI and CD Across the Enterprise with Jenkins (devops.com Nov 2014)CloudBees
 
Linux Collaboration Summit Keynote: Transformation: It Takes a Platform
Linux Collaboration Summit Keynote: Transformation: It Takes a PlatformLinux Collaboration Summit Keynote: Transformation: It Takes a Platform
Linux Collaboration Summit Keynote: Transformation: It Takes a Platformcornelia davis
 
Continuous Deployment To The Cloud With Spring Cloud Pipelines @WarsawCloudNa...
Continuous Deployment To The Cloud With Spring Cloud Pipelines @WarsawCloudNa...Continuous Deployment To The Cloud With Spring Cloud Pipelines @WarsawCloudNa...
Continuous Deployment To The Cloud With Spring Cloud Pipelines @WarsawCloudNa...Marcin Grzejszczak
 
How Atlassian's Build Engineering Team Has Scaled to 150k Builds Per Month an...
How Atlassian's Build Engineering Team Has Scaled to 150k Builds Per Month an...How Atlassian's Build Engineering Team Has Scaled to 150k Builds Per Month an...
How Atlassian's Build Engineering Team Has Scaled to 150k Builds Per Month an...Peter Leschev
 
Continuous Testing using Shippable and Docker
Continuous Testing using Shippable and DockerContinuous Testing using Shippable and Docker
Continuous Testing using Shippable and DockerMukta Aphale
 
Serverless Delivery
Serverless DeliveryServerless Delivery
Serverless DeliveryCasey Lee
 
Removing Barriers Between Dev and Ops
Removing Barriers Between Dev and OpsRemoving Barriers Between Dev and Ops
Removing Barriers Between Dev and Opscornelia davis
 
Continuous Testing in the Agile Age
Continuous Testing in the Agile AgeContinuous Testing in the Agile Age
Continuous Testing in the Agile AgeBlazeMeter
 
PuppetConf 2016: Continuous Delivery and DevOps with Jenkins and Puppet Enter...
PuppetConf 2016: Continuous Delivery and DevOps with Jenkins and Puppet Enter...PuppetConf 2016: Continuous Delivery and DevOps with Jenkins and Puppet Enter...
PuppetConf 2016: Continuous Delivery and DevOps with Jenkins and Puppet Enter...Puppet
 
Pimp your Continuous Delivery Pipeline with Jenkins workflow (W-JAX 14)
Pimp your Continuous Delivery Pipeline with Jenkins workflow (W-JAX 14)Pimp your Continuous Delivery Pipeline with Jenkins workflow (W-JAX 14)
Pimp your Continuous Delivery Pipeline with Jenkins workflow (W-JAX 14)CloudBees
 
Orchestrate Your End-to-end Mainframe Application Release Pipeline
Orchestrate Your End-to-end Mainframe Application Release PipelineOrchestrate Your End-to-end Mainframe Application Release Pipeline
Orchestrate Your End-to-end Mainframe Application Release PipelineDevOps.com
 
Delivery With Chef - ChefConf 2015
Delivery With Chef - ChefConf 2015 Delivery With Chef - ChefConf 2015
Delivery With Chef - ChefConf 2015 Chef
 
Into the cloud
Into the cloudInto the cloud
Into the cloudTomas Riha
 
Infrastructure as Code with Chef
Infrastructure as Code with ChefInfrastructure as Code with Chef
Infrastructure as Code with ChefSarah Hynes Cheney
 

Was ist angesagt? (20)

Anatomy of a Build Pipeline
Anatomy of a Build PipelineAnatomy of a Build Pipeline
Anatomy of a Build Pipeline
 
Chef for DevOps - an Introduction
Chef for DevOps - an IntroductionChef for DevOps - an Introduction
Chef for DevOps - an Introduction
 
Journée DevOps : De l'intégration continue au déploiement continu avec Jenkins
Journée DevOps : De l'intégration continue au déploiement continu avec JenkinsJournée DevOps : De l'intégration continue au déploiement continu avec Jenkins
Journée DevOps : De l'intégration continue au déploiement continu avec Jenkins
 
Building a CICD pipeline for deploying to containers
Building a CICD pipeline for deploying to containersBuilding a CICD pipeline for deploying to containers
Building a CICD pipeline for deploying to containers
 
CI and CD Across the Enterprise with Jenkins (devops.com Nov 2014)
CI and CD Across the Enterprise with Jenkins (devops.com Nov 2014)CI and CD Across the Enterprise with Jenkins (devops.com Nov 2014)
CI and CD Across the Enterprise with Jenkins (devops.com Nov 2014)
 
Linux Collaboration Summit Keynote: Transformation: It Takes a Platform
Linux Collaboration Summit Keynote: Transformation: It Takes a PlatformLinux Collaboration Summit Keynote: Transformation: It Takes a Platform
Linux Collaboration Summit Keynote: Transformation: It Takes a Platform
 
Continuous Deployment To The Cloud With Spring Cloud Pipelines @WarsawCloudNa...
Continuous Deployment To The Cloud With Spring Cloud Pipelines @WarsawCloudNa...Continuous Deployment To The Cloud With Spring Cloud Pipelines @WarsawCloudNa...
Continuous Deployment To The Cloud With Spring Cloud Pipelines @WarsawCloudNa...
 
How Atlassian's Build Engineering Team Has Scaled to 150k Builds Per Month an...
How Atlassian's Build Engineering Team Has Scaled to 150k Builds Per Month an...How Atlassian's Build Engineering Team Has Scaled to 150k Builds Per Month an...
How Atlassian's Build Engineering Team Has Scaled to 150k Builds Per Month an...
 
Continuous Testing using Shippable and Docker
Continuous Testing using Shippable and DockerContinuous Testing using Shippable and Docker
Continuous Testing using Shippable and Docker
 
Serverless Delivery
Serverless DeliveryServerless Delivery
Serverless Delivery
 
Removing Barriers Between Dev and Ops
Removing Barriers Between Dev and OpsRemoving Barriers Between Dev and Ops
Removing Barriers Between Dev and Ops
 
Continuous Testing in the Agile Age
Continuous Testing in the Agile AgeContinuous Testing in the Agile Age
Continuous Testing in the Agile Age
 
PuppetConf 2016: Continuous Delivery and DevOps with Jenkins and Puppet Enter...
PuppetConf 2016: Continuous Delivery and DevOps with Jenkins and Puppet Enter...PuppetConf 2016: Continuous Delivery and DevOps with Jenkins and Puppet Enter...
PuppetConf 2016: Continuous Delivery and DevOps with Jenkins and Puppet Enter...
 
Pimp your Continuous Delivery Pipeline with Jenkins workflow (W-JAX 14)
Pimp your Continuous Delivery Pipeline with Jenkins workflow (W-JAX 14)Pimp your Continuous Delivery Pipeline with Jenkins workflow (W-JAX 14)
Pimp your Continuous Delivery Pipeline with Jenkins workflow (W-JAX 14)
 
Orchestrate Your End-to-end Mainframe Application Release Pipeline
Orchestrate Your End-to-end Mainframe Application Release PipelineOrchestrate Your End-to-end Mainframe Application Release Pipeline
Orchestrate Your End-to-end Mainframe Application Release Pipeline
 
Delivery With Chef - ChefConf 2015
Delivery With Chef - ChefConf 2015 Delivery With Chef - ChefConf 2015
Delivery With Chef - ChefConf 2015
 
Into the cloud
Into the cloudInto the cloud
Into the cloud
 
Spring Boot
Spring BootSpring Boot
Spring Boot
 
Continuous Testing
Continuous TestingContinuous Testing
Continuous Testing
 
Infrastructure as Code with Chef
Infrastructure as Code with ChefInfrastructure as Code with Chef
Infrastructure as Code with Chef
 

Ähnlich wie Continuous Deployment of your Application - SpringOne Tour Dallas

Getting to Walk with DevOps
Getting to Walk with DevOpsGetting to Walk with DevOps
Getting to Walk with DevOpsEklove Mohan
 
Continuous Load Testing with CloudTest and Jenkins
Continuous Load Testing with CloudTest and JenkinsContinuous Load Testing with CloudTest and Jenkins
Continuous Load Testing with CloudTest and JenkinsSOASTA
 
Dev/Test scenarios in DevOps world
Dev/Test scenarios in DevOps worldDev/Test scenarios in DevOps world
Dev/Test scenarios in DevOps worldDavide Benvegnù
 
DevOps and Application Delivery for Hybrid Cloud - DevOpsSummit session
DevOps and Application Delivery for Hybrid Cloud  - DevOpsSummit sessionDevOps and Application Delivery for Hybrid Cloud  - DevOpsSummit session
DevOps and Application Delivery for Hybrid Cloud - DevOpsSummit sessionSanjeev Sharma
 
Continuous Load Testing with CloudTest and Jenkins
Continuous Load Testing with CloudTest and JenkinsContinuous Load Testing with CloudTest and Jenkins
Continuous Load Testing with CloudTest and JenkinsSOASTA
 
Práticas, Técnicas e Ferramentas para Continuous Delivery com ALM
Práticas, Técnicas e Ferramentas para Continuous Delivery com ALMPráticas, Técnicas e Ferramentas para Continuous Delivery com ALM
Práticas, Técnicas e Ferramentas para Continuous Delivery com ALMMarcelo Sousa Ancelmo
 
Immutable infrastructure isn’t the answer
Immutable infrastructure isn’t the answerImmutable infrastructure isn’t the answer
Immutable infrastructure isn’t the answerSam Bashton
 
Continuos Integration and Delivery: from Zero to Hero with TeamCity, Docker a...
Continuos Integration and Delivery: from Zero to Hero with TeamCity, Docker a...Continuos Integration and Delivery: from Zero to Hero with TeamCity, Docker a...
Continuos Integration and Delivery: from Zero to Hero with TeamCity, Docker a...Lean IT Consulting
 
Deployment Automation for Hybrid Cloud and Multi-Platform Environments
Deployment Automation for Hybrid Cloud and Multi-Platform EnvironmentsDeployment Automation for Hybrid Cloud and Multi-Platform Environments
Deployment Automation for Hybrid Cloud and Multi-Platform EnvironmentsIBM UrbanCode Products
 
Warsaw MuleSoft Meetup #6 - CI/CD
Warsaw MuleSoft Meetup  #6 - CI/CDWarsaw MuleSoft Meetup  #6 - CI/CD
Warsaw MuleSoft Meetup #6 - CI/CDPatryk Bandurski
 
Jenkins Workflow Webinar - Dec 10, 2014
Jenkins Workflow Webinar - Dec 10, 2014Jenkins Workflow Webinar - Dec 10, 2014
Jenkins Workflow Webinar - Dec 10, 2014CloudBees
 
The Rocky Cloud Road
The Rocky Cloud RoadThe Rocky Cloud Road
The Rocky Cloud RoadGert Drapers
 
Building and Managing Reliable Infrastructure with Chef and Chef Delivery
Building and Managing Reliable Infrastructure with Chef and Chef DeliveryBuilding and Managing Reliable Infrastructure with Chef and Chef Delivery
Building and Managing Reliable Infrastructure with Chef and Chef DeliveryMandi Walls
 
Continuous delivery @wcap 5-09-2013
Continuous delivery   @wcap 5-09-2013Continuous delivery   @wcap 5-09-2013
Continuous delivery @wcap 5-09-2013David Funaro
 
A Pathway to Continuous Integration/Continuous Delivery on AWS
A Pathway to Continuous Integration/Continuous Delivery on AWSA Pathway to Continuous Integration/Continuous Delivery on AWS
A Pathway to Continuous Integration/Continuous Delivery on AWSBhuvaneswari Subramani
 
Continuous integration, delivery & deployment
Continuous integration,  delivery & deploymentContinuous integration,  delivery & deployment
Continuous integration, delivery & deploymentMartijn van der Kamp
 
Continous integration and delivery for single page applications
Continous integration and delivery for single page applicationsContinous integration and delivery for single page applications
Continous integration and delivery for single page applicationsSunil Dalal
 
Confoo-Montreal-2016: Controlling Your Environments using Infrastructure as Code
Confoo-Montreal-2016: Controlling Your Environments using Infrastructure as CodeConfoo-Montreal-2016: Controlling Your Environments using Infrastructure as Code
Confoo-Montreal-2016: Controlling Your Environments using Infrastructure as CodeSteve Mercier
 
Successful Practices for Continuous Delivery CodeCPH
Successful Practices for Continuous Delivery CodeCPHSuccessful Practices for Continuous Delivery CodeCPH
Successful Practices for Continuous Delivery CodeCPHMandi Walls
 

Ähnlich wie Continuous Deployment of your Application - SpringOne Tour Dallas (20)

Getting to Walk with DevOps
Getting to Walk with DevOpsGetting to Walk with DevOps
Getting to Walk with DevOps
 
Continuous Load Testing with CloudTest and Jenkins
Continuous Load Testing with CloudTest and JenkinsContinuous Load Testing with CloudTest and Jenkins
Continuous Load Testing with CloudTest and Jenkins
 
Dev/Test scenarios in DevOps world
Dev/Test scenarios in DevOps worldDev/Test scenarios in DevOps world
Dev/Test scenarios in DevOps world
 
DevOps and Application Delivery for Hybrid Cloud - DevOpsSummit session
DevOps and Application Delivery for Hybrid Cloud  - DevOpsSummit sessionDevOps and Application Delivery for Hybrid Cloud  - DevOpsSummit session
DevOps and Application Delivery for Hybrid Cloud - DevOpsSummit session
 
Continuous Load Testing with CloudTest and Jenkins
Continuous Load Testing with CloudTest and JenkinsContinuous Load Testing with CloudTest and Jenkins
Continuous Load Testing with CloudTest and Jenkins
 
Práticas, Técnicas e Ferramentas para Continuous Delivery com ALM
Práticas, Técnicas e Ferramentas para Continuous Delivery com ALMPráticas, Técnicas e Ferramentas para Continuous Delivery com ALM
Práticas, Técnicas e Ferramentas para Continuous Delivery com ALM
 
Immutable infrastructure isn’t the answer
Immutable infrastructure isn’t the answerImmutable infrastructure isn’t the answer
Immutable infrastructure isn’t the answer
 
Continuos Integration and Delivery: from Zero to Hero with TeamCity, Docker a...
Continuos Integration and Delivery: from Zero to Hero with TeamCity, Docker a...Continuos Integration and Delivery: from Zero to Hero with TeamCity, Docker a...
Continuos Integration and Delivery: from Zero to Hero with TeamCity, Docker a...
 
Cloud for Agile Testing - Burak Koyuncu
Cloud for Agile Testing - Burak KoyuncuCloud for Agile Testing - Burak Koyuncu
Cloud for Agile Testing - Burak Koyuncu
 
Deployment Automation for Hybrid Cloud and Multi-Platform Environments
Deployment Automation for Hybrid Cloud and Multi-Platform EnvironmentsDeployment Automation for Hybrid Cloud and Multi-Platform Environments
Deployment Automation for Hybrid Cloud and Multi-Platform Environments
 
Warsaw MuleSoft Meetup #6 - CI/CD
Warsaw MuleSoft Meetup  #6 - CI/CDWarsaw MuleSoft Meetup  #6 - CI/CD
Warsaw MuleSoft Meetup #6 - CI/CD
 
Jenkins Workflow Webinar - Dec 10, 2014
Jenkins Workflow Webinar - Dec 10, 2014Jenkins Workflow Webinar - Dec 10, 2014
Jenkins Workflow Webinar - Dec 10, 2014
 
The Rocky Cloud Road
The Rocky Cloud RoadThe Rocky Cloud Road
The Rocky Cloud Road
 
Building and Managing Reliable Infrastructure with Chef and Chef Delivery
Building and Managing Reliable Infrastructure with Chef and Chef DeliveryBuilding and Managing Reliable Infrastructure with Chef and Chef Delivery
Building and Managing Reliable Infrastructure with Chef and Chef Delivery
 
Continuous delivery @wcap 5-09-2013
Continuous delivery   @wcap 5-09-2013Continuous delivery   @wcap 5-09-2013
Continuous delivery @wcap 5-09-2013
 
A Pathway to Continuous Integration/Continuous Delivery on AWS
A Pathway to Continuous Integration/Continuous Delivery on AWSA Pathway to Continuous Integration/Continuous Delivery on AWS
A Pathway to Continuous Integration/Continuous Delivery on AWS
 
Continuous integration, delivery & deployment
Continuous integration,  delivery & deploymentContinuous integration,  delivery & deployment
Continuous integration, delivery & deployment
 
Continous integration and delivery for single page applications
Continous integration and delivery for single page applicationsContinous integration and delivery for single page applications
Continous integration and delivery for single page applications
 
Confoo-Montreal-2016: Controlling Your Environments using Infrastructure as Code
Confoo-Montreal-2016: Controlling Your Environments using Infrastructure as CodeConfoo-Montreal-2016: Controlling Your Environments using Infrastructure as Code
Confoo-Montreal-2016: Controlling Your Environments using Infrastructure as Code
 
Successful Practices for Continuous Delivery CodeCPH
Successful Practices for Continuous Delivery CodeCPHSuccessful Practices for Continuous Delivery CodeCPH
Successful Practices for Continuous Delivery CodeCPH
 

Mehr von VMware Tanzu

What AI Means For Your Product Strategy And What To Do About It
What AI Means For Your Product Strategy And What To Do About ItWhat AI Means For Your Product Strategy And What To Do About It
What AI Means For Your Product Strategy And What To Do About ItVMware Tanzu
 
Make the Right Thing the Obvious Thing at Cardinal Health 2023
Make the Right Thing the Obvious Thing at Cardinal Health 2023Make the Right Thing the Obvious Thing at Cardinal Health 2023
Make the Right Thing the Obvious Thing at Cardinal Health 2023VMware Tanzu
 
Enhancing DevEx and Simplifying Operations at Scale
Enhancing DevEx and Simplifying Operations at ScaleEnhancing DevEx and Simplifying Operations at Scale
Enhancing DevEx and Simplifying Operations at ScaleVMware Tanzu
 
Spring Update | July 2023
Spring Update | July 2023Spring Update | July 2023
Spring Update | July 2023VMware Tanzu
 
Platforms, Platform Engineering, & Platform as a Product
Platforms, Platform Engineering, & Platform as a ProductPlatforms, Platform Engineering, & Platform as a Product
Platforms, Platform Engineering, & Platform as a ProductVMware Tanzu
 
Building Cloud Ready Apps
Building Cloud Ready AppsBuilding Cloud Ready Apps
Building Cloud Ready AppsVMware Tanzu
 
Spring Boot 3 And Beyond
Spring Boot 3 And BeyondSpring Boot 3 And Beyond
Spring Boot 3 And BeyondVMware Tanzu
 
Spring Cloud Gateway - SpringOne Tour 2023 Charles Schwab.pdf
Spring Cloud Gateway - SpringOne Tour 2023 Charles Schwab.pdfSpring Cloud Gateway - SpringOne Tour 2023 Charles Schwab.pdf
Spring Cloud Gateway - SpringOne Tour 2023 Charles Schwab.pdfVMware Tanzu
 
Simplify and Scale Enterprise Apps in the Cloud | Boston 2023
Simplify and Scale Enterprise Apps in the Cloud | Boston 2023Simplify and Scale Enterprise Apps in the Cloud | Boston 2023
Simplify and Scale Enterprise Apps in the Cloud | Boston 2023VMware Tanzu
 
Simplify and Scale Enterprise Apps in the Cloud | Seattle 2023
Simplify and Scale Enterprise Apps in the Cloud | Seattle 2023Simplify and Scale Enterprise Apps in the Cloud | Seattle 2023
Simplify and Scale Enterprise Apps in the Cloud | Seattle 2023VMware Tanzu
 
tanzu_developer_connect.pptx
tanzu_developer_connect.pptxtanzu_developer_connect.pptx
tanzu_developer_connect.pptxVMware Tanzu
 
Tanzu Virtual Developer Connect Workshop - French
Tanzu Virtual Developer Connect Workshop - FrenchTanzu Virtual Developer Connect Workshop - French
Tanzu Virtual Developer Connect Workshop - FrenchVMware Tanzu
 
Tanzu Developer Connect Workshop - English
Tanzu Developer Connect Workshop - EnglishTanzu Developer Connect Workshop - English
Tanzu Developer Connect Workshop - EnglishVMware Tanzu
 
Virtual Developer Connect Workshop - English
Virtual Developer Connect Workshop - EnglishVirtual Developer Connect Workshop - English
Virtual Developer Connect Workshop - EnglishVMware Tanzu
 
Tanzu Developer Connect - French
Tanzu Developer Connect - FrenchTanzu Developer Connect - French
Tanzu Developer Connect - FrenchVMware Tanzu
 
Simplify and Scale Enterprise Apps in the Cloud | Dallas 2023
Simplify and Scale Enterprise Apps in the Cloud | Dallas 2023Simplify and Scale Enterprise Apps in the Cloud | Dallas 2023
Simplify and Scale Enterprise Apps in the Cloud | Dallas 2023VMware Tanzu
 
SpringOne Tour: Deliver 15-Factor Applications on Kubernetes with Spring Boot
SpringOne Tour: Deliver 15-Factor Applications on Kubernetes with Spring BootSpringOne Tour: Deliver 15-Factor Applications on Kubernetes with Spring Boot
SpringOne Tour: Deliver 15-Factor Applications on Kubernetes with Spring BootVMware Tanzu
 
SpringOne Tour: The Influential Software Engineer
SpringOne Tour: The Influential Software EngineerSpringOne Tour: The Influential Software Engineer
SpringOne Tour: The Influential Software EngineerVMware Tanzu
 
SpringOne Tour: Domain-Driven Design: Theory vs Practice
SpringOne Tour: Domain-Driven Design: Theory vs PracticeSpringOne Tour: Domain-Driven Design: Theory vs Practice
SpringOne Tour: Domain-Driven Design: Theory vs PracticeVMware Tanzu
 
SpringOne Tour: Spring Recipes: A Collection of Common-Sense Solutions
SpringOne Tour: Spring Recipes: A Collection of Common-Sense SolutionsSpringOne Tour: Spring Recipes: A Collection of Common-Sense Solutions
SpringOne Tour: Spring Recipes: A Collection of Common-Sense SolutionsVMware Tanzu
 

Mehr von VMware Tanzu (20)

What AI Means For Your Product Strategy And What To Do About It
What AI Means For Your Product Strategy And What To Do About ItWhat AI Means For Your Product Strategy And What To Do About It
What AI Means For Your Product Strategy And What To Do About It
 
Make the Right Thing the Obvious Thing at Cardinal Health 2023
Make the Right Thing the Obvious Thing at Cardinal Health 2023Make the Right Thing the Obvious Thing at Cardinal Health 2023
Make the Right Thing the Obvious Thing at Cardinal Health 2023
 
Enhancing DevEx and Simplifying Operations at Scale
Enhancing DevEx and Simplifying Operations at ScaleEnhancing DevEx and Simplifying Operations at Scale
Enhancing DevEx and Simplifying Operations at Scale
 
Spring Update | July 2023
Spring Update | July 2023Spring Update | July 2023
Spring Update | July 2023
 
Platforms, Platform Engineering, & Platform as a Product
Platforms, Platform Engineering, & Platform as a ProductPlatforms, Platform Engineering, & Platform as a Product
Platforms, Platform Engineering, & Platform as a Product
 
Building Cloud Ready Apps
Building Cloud Ready AppsBuilding Cloud Ready Apps
Building Cloud Ready Apps
 
Spring Boot 3 And Beyond
Spring Boot 3 And BeyondSpring Boot 3 And Beyond
Spring Boot 3 And Beyond
 
Spring Cloud Gateway - SpringOne Tour 2023 Charles Schwab.pdf
Spring Cloud Gateway - SpringOne Tour 2023 Charles Schwab.pdfSpring Cloud Gateway - SpringOne Tour 2023 Charles Schwab.pdf
Spring Cloud Gateway - SpringOne Tour 2023 Charles Schwab.pdf
 
Simplify and Scale Enterprise Apps in the Cloud | Boston 2023
Simplify and Scale Enterprise Apps in the Cloud | Boston 2023Simplify and Scale Enterprise Apps in the Cloud | Boston 2023
Simplify and Scale Enterprise Apps in the Cloud | Boston 2023
 
Simplify and Scale Enterprise Apps in the Cloud | Seattle 2023
Simplify and Scale Enterprise Apps in the Cloud | Seattle 2023Simplify and Scale Enterprise Apps in the Cloud | Seattle 2023
Simplify and Scale Enterprise Apps in the Cloud | Seattle 2023
 
tanzu_developer_connect.pptx
tanzu_developer_connect.pptxtanzu_developer_connect.pptx
tanzu_developer_connect.pptx
 
Tanzu Virtual Developer Connect Workshop - French
Tanzu Virtual Developer Connect Workshop - FrenchTanzu Virtual Developer Connect Workshop - French
Tanzu Virtual Developer Connect Workshop - French
 
Tanzu Developer Connect Workshop - English
Tanzu Developer Connect Workshop - EnglishTanzu Developer Connect Workshop - English
Tanzu Developer Connect Workshop - English
 
Virtual Developer Connect Workshop - English
Virtual Developer Connect Workshop - EnglishVirtual Developer Connect Workshop - English
Virtual Developer Connect Workshop - English
 
Tanzu Developer Connect - French
Tanzu Developer Connect - FrenchTanzu Developer Connect - French
Tanzu Developer Connect - French
 
Simplify and Scale Enterprise Apps in the Cloud | Dallas 2023
Simplify and Scale Enterprise Apps in the Cloud | Dallas 2023Simplify and Scale Enterprise Apps in the Cloud | Dallas 2023
Simplify and Scale Enterprise Apps in the Cloud | Dallas 2023
 
SpringOne Tour: Deliver 15-Factor Applications on Kubernetes with Spring Boot
SpringOne Tour: Deliver 15-Factor Applications on Kubernetes with Spring BootSpringOne Tour: Deliver 15-Factor Applications on Kubernetes with Spring Boot
SpringOne Tour: Deliver 15-Factor Applications on Kubernetes with Spring Boot
 
SpringOne Tour: The Influential Software Engineer
SpringOne Tour: The Influential Software EngineerSpringOne Tour: The Influential Software Engineer
SpringOne Tour: The Influential Software Engineer
 
SpringOne Tour: Domain-Driven Design: Theory vs Practice
SpringOne Tour: Domain-Driven Design: Theory vs PracticeSpringOne Tour: Domain-Driven Design: Theory vs Practice
SpringOne Tour: Domain-Driven Design: Theory vs Practice
 
SpringOne Tour: Spring Recipes: A Collection of Common-Sense Solutions
SpringOne Tour: Spring Recipes: A Collection of Common-Sense SolutionsSpringOne Tour: Spring Recipes: A Collection of Common-Sense Solutions
SpringOne Tour: Spring Recipes: A Collection of Common-Sense Solutions
 

Kürzlich hochgeladen

%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park masabamasaba
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsArshad QA
 
Define the academic and professional writing..pdf
Define the academic and professional writing..pdfDefine the academic and professional writing..pdf
Define the academic and professional writing..pdfPearlKirahMaeRagusta1
 
Architecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastArchitecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastPapp Krisztián
 
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) SolutionIntroducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) SolutionOnePlan Solutions
 
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...masabamasaba
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisamasabamasaba
 
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension AidPhilip Schwarz
 
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...masabamasaba
 
Harnessing ChatGPT - Elevating Productivity in Today's Agile Environment
Harnessing ChatGPT  - Elevating Productivity in Today's Agile EnvironmentHarnessing ChatGPT  - Elevating Productivity in Today's Agile Environment
Harnessing ChatGPT - Elevating Productivity in Today's Agile EnvironmentVictorSzoltysek
 
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...SelfMade bd
 
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...Bert Jan Schrijver
 
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfonteinmasabamasaba
 
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024VictoriaMetrics
 
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...WSO2
 
Announcing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareAnnouncing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareJim McKeeth
 
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdfPayment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdfkalichargn70th171
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...panagenda
 
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park %in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park masabamasaba
 
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyviewmasabamasaba
 

Kürzlich hochgeladen (20)

%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview Questions
 
Define the academic and professional writing..pdf
Define the academic and professional writing..pdfDefine the academic and professional writing..pdf
Define the academic and professional writing..pdf
 
Architecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastArchitecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the past
 
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) SolutionIntroducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
 
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
 
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
 
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
 
Harnessing ChatGPT - Elevating Productivity in Today's Agile Environment
Harnessing ChatGPT  - Elevating Productivity in Today's Agile EnvironmentHarnessing ChatGPT  - Elevating Productivity in Today's Agile Environment
Harnessing ChatGPT - Elevating Productivity in Today's Agile Environment
 
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
 
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
 
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
 
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
 
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
 
Announcing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareAnnouncing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK Software
 
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdfPayment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
 
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park %in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
 
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
 

Continuous Deployment of your Application - SpringOne Tour Dallas

  • 1.
  • 2.
  • 3.
  • 4.
  • 5. Supportive Cast Marcin Grzejszczak Spring Cloud developer at Pivotal Twitter: @mgrzejszczak Blog: http://toomuchcoding.com Cora Iberkleid Senior Platform Architect at Pivotal Twitter: @ciberkleid
  • 6. Continuously Delivering Business Value https://www.youtube.com/watch?v=7APZD0me1nU by Onsi Fakhouri
  • 7. The Circle of Code... • Depicts an ideal, iterative manner of delivering business value to production • Enables the business and developers to test ideas against reality quickly • Aims to improve software quality and responsiveness to changing customer requirements
  • 8. Spring Cloud Pipelines is the answer :-) But what is the question?
  • 9. How can we avoid creating a deployment pipeline from scratch for each new project?
  • 10. What is Spring Cloud Pipelines? • opinionated template of a deployment pipeline • based on good practices from different projects • uses the “Infrastructure as Code” approach • if automation server goes down you can recover everything quickly • the automation server setup should be automated too! • you can even write tests for your pipelines
  • 11. Spring Cloud Pipelines • Supports the following automation servers out of the box: • Concourse • Jenkins using Jenkins Job DSL plugin • Jenkins using Jenkinsfile with Blue Ocean • Logic of all steps done via Bash scripts • you can convert the internals to suit your needs • you can use whatever automation server you want • supports Maven & Gradle • Includes 150 Bash tests to validate your customizations of SCP • using https://github.com/sstephenson/bats
  • 12. Spring Cloud Pipelines – some opinionated defaults • Four environments (Build, Test, Stage, Prod) • Types of tests • e.g. Unit, API compatibility, Smoke, Integration, Rollback, End to end • Use cloud-native apps • Use contracts for integration testing • PaaS deployment platform
  • 15. Spring Cloud Pipelines - Concourse
  • 16. Spring Cloud Pipelines – The big picture on Concourse
  • 18. Spring Cloud Pipelines - Jenkins Job DSL
  • 19. Spring Cloud Pipelines - Jenkinsfile & Blue Ocean
  • 20. Why do we deploy software? • We’re paid for delivering business value • Features are done when they are deployed to production • It’s better to deploy frequently for faster feedback • It’s better to fail the deployment pipeline as fast as possible • Deployments should take place in a standardized, automated fashion • Your deployment pipeline should test rollback • That way you can perform A/B or zero downtime deployment to production
  • 21. Why do we deploy software? • We’re paid for delivering business value • Features are done when they are deployed to production • It’s better to deploy frequently for faster feedback • It’s better to fail the deployment pipeline as fast as possible • Deployments should take place in a standardized, automated fashion • Your deployment pipeline should test rollback • That way you can perform A/B or zero downtime deployment to production
  • 23. Problem - slow feedback • Nobody wants to wait until the end of the pipeline to see that something is not working fine • We want to fail fast - even during build time • If integration is faulty • If our API is backward incompatible • There should be no need to wait until end to end tests are executed
  • 24. Solution - fail fast • We’re running unit and integration tests during build time • To test faulty integration we use Spring Cloud Contract for HTTP / messaging • Producer defines a contract • From the contract o tests are generated to see if the producer is not lying o stubs are generated for consumers to use • Consumer can reuse it without running the producer • Fail at build time if integration fails (fail fast!) • All stubs reside in Bintray / Nexus / Artifactory (thus can be reused)
  • 25. Broken build Current implementation (V2) does not support old contracts (V1)
  • 26. Why do we deploy software? • We’re paid for delivering business value • Features are done when they are deployed to production • It’s better to deploy frequently for faster feedback • It’s better to fail the deployment pipeline as fast as possible • Deployments should take place in a standardized, automated fashion • Your deployment pipeline should test rollback • That way you can perform A/B or zero downtime deployment to production
  • 27. STANDARDIZATION GIVES LOWER SUPPORT COSTS AND MORE CHANCES OF PEOPLE ROTATION
  • 28. Solution - PaaS & tooling • Use a PaaS to standardize the way you deploy and monitor your software • Spring Cloud Pipelines uses Cloud Foundry [1] or Kubernetes [2] as a PaaS implementation • You can also use PCF Dev [3] or Minikube [4] • PaaS abstracts the application governance from underlying infrastructure • you can deploy, scale, manage applications in the same way if PaaS was running on your laptop, Amazon, Google, Azure etc. • Database schema upgrade is done via tools like Flyway [5] or Liquibase [6] [1] https://www.cloudfoundry.org, [2] https://kubernetes.io/ [3] https://pivotal.io/pcf-dev, [4] https://github.com/kubernetes/minikube [5] https://flywaydb.org/, [6] http://www.liquibase.org/
  • 30. Spring Cloud Pipelines After the application got deployed to test environment • The database schema gets updated upon application startup • We run a handful of smoke tests to see if crucial parts of our application are working fine • We want to test if the app is properly packaged • The application is surrounded by stubs - no real integrations take place • Spring Cloud Contract Stub Runner Boot app is responsible for serving stubs
  • 31. Problem - rollback DB • Deployment pipelines should test whether the application can be rolled back • Rolling back database changes is extremely difficult • Especially if you deploy once every 6 months (the number of changes is gigantic) • How can you roll back a deletion of a column?
  • 33. Solution - application rollback • The easiest solution is… NOT TO DB ROLLBACK • Perform only backward compatible changes (always add data) • Or perform backward incompatible changes in a backward compatible way [1] • Roll back the application only (the JAR) • The application and DB changes need to be backward compatible • That way you can ensure that two applications (old / new versions) can run at the same time [1] https://spring.io/blog/2016/05/31/zero-downtime-deployment-with-a-database
  • 34. Backward incompatible DB change Old application (V1) can’t work with new database (V2) Deploy (V1) and connect to the new database (V2)
  • 36. Problem - end to end tests • End to end tests are slow and brittle • QA department writes an E2E for every feature we have • E2E environment setup • one environment shared between all applications? • one environment per application? • Surrounding apps should be deployed in • production versions? • development versions?
  • 37. Solution - don’t do E2E? • Regardless of the time spent on QA / UAT you can still have bugs on production • Assuming that you ... • embrace failure • introduce monitoring of business key performance indicators (KPIs) • introduce alerting over the metrics • ensure that you can rollback on production • … you could stop doing any end to end tests
  • 38. Spring Cloud Pipelines • Deploy to stage and running e2e tests are manual steps • you have to wait for your turn for the env • some manual work has to be done to purge stale data etc.
  • 40. Problem - deployment to production • We don’t want to deploy the application to production at night • We want to treat a production deployment like any other deployment • We’d like to be able to perform A/B testing and zero downtime deployment • We’d like to easily rollback when something goes wrong
  • 41. Solution - PaaS + SC Pipelines • Our application has KPI monitoring in place • Alerting are set for KPIs • It has been tested that the application can be easily rolled back • PaaS (CF or K8S) can take care of zero downtime deployment
  • 42. Spring Cloud Pipelines • prod-deploy deploys the pipeline version of the app to production next to the current production version • Once deployed we tag the repo with prod/VERSION_NUMBER • prod-complete stops the old instance, leaving only the new one running • prod-rollback deletes the new instance, removes the prod/VERSION_NUMBER tag and leaves only the old one running
  • 44. Two versions running at the same time Two versions registered under same hostname Old instance New instance
  • 45. MIGRATING TO SPRING CLOUD PIPELINES DEMO based upon the Step-by-step Cloud Foundry migration tutorial by @ciberkleid
  • 46. Application Refactoring for Spring Cloud Pipelines A Story in Three Acts
  • 48. Main Characters 48 Greeting UI Fortune Service Fortune DB Simon
  • 49. Supporting Characters 49 The SCS Triplets and their pet Rabbit Greeting UI Fortune Service Fortune DB Simon
  • 53. Story Line 53 Greeting UI The SCS Triplets and their pet Rabbit Simon Hey in !
  • 54. Story Line 54 Greeting UI The SCS Triplets and their pet Rabbit ??? Simon Hey in !
  • 55. Story Line 55 Greeting UI The SCS Triplets and their pet Rabbit !!! Fortune Service Simon Hey in !
  • 56. Story Line 56 Greeting UI The SCS Triplets and their pet Rabbit Fortune Service Simon Hey in !
  • 57. Story Line 57 Greeting UI The SCS Triplets and their pet Rabbit Fortune Service Fortune DB Simon Hey in !
  • 58. Story Line 58 Greeting UI The SCS Triplets and their pet Rabbit Fortune Service Fortune DB Simon Hey in !
  • 59. Story Line 59 Greeting UI The SCS Triplets and their pet Rabbit Fortune Service Fortune DB Simon Hey in !
  • 62. Story Line 62 Greeting UI Fortune Service Simon Gre vi ! Who sa ?
  • 63. Story Line 63 Greeting UI Fortune Service Simon Gre vi ! Who sa ?
  • 64. Story Line 64 Greeting UI Fortune Service Fortune DB Simon Gre vi ! Who sa ?
  • 65. Story Line 65 Greeting UI Fortune Service Fortune DB Simon Gre vi ! Who sa ?
  • 66. Story Line 66 Greeting UI Fortune Service Fortune DB Simon It’s o t ha q e n...
  • 67. Story Line 67 Greeting UI Fortune Service Fortune DB Simon It’s o t ha q e n... The SCS Triplets and their pet Rabbit
  • 68. Story Line 68 Greeting UI Fortune Service Fortune DB Simon I ju w t k o ... The SCS Triplets and their pet Rabbit
  • 69. Story Line 69 Greeting UI Fortune Service Fortune DB Simon PI NE T E H S!!! The SCS Triplets and their pet Rabbit
  • 71. Act I: The Scaffold 71 ● Objective: ○ Automate the deployment of greeting-ui and fortune-service a.k.a. Make the pipelines run green ○ Establish environments (PCF spaces) in accordance with SCP recommendations ● Approach: ○ Minimum changes to apps (scaffolding, not code) ○ Create a pipeline for each ○ Create PCF spaces ○ Run the pipelines
  • 72. Greeting and Fortune ● Spring Boot apps ● Source code on GitHub ● Maven ● No tests ● Use 5 services ○ MySQL database (for Fortune) ○ Spring Cloud Services: Eureka, Hystrix/Turbine, Config Server ○ Rabbit - for Config Server refresh trigger propagation
  • 73. ● Add 2 new branches to the app repos App Scaffold 73
  • 74. ● Add 2 new branches to the app repos ● Add a Maven wrapper ○ mvn -N io.takari:maven:wrapper App Scaffold 74
  • 75. ● Add 2 new branches to the app repos ● Add a Maven wrapper ○ mvn -N io.takari:maven:wrapper ● Add artifact repo info to app pom.xml (and ~/.m2/settings.xml) ○ distributionManagement.repository.id ○ distributionManagement.repository.url App Scaffold 75
  • 76. ● Add 2 new branches to the app repos ● Add a Maven wrapper ○ mvn -N io.takari:maven:wrapper ● Add artifact repo info to app pom.xml ○ distributionManagement.repository.id ○ distributionManagement.repository.url ● git push! App Scaffold 76
  • 77. Pipeline Configuration - Git and Mvn 77 ● Create a credentials file for each app (copy sample in SCP) ○ Git url and branch of your app ○ Git url and branch of the SCP code base use v1.0.0.M8 or later for cf) ○ Your git name, email, and private key ○ Your maven repo info and credentials
  • 78. Build - Success! 78 ● At this point, the Build jobs should all succeed ● App builds, jar uploads to maven repo, git tagged as “dev/<version>” ● The api compatibility job runs “mvn clean verify -P apicompatibility”, but the profile does not exist yet, so it really isn’t doing much ● Takes place on Concourse worker
  • 79. ● Create app manifest.yml ● Create a new manifest for SCP (e.g. sc-pipelines.yml) ○ Provide info for SCP to provision services on CF (test* & stage) ● Git push! App Scaffold 79 test: services: - name: fortune-db type: broker broker: cleardb plan: spark - name: config-server type: broker broker: p-config-server plan: standard params: git: uri: https://github.com/ciberkleid/app-config useExisting: true ...
  • 80. Pipeline Configuration - CF 80 ● Add general CF info to the credentials file ○ paas-type: cf ○ pipeline-descriptor (the sc-pipelines manifest) ○ paas-hostname-uuid (to avoid route collision) ● Add target & login info for Test, Stage and Prod ○ For Test, you specify a prefix. SCP appends the app name
  • 81. Cloud Foundry Setup: Test, Stage, Prod 81 ● Create the Test, Stage, and Prod spaces ● Manually provision services in Prod ○ And maybe Stage ○ But not Test
  • 82. Test, Stage & Prod - Success! 82 ● App deployed to PCF through Prod ● Git tagged as prod/<version> ● Ability to trigger rollback through Concourse
  • 83. 83
  • 84. 84
  • 85. Act I: The Scaffold - Recap 85 ● Objective: ○ Automate the deployment of greeting-ui and fortune-service a.k.a. Make the pipelines run green ○ Establish environments (PCF spaces) in accordance with SCP recommendations ● Approach: ○ Minimum changes to apps (scaffolding, not code) ○ Create a pipeline for each ○ Create PCF spaces ○ Run the pipelines
  • 88. Act II: The Test
  • 89. Act II: The Test 89 ● Objective: ○ Increase effectiveness of and confidence in the pipelines ○ Standardize approach to testing ● Approach: ○ Use mvn profiles to control test executions ○ Add/organize tests in agreement with SCP framework ○ Enable DB backward compatibility testing
  • 90. Test Control - Maven Profiles 90 ● Add profiles to the app pom.xml ○ default ○ apicompatibility ○ smoke ○ e2e <profile> <id>default</id> <activation> <activeByDefault>true</activeByDefault> </activation> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <configuration> <includes> <include>**/*Tests.java</include> <include>**/*Test.java</include> </includes> <excludes> <exclude>**/smoke/**</exclude> <exclude>**/e2e/**</exclude> </excludes> </configuration> </plugin> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </profile>
  • 91. Test Control - Organize Tests 91 ● Organize tests into packages matching the profiles ● Add tests for each profile
  • 92. Test Coverage - Fortune Smoke 92 fortune-service fortune-db
  • 93. Test Coverage - Fortune E2E 93 greeting-ui fortune-db fortune-service Assuming same domain...
  • 94. Test Coverage - Greeting Smoke 94 greeting-ui circuit breaker fallback
  • 95. Test Coverage - Greeting E2E 95 greeting-ui fortune-service
  • 96. Enable Database Rollback Testing 96 ● Flyway ○ OSS DB migration tool ○ For relational databases ○ Convention over configuration ○ Database versioning ○ Migration on app startup (good for CD!)
  • 97. DB Schema Creation With Flyway 97 ● Disable JPA auto-generated schemas; let flyway do it ● Follow flyway conventions for SQL file name ● Tada! Schema is now versioned!
  • 98. DB Schema Population With Flyway 98 ● Add INSERT statements to V1__init.sql ● Data is populated upon app startup, but only once per DB version
  • 99. Act II: The Test - Recap 99 ● Objective: ○ Increase effectiveness of and confidence in the pipelines ○ Standardize approach to testing ● Approach: ○ Use mvn profiles to control test executions ○ Add/organize tests in agreement with SCP framework ○ Enable DB backward compatibility testing
  • 100. Is THAT Enough? 100 ● Good: ○ You are in a great position to include well-organized, robust testing and derive a high level of confidence from your pipelines ○ You can ensure safe rollbacks in case of database schema changes ● Better: ○ Implementing a contract-driven approach will have additional benefits to your general development practice ○ Inter-team communication will be simpler ○ Contract tests will catch breaking API changes in build rather than stage ○ Troubleshooting will be easier ○ Failure and feedback will be faster
  • 101. Act III: The Contract
  • 102. Act III: The Contract 102 ● Objective: ○ Increase reliability - strive to maximize pipeline benefits ○ Encourage contract-based programming practices ● Approach: ○ Add contracts, stubs, and a stubrunner ○ Enable API backward compatibility testing
  • 103. The Greeting/Fortune Contract 103 import org.springframework.cloud.contract.spec.Contract Contract.make { description(""" should return a fortune string """) request { method GET() url "/" } response { status 200 body "foo fortune" } }
  • 104. Spring Cloud Contract Basics 104 ● Add the Spring Cloud Contract Maven Plugin to your pom.xml (Fortune) ○ Plugin requires a base class to set up the context and stub out the service that satisfies the API call (e.g. the DB) public class BaseClass { @Before public void setup() { FortuneService service = BDDMockito.mock(FortuneService.class); BDDMockito.given(service.getFortune()).willReturn("foo fortune"); RestAssuredMockMvc.standaloneSetup(new FortuneController(service)); } }
  • 105. Spring Cloud Contract Basics 105 ● Add the Spring Cloud Contract Maven Plugin to your pom.xml (Fortune) ○ Plugin will auto-generate tests and stubs (and a stub.jar) ○ Stub jar is uploaded to the maven repo, along with the app jar
  • 106. For Back-Compatibility, Use Prod Contracts 106 <profile> <id>apicompatibility</id> <plugin> <configuration> <contractsRepositoryUrl>${repo.with.binaries}</contractsRepositoryUrl> <contractDependency> <groupId>${project.groupId}</groupId> <artifactId>${project.artifactId}</artifactId> <classifier>stubs</classifier> <version>${latest.production.version}</version> </contractDependency> ... In this case, we want the contracts plugin to generate tests based on contracts outside of the project (the ones from the latest prod jar on our maven repo). Pipeline injects values in red dynamically
  • 107. Greeting: Build with Stubrunner greeting-ui circuit breaker fallback or manually configured WireMock greeting-ui stubs without stubrunner with stubrunner ● Greeting starts an in-process stubrunner that automatically configures WireMock
  • 108. Greeting: Integration Tests Aligned with Stubs 108 For in-process stubrunner, the server-side Wiremock port For in-process stubrunner, the client-side endpoint config
  • 109. Greeting: Test with Stubrunner (standalone) greeting-ui circuit breaker fallback greeting-ui stubrunner without stubrunner with stubrunner Note: Update the greeting smoke tests accordingly
  • 110. Home Stretch: Standalone Stubrunner Config ● You need a stubrunner app! ○ Clone spring-cloud-samples/cloudfoundry-stub-runner-boot ○ Build it, and upload the jar to your maven repo ● Your stubrunner app needs a manifest! ○ Put it in your app repo (e.g. greeting-ui repo) ● You need to tell SCP to deploy the stubrunner app! ○ Do it through the pipeline descriptor (e.g. sc-pipelines.yml)
  • 111. Home Stretch: Standalone Stubrunner Config ● Specify the server side (stubrunner) ports <properties> <stubrunner.ids>io.pivotal:fortune-service:_latest:stubs:10000</stubrunner.ids> </properties> ● Disable Eureka lookup for smoke tests ● Provide URLs to non-8080 stubrunner ports explicitly
  • 112. Act III: The Contract - Recap 112 ● Objective: ○ Increase reliability - strive to maximize pipeline benefits ○ Encourage contract-based programming practices ● Approach: ○ Add contracts, stubs, and a stubrunner ○ Enable API back compatibility testing
  • 113. So what have we achieved 113 ● The Scaffold: ○ Automate the deployment of greeting-ui and fortune-service a.k.a. Make the pipelines run green ○ Establish environments (PCF spaces) in accordance with SCP recommendations ● The Test: ○ Increase effectiveness of and confidence in the pipelines ○ Standardize approach to testing ● The Contract ○ Increase reliability - strive to maximize pipeline benefits ○ Encourage contract-based programming practices
  • 118. Though Really, You’re Just Beginning... 118 Because now… ● You can evolve your app faster ● With (hopefully) better code ● Consistent testing practices ● Fast failure and feedback ● Contract-based API definitions ● API and DB rollback assurance ● And…. instant pipelines from source to production!
  • 119. What About Poor Simon? 119 Greeting UI Fortune Service Fortune DB Simon W O D Do h k !?
  • 120. What About Poor Simon? 120 Greeting UI Fortune Service Fortune DB Simon W O D Do h k !? Contract.make{“”” should return author name “””) ...
  • 121. What About Poor Simon? 121 Greeting UI Fortune Service Fortune DB Simon W O D Do h k !? Fortune Service Stub
  • 122. What About Poor Simon? 122 Greeting UI Fortune Service Fortune DB Simon W O D Do h k !? V2: ALTER TABLE fortune CHANGE COLUMN text TO fortune, ADD author CHAR (50);
  • 123. What About Poor Simon? 123 Greeting UI Fortune Service Fortune DB Simon W O D Do h k !?
  • 124. What About Poor Simon? 124 Greeting UI Fortune Service Fortune DB Simon Piv sa t t e m !
  • 125. Simon Spring Cloud Pipelines 125 Greeting UI Fortune Service Fortune DB Oh, ri t! I k e t .
  • 126. Sample Code... 126 ● Github repos showing the end-state of each “act” ● Step-by-step instructions will be published soon and made accessible through the repo Readmes
  • 127. Summary • Continuous Deployment allows you to continuously deliver business value • Spring Cloud Pipelines gives you OOB tooling to test your software via • unit and integration testing • contract testing • rollback testing • You can gradually migrate your applications to start using SC Pipelines • SC Pipelines allows you to easily adjust the deployment pipeline to suit your company’s needs • Thanks to PaaS you can easily do A/B & zero downtime deployment
  • 128. ● Github Analytics: https://github.com/spring-cloud-samples/github-analytics ● Github Webhook: https://github.com/spring-cloud-samples/github-webhook ● Fortune Service: https://github.com/ciberkleid/fortune-service ● Greeting UI: https://github.com/ciberkleid/greeting-ui/ ● SC-Pipelines documentation: https://cloud.spring.io/spring-cloud-pipelines/ ● Pivotal Web Services trial : https://run.pivotal.io/ ● PCF Dev (CF on your laptop) : https://docs.pivotal.io/pcf-dev/ Links
  • 129. Learn More. Stay Connected. ▪ Read the docs http://cloud.spring.io/spring-cloud-pipelines/ ▪ Talk to us on Gitter https://gitter.im/spring-cloud/spring-cloud-pipelines Twitter: twitter.com/springcentral YouTube: spring.io/video LinkedIn: spring.io/linkedin Google Plus: spring.io/gplus