Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male

65
Continuous Delivery in Java Cose che abbiamo imparato facendoci del male Codemotion Milano ‘15

Transcript of Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male

Page 1: Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male

Continuous Delivery in JavaCose che abbiamo imparato facendoci del male

Codemotion Milano ‘15

Page 2: Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male

@pdincau

Here We Are

@pierodibello

Page 3: Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male

Continuous Delivery?

What is

Page 4: Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male

“Continuous Delivery is a software development discipline where you build software in such a way that the software can be released to

production at any time. ”Martin Fowler*

* martinfowler.com/bliki/ContinuousDelivery.html

Page 5: Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male

“Continuous Delivery is nothing more than reducing the stress you get when you deliver business value to the customer ”

My Team*

* Come and ask!

Page 6: Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male

n t Continuous Delivery...

What is

Page 7: Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male

Continuous Integration

Page 8: Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male

Continuous Deployment

Page 9: Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male

“Safety” Deploy rules

Page 10: Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male
Page 11: Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male

Technically Speaking

Page 12: Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male

Deploy any specific working version to

production with confidence

Page 13: Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male

3 ways

Page 14: Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male

Rodeo Style

Page 15: Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male

No tests

Manual deploy

Snowflake environments

Non predictable outcome

Few or very little collaboration

Page 16: Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male

Rodeo Style

Page 17: Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male

By the book

Page 18: Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male

Fast Feedback

Done is released

Shared responsibility

Everything is automated

Repeatable and reliable process

Page 19: Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male

Start small and iterate

Page 20: Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male

Once upon a time...

Page 21: Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male

We did know...

Page 22: Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male

Previous deployment process was painful

Database continuously change

Different environments

Page 23: Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male

Itera

tion

n.1

No Automation

Page 24: Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male

Environment replica on AWS

Manual build

Manual DB migrations

Deploy with scp to remote JBoss

Page 25: Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male

It was our own choice...

Page 26: Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male

...but we felt like this

Page 27: Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male

No automation at all

When was our last deploy?

Page 28: Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male

A taste of AutomationIte

ratio

n n.

2

Page 29: Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male

Set up a basic Jenkins installation

Test and build triggered on push

DB migration using Liquibase

Task to deploy on AWS

Page 30: Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male

This worked for a while

Page 31: Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male

Errors in MyBatis DB mappers

Wrong/Missing wirings

Page 32: Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male

Meanwhile...

Page 33: Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male

Yay! Environments are ready!

Page 34: Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male

Deploy EverywhereIte

ratio

n n.

3

Page 35: Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male

New Jenkins job to run integration tests

Track slowest tests

First official deploy an all environments

Page 36: Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male

…with different DB drivers !#$?!

Page 37: Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male

Duplication

Page 38: Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male

Incorrect use of mvn profiles

N-builds for N-environments

Long build and deploy time

Page 39: Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male

Single ArtefactIte

ratio

n n.

4

Page 40: Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male

Got rid of configurations using JBoss

*Unique* artefact for all environments

Deploy version X.Y.Z from Nexus

Page 41: Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male

We started getting fast

Page 42: Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male

But QA were not so happy

Branches, branches everywhere!

Page 43: Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male

Make them happyIte

ratio

n n.

5

Page 44: Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male

An environment for QA

Tags over branches

Track deployed version

Page 45: Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male

Devs love QAs

Page 46: Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male

Acceptance tests

Page 47: Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male

Explained values and

motivations to Product Owner

Page 48: Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male

Self-service deploy

Page 49: Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male

Remove Candidate Clean Up

Clean Up

Build it...

Migrate !

Database

Fetch Unit Tests Build

Build

Integration Test !

Integration

Deploy Publish UAT

QA and Publish

Page 50: Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male

Frontend Angular !

Web

...and deliver it

Deploy ESB !

ESB

Deploy staging !

Deploy Staging

Deploy API Deploy Core

Backend

Migrate !

Database

Page 51: Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male

Things we are experimenting

Page 52: Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male

Parallelization

Environments Provisioning

Jenkins under git

Squash migrations to snapshot

Page 53: Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male

What we would do differently...

Page 54: Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male

Pipeline with “placeholders”

Extract configurations asap

Explain at the beginning the values behind

Page 55: Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male

Things we will keep doing...

Page 56: Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male

Build the pipeline iteratively

Share pipeline responsibility

Use the tool that best fit your needs

Page 57: Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male

Recommended reading

Page 58: Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male

Take a look at these

Real-World Strategies for Continuous Delivery

with Maven and Jenkins

https://www.youtube.com/watch?v=McTZtyb9M38

Visualizations of Continuous Delivery

http://continuousdelivery.com/2014/02/visualizations-of-continuous-delivery/

Page 59: Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male
Page 60: Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male
Page 61: Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male
Page 62: Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male
Page 63: Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male

That’s all!

Page 64: Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male

@pdincau@pierodibello

Page 65: Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male

https://creativecommons.org/licenses/by-nc-sa/3.0/

Thanks!