continuous delivery in java

53
Continuous Delivery in Java Cose che abbiamo imparato facendoci del male Italian Agile Day ‘15

Upload: xpeppers

Post on 17-Feb-2017

679 views

Category:

Software


1 download

TRANSCRIPT

Continuous Delivery in JavaCose che abbiamo imparato facendoci del male

Italian Agile Day ‘15

@pdincau

Here I am

Continuous Delivery?

What is

“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

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

My Team*

* Come and ask!

n t Continuous Delivery...

What is

Continuous Integration

Continuous Deployment

“Safety" Deploy rules

Technically Speaking

Deploy any specific working version to

production with confidence

3 ways

Rodeo Style

No tests

Manual deploy

Snowflake environments

Non predictable outcome

Few or very little collaboration

By the book

Fast Feedback

Done is released

Shared responsibility

Everything is automated

Repeatable and reliable process

Start small and iterate

Once upon a time...

We did know...

Previous deployment process was painful

Database continuously change

Different environments

Itera

tion

n.1

No Automation

Environment replica on AWS

Manual build

Manual DB migrations

Deploy with scp to remote JBoss

It was our own choice...

...but we felt like this

No automation at all

When was our last deploy?

A taste of AutomationIte

ratio

n n.

2

Set up a basic Jenkins installation

Test and build triggered on push

DB migration using Liquibase

Task to deploy on AWS

This worked for a while

Errors in MyBatis DB mappers

Wrong/Missing wirings

Yay! Environments are ready!

Deploy EverywhereIte

ratio

n n.

3

New Jenkins job to run IT

Track slowest tests

First official deploy an all environments

…with different DB drivers !#$?!

Duplication

Incorrect use of mvn profiles

N-builds for N-environments

Long build and deploy time

Single ArtefactIte

ratio

n n.

4

Got rid of configurations using JBoss

*Unique* artefact for all environments

Deploy version X.Y.Z from Nexus

We started getting fast

But QA were not so happy

Branches, branches everywhere!

Make them happyIte

ratio

n n.

5

AWS is for nightly builds

Tags over branches

Track deployed version

Acceptance tests

Explained values and

motivations to Product Owner

Remove Candidate Clean Up

Clean Up

Meet the pipeline

Migrate

Database

Fetch Unit Tests Build

Build

Slow Tests Integration Tests

Integration

Deploy Publish UAT

QA and Publish

Where to go next

Parallel builds

Environments Provisioning

Things we would change...

Pipeline with “placeholders”

Extract configurations

Explain at the beginning the values behind

Things we would do again...

Build the pipeline iteratively

Use of Liquibase

Share pipeline responsibility

Recommended reading

That’s all!

Thanks

@pdincau