continuous delivery - voxxed days bucharest 2017

66
Rafal Leszko (@RafalLeszko, [email protected]) Connuous Delivery: Jenkins, Docker and Spring Boot

Upload: rafal-leszko

Post on 20-Mar-2017

61 views

Category:

Technology


4 download

TRANSCRIPT

Page 1: Continuous Delivery - Voxxed Days Bucharest 2017

Rafal Leszko (@RafalLeszko, [email protected])

Continuous Delivery: Jenkins, Docker and Spring Boot

Page 2: Continuous Delivery - Voxxed Days Bucharest 2017

Jez Humble

Page 3: Continuous Delivery - Voxxed Days Bucharest 2017
Page 4: Continuous Delivery - Voxxed Days Bucharest 2017
Page 5: Continuous Delivery - Voxxed Days Bucharest 2017

Continuous Delivery

The ability to get changes-features, configuration changes, bug fixes, experiments - into production or into the hands of users safely and quickly in a sustainable way

Page 6: Continuous Delivery - Voxxed Days Bucharest 2017
Page 7: Continuous Delivery - Voxxed Days Bucharest 2017

What is Continuous Delivery?

Page 8: Continuous Delivery - Voxxed Days Bucharest 2017
Page 9: Continuous Delivery - Voxxed Days Bucharest 2017
Page 10: Continuous Delivery - Voxxed Days Bucharest 2017
Page 11: Continuous Delivery - Voxxed Days Bucharest 2017
Page 12: Continuous Delivery - Voxxed Days Bucharest 2017
Page 13: Continuous Delivery - Voxxed Days Bucharest 2017

"Traditional" Delivery

Customer

"Agile" team

Centralized QA IT OperationsAnalysis + Design

Development

Testing + Showcase

Integration + QARelease and operation

Acceptance Tests

Page 14: Continuous Delivery - Voxxed Days Bucharest 2017

Continuous Integration

Customer

"Agile" team

Centralized QA IT OperationsAnalysis + Design

Development

Testing + Showcase

Integration + QARelease and operation

Acceptance Tests

Page 15: Continuous Delivery - Voxxed Days Bucharest 2017

Continuous Integration

Page 16: Continuous Delivery - Voxxed Days Bucharest 2017

https://github.com/Dynatrace/ufo

Page 17: Continuous Delivery - Voxxed Days Bucharest 2017
Page 18: Continuous Delivery - Voxxed Days Bucharest 2017

Continuous Integration

Customer

"Agile" team

Centralized QA IT OperationsAnalysis + Design

Development

Testing + Showcase

Integration + QARelease and operation

Acceptance Tests

Page 19: Continuous Delivery - Voxxed Days Bucharest 2017

"last mile"Continuous Integration

Customer

"Agile" team

Centralized QA IT OperationsAnalysis + Design

Development

Testing + Showcase

Integration + QARelease and operation

Acceptance Tests

Page 20: Continuous Delivery - Voxxed Days Bucharest 2017

Automated Tests

"last mile"Continuous Integration

Customer

"Agile" team

Centralized QA IT OperationsAnalysis + Design

Development

Testing + Showcase

Integration + QARelease and operation

Acceptance Tests

Page 21: Continuous Delivery - Voxxed Days Bucharest 2017

AutomatedTesting

Page 22: Continuous Delivery - Voxxed Days Bucharest 2017
Page 23: Continuous Delivery - Voxxed Days Bucharest 2017
Page 24: Continuous Delivery - Voxxed Days Bucharest 2017

Automated Tests

"last mile"Continuous Integration

Customer

"Agile" team

Centralized QA IT OperationsAnalysis + Design

Development

Testing + Showcase

Integration + QARelease and operation

Acceptance Tests

Page 25: Continuous Delivery - Voxxed Days Bucharest 2017

Configuration Management

+MonitoringAutomated Tests

"last mile"Continuous Integration

Customer

"Agile" team

Centralized QA IT OperationsAnalysis + Design

Development

Testing + Showcase

Integration + QARelease and operation

Acceptance Tests

Page 26: Continuous Delivery - Voxxed Days Bucharest 2017

Continuous Delivery Pipeline

Page 27: Continuous Delivery - Voxxed Days Bucharest 2017

Checkout

Compile

Unit Tests

Deploy to Staging

Acceptance Tests

Release

Smoke Test

Page 28: Continuous Delivery - Voxxed Days Bucharest 2017
Page 29: Continuous Delivery - Voxxed Days Bucharest 2017
Page 30: Continuous Delivery - Voxxed Days Bucharest 2017

dev machine

github server

jenkins server

push

pull

Page 31: Continuous Delivery - Voxxed Days Bucharest 2017

Checkout

Compile

Unit Tests

Deploy to Staging

Acceptance Tests

Release

Smoke Test

Page 32: Continuous Delivery - Voxxed Days Bucharest 2017

issues?

● Each server has to be configured

● Different environment in staging and production

● Different Java version for different applications

● Applications using the same ports

● Versioning

Page 33: Continuous Delivery - Voxxed Days Bucharest 2017
Page 34: Continuous Delivery - Voxxed Days Bucharest 2017

serverapplicationapp.jar

Page 35: Continuous Delivery - Voxxed Days Bucharest 2017

serverapplicationapp.jar

java -jar app.jar

Page 36: Continuous Delivery - Voxxed Days Bucharest 2017

server

applicationapp2.jar

java -jar app.jar

applicationapp.jar

Page 37: Continuous Delivery - Voxxed Days Bucharest 2017
Page 38: Continuous Delivery - Voxxed Days Bucharest 2017

treat your servers like cattle, not pets

Page 39: Continuous Delivery - Voxxed Days Bucharest 2017
Page 40: Continuous Delivery - Voxxed Days Bucharest 2017
Page 41: Continuous Delivery - Voxxed Days Bucharest 2017
Page 42: Continuous Delivery - Voxxed Days Bucharest 2017

Dockerfile:

FROM frolvlad/alpine­oraclejdk8:slimADD build/libs/vox­0.0.1­SNAPSHOT.jar app.jarENTRYPOINT ["java","­jar","app.jar"]

Page 43: Continuous Delivery - Voxxed Days Bucharest 2017

Dockerfile:

FROM frolvlad/alpine­oraclejdk8:slimADD build/libs/vox­0.0.1­SNAPSHOT.jar app.jarENTRYPOINT ["java","­jar","app.jar"]

docker build ­t <image_name> .

Dockerfile:

Page 44: Continuous Delivery - Voxxed Days Bucharest 2017

$ docker run ­­name <container_name> <image_name> 

Page 45: Continuous Delivery - Voxxed Days Bucharest 2017

$ docker run ­­name <container_name> <image_name> 

Page 46: Continuous Delivery - Voxxed Days Bucharest 2017

Docker registry

● registry for docker images

Page 47: Continuous Delivery - Voxxed Days Bucharest 2017

Docker image name

<registry_address>/<image_name>

Page 48: Continuous Delivery - Voxxed Days Bucharest 2017

Docker image name

<registry_address>/<image_name>

docker push <image_name>

Page 49: Continuous Delivery - Voxxed Days Bucharest 2017

Docker image name

<registry_address>/<image_name>

docker push <image_name>

docker pull <image_name>

Page 50: Continuous Delivery - Voxxed Days Bucharest 2017

Port Mapping

$ docker run ­p 8080:8080 ­­name <container_name> <image_name> 

Page 51: Continuous Delivery - Voxxed Days Bucharest 2017

External Docker Host

$ docker run ­p 8080:8080 ­­name <container_name> <image_name> 

$ docker run ­H 192.168.0.15:2375 ­p 8080:8080 ­­name <container_name> <image_name>

Page 52: Continuous Delivery - Voxxed Days Bucharest 2017

Example

$ docker run ­H 192.168.0.15:2375 ­p 8080:8080 ­d ­­name exchange­rate 192.168.0.20/exchange­rate:15

Page 53: Continuous Delivery - Voxxed Days Bucharest 2017

dev machine

github server

jenkins server

push

pull

staging machine

production machine

deploy

acceptance test

deploy

smoke test

docker registry

push

pull

pull

Page 54: Continuous Delivery - Voxxed Days Bucharest 2017

Manual Testing

Page 55: Continuous Delivery - Voxxed Days Bucharest 2017

Legacy Projects

Page 56: Continuous Delivery - Voxxed Days Bucharest 2017
Page 57: Continuous Delivery - Voxxed Days Bucharest 2017

Performance Tests

Page 58: Continuous Delivery - Voxxed Days Bucharest 2017

Blue-Green Deployment

Page 59: Continuous Delivery - Voxxed Days Bucharest 2017

Canary Release

Page 60: Continuous Delivery - Voxxed Days Bucharest 2017

Code coverage

Page 61: Continuous Delivery - Voxxed Days Bucharest 2017

Static code analysis

Page 62: Continuous Delivery - Voxxed Days Bucharest 2017

“continuous”

Page 63: Continuous Delivery - Voxxed Days Bucharest 2017

Feature Toggle

Page 64: Continuous Delivery - Voxxed Days Bucharest 2017
Page 65: Continuous Delivery - Voxxed Days Bucharest 2017

Easy?

Page 66: Continuous Delivery - Voxxed Days Bucharest 2017

Questions?