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

Pietro Di Bello, Paolo DIncau - Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male | Codemotion Milan 2015

Jan 22, 2018

Download

Technology

Codemotion
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Pietro Di Bello, Paolo DIncau - Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male | Codemotion Milan 2015

Continuous Delivery in JavaCose che abbiamo imparato facendoci del male

Codemotion Milano ‘15

Page 2: Pietro Di Bello, Paolo DIncau - Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male | Codemotion Milan 2015

@pdincau

Here We Are

@pierodibello

Page 3: Pietro Di Bello, Paolo DIncau - Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male | Codemotion Milan 2015

Continuous Delivery?

What is

Page 4: Pietro Di Bello, Paolo DIncau - Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male | Codemotion Milan 2015

“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: Pietro Di Bello, Paolo DIncau - Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male | Codemotion Milan 2015

“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: Pietro Di Bello, Paolo DIncau - Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male | Codemotion Milan 2015

n t Continuous Delivery...

What is

Page 7: Pietro Di Bello, Paolo DIncau - Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male | Codemotion Milan 2015

Continuous Integration

Page 8: Pietro Di Bello, Paolo DIncau - Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male | Codemotion Milan 2015

Continuous Deployment

Page 9: Pietro Di Bello, Paolo DIncau - Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male | Codemotion Milan 2015

“Safety” Deploy rules

Page 10: Pietro Di Bello, Paolo DIncau - Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male | Codemotion Milan 2015
Page 11: Pietro Di Bello, Paolo DIncau - Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male | Codemotion Milan 2015

Technically Speaking

Page 12: Pietro Di Bello, Paolo DIncau - Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male | Codemotion Milan 2015

Deploy any specific working version to

production with confidence

Page 13: Pietro Di Bello, Paolo DIncau - Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male | Codemotion Milan 2015

3 ways

Page 14: Pietro Di Bello, Paolo DIncau - Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male | Codemotion Milan 2015

Rodeo Style

Page 15: Pietro Di Bello, Paolo DIncau - Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male | Codemotion Milan 2015

No tests

Manual deploy

Snowflake environments

Non predictable outcome

Few or very little collaboration

Page 16: Pietro Di Bello, Paolo DIncau - Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male | Codemotion Milan 2015

Rodeo Style

Page 17: Pietro Di Bello, Paolo DIncau - Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male | Codemotion Milan 2015

By the book

Page 18: Pietro Di Bello, Paolo DIncau - Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male | Codemotion Milan 2015

Fast Feedback

Done is released

Shared responsibility

Everything is automated

Repeatable and reliable process

Page 19: Pietro Di Bello, Paolo DIncau - Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male | Codemotion Milan 2015

Start small and iterate

Page 20: Pietro Di Bello, Paolo DIncau - Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male | Codemotion Milan 2015

Once upon a time...

Page 21: Pietro Di Bello, Paolo DIncau - Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male | Codemotion Milan 2015

We did know...

Page 22: Pietro Di Bello, Paolo DIncau - Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male | Codemotion Milan 2015

Previous deployment process was painful

Database continuously change

Different environments

Page 23: Pietro Di Bello, Paolo DIncau - Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male | Codemotion Milan 2015

Itera

tion

n.1

No Automation

Page 24: Pietro Di Bello, Paolo DIncau - Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male | Codemotion Milan 2015

Environment replica on AWS

Manual build

Manual DB migrations

Deploy with scp to remote JBoss

Page 25: Pietro Di Bello, Paolo DIncau - Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male | Codemotion Milan 2015

It was our own choice...

Page 26: Pietro Di Bello, Paolo DIncau - Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male | Codemotion Milan 2015

...but we felt like this

Page 27: Pietro Di Bello, Paolo DIncau - Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male | Codemotion Milan 2015

No automation at all

When was our last deploy?

Page 28: Pietro Di Bello, Paolo DIncau - Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male | Codemotion Milan 2015

A taste of AutomationIte

ratio

n n.

2

Page 29: Pietro Di Bello, Paolo DIncau - Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male | Codemotion Milan 2015

Set up a basic Jenkins installation

Test and build triggered on push

DB migration using Liquibase

Task to deploy on AWS

Page 30: Pietro Di Bello, Paolo DIncau - Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male | Codemotion Milan 2015

This worked for a while

Page 31: Pietro Di Bello, Paolo DIncau - Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male | Codemotion Milan 2015

Errors in MyBatis DB mappers

Wrong/Missing wirings

Page 32: Pietro Di Bello, Paolo DIncau - Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male | Codemotion Milan 2015

Meanwhile...

Page 33: Pietro Di Bello, Paolo DIncau - Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male | Codemotion Milan 2015

Yay! Environments are ready!

Page 34: Pietro Di Bello, Paolo DIncau - Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male | Codemotion Milan 2015

Deploy EverywhereIte

ratio

n n.

3

Page 35: Pietro Di Bello, Paolo DIncau - Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male | Codemotion Milan 2015

New Jenkins job to run integration tests

Track slowest tests

First official deploy an all environments

Page 36: Pietro Di Bello, Paolo DIncau - Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male | Codemotion Milan 2015

…with different DB drivers !#$?!

Page 37: Pietro Di Bello, Paolo DIncau - Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male | Codemotion Milan 2015

Duplication

Page 38: Pietro Di Bello, Paolo DIncau - Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male | Codemotion Milan 2015

Incorrect use of mvn profiles

N-builds for N-environments

Long build and deploy time

Page 39: Pietro Di Bello, Paolo DIncau - Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male | Codemotion Milan 2015

Single ArtefactIte

ratio

n n.

4

Page 40: Pietro Di Bello, Paolo DIncau - Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male | Codemotion Milan 2015

Got rid of configurations using JBoss

*Unique* artefact for all environments

Deploy version X.Y.Z from Nexus

Page 41: Pietro Di Bello, Paolo DIncau - Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male | Codemotion Milan 2015

We started getting fast

Page 42: Pietro Di Bello, Paolo DIncau - Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male | Codemotion Milan 2015

But QA were not so happy

Branches, branches everywhere!

Page 43: Pietro Di Bello, Paolo DIncau - Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male | Codemotion Milan 2015

Make them happyIte

ratio

n n.

5

Page 44: Pietro Di Bello, Paolo DIncau - Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male | Codemotion Milan 2015

An environment for QA

Tags over branches

Track deployed version

Page 45: Pietro Di Bello, Paolo DIncau - Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male | Codemotion Milan 2015

Devs love QAs

Page 46: Pietro Di Bello, Paolo DIncau - Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male | Codemotion Milan 2015

Acceptance tests

Page 47: Pietro Di Bello, Paolo DIncau - Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male | Codemotion Milan 2015

Explained values and

motivations to Product Owner

Page 48: Pietro Di Bello, Paolo DIncau - Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male | Codemotion Milan 2015

Self-service deploy

Page 49: Pietro Di Bello, Paolo DIncau - Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male | Codemotion Milan 2015

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: Pietro Di Bello, Paolo DIncau - Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male | Codemotion Milan 2015

Frontend Angular !

Web

...and deliver it

Deploy ESB !

ESB

Deploy staging !

Deploy Staging

Deploy API Deploy Core

Backend

Migrate !

Database

Page 51: Pietro Di Bello, Paolo DIncau - Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male | Codemotion Milan 2015

Things we are experimenting

Page 52: Pietro Di Bello, Paolo DIncau - Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male | Codemotion Milan 2015

Parallelization

Environments Provisioning

Jenkins under git

Squash migrations to snapshot

Page 53: Pietro Di Bello, Paolo DIncau - Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male | Codemotion Milan 2015

What we would do differently...

Page 54: Pietro Di Bello, Paolo DIncau - Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male | Codemotion Milan 2015

Pipeline with “placeholders”

Extract configurations asap

Explain at the beginning the values behind

Page 55: Pietro Di Bello, Paolo DIncau - Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male | Codemotion Milan 2015

Things we will keep doing...

Page 56: Pietro Di Bello, Paolo DIncau - Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male | Codemotion Milan 2015

Build the pipeline iteratively

Share pipeline responsibility

Use the tool tha best fit your needs

Page 57: Pietro Di Bello, Paolo DIncau - Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male | Codemotion Milan 2015

Recommended reading

Page 58: Pietro Di Bello, Paolo DIncau - Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male | Codemotion Milan 2015

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: Pietro Di Bello, Paolo DIncau - Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male | Codemotion Milan 2015
Page 60: Pietro Di Bello, Paolo DIncau - Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male | Codemotion Milan 2015
Page 61: Pietro Di Bello, Paolo DIncau - Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male | Codemotion Milan 2015
Page 62: Pietro Di Bello, Paolo DIncau - Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male | Codemotion Milan 2015
Page 63: Pietro Di Bello, Paolo DIncau - Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male | Codemotion Milan 2015

That’s all!

Page 64: Pietro Di Bello, Paolo DIncau - Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male | Codemotion Milan 2015

@pdincau@pierodibello

Page 65: Pietro Di Bello, Paolo DIncau - Continuous Delivery su progetti Java: cosa abbiamo imparato facendoci del male | Codemotion Milan 2015

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

Thanks!