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
No tests
Manual deploy
Snowflake environments
Non predictable outcome
Few or very little collaboration
Fast Feedback
Done is released
Shared responsibility
Everything is automated
Repeatable and reliable process
Start small and iterate
Once upon a time...
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 !#$?!
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
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
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