View
197
Download
0
Embed Size (px)
DESCRIPTION
Oplægget blev holdt ved InfinIT-arrangementet "Temadag: Java for real-time and embedded systems", afholdt hhv. 12. og 13. september 2013. Læs mere om arrangementet her: http://infinit.dk/dk/arrangementer/tidligere_arrangementer/temadag_java_for_real-time_and_embedded_systems.htm
Citation preview
Continuous Delivery
The Continuous Delivery toolstack for embedded Java
by Leif Sørensen, Partner at Praqma
Continuous Delivery
PraqmaContinuous Delivery Experts
We automate softwaredevelopment processes and verification techniques
We do sponsored Open Source development.
Our focus is strong on Open Source tools especially Jenkins CI
Regional serviceService partneragreements
Continuous Delivery
Continuous Delivery Defies Phases
Software development is iterative by nature. Traditionally each iteration is seen as divided into phases
Development Integration Testing Deployment Release
The workload in each phase is unpredictable...and so becomes the release date
The business stakeholders must be able to decide the release date
Development+Integration+Testing+Deployment+
Release
Development+Integration+Testing+Deployment+
Release
Development+Integration+Testing+Deployment+
Release
Development+Integration+Testing+Deployment+
Release
Development+Integration+Testing+Deployment+
Release
Every commit is a potential release candidate
Continuous Delivery
Agile manifesto
Continuous Delivery
Continuous Delivery A Staged Approach
CommitRejected
Released
Pre-test
StaticAnalysis
Passed
Failed
Deploy &Test
Passed
Failed
Failed
Release &Deploy
Passed
Failed
Continuous Delivery
Signs ofContinuous Delivery Maturity
“Early Branching”
Branches used for releases
Merges are rare
Unit Test
Code Coverage
Verification before commit
run in developer'sWorkspace
Common nightly build
Build status isnotified tocommitter
“Late branching”
Branches usedfor work isolation
Merges are common
Metrics ontechnical debt &
compliance
Mock-up's & proxies
Ci serverbuilds on commit
Artifacts are managed
Latest build status Is available to
all stakeholders
Pre-tested Commits
Integration branchis pristine
Peer-reviews
AutomatedFunctional
Test
No build scripts-only configurations
Dependenciesare managed
Trend reports
Build status can be subscribed to
(pull vs push)
All commits are tied to tasks
Individual history rewrites
In DVCS
Test Data
Test in target
Distributed builds
Staged buildsequence
Monitors in work areas show
real-time status
Release notes & traceability
analysisare generatedautomatically
AutomatedAcceptance
Test
Build from VM
CI serverorchestrate VMs
Build reports and statistics are
shared withcustomer and
public
Visibility
SCM
Test + QA
Build
Novice Expert
Continuous Delivery
Cobertura● A code coverage utility for Java.
Javadoc
Checkstyle
● Junit● A programmer-oriented testing framework for Java.
Tools
Continuous Delivery
Jenkins CI - What it does
Jenkins CI make the state of the software
visible
Continuous Delivery
Build pipelines
Continuous Delivery
Cobertura Code Coverage
Continuous Delivery
Cobertura Code Coverage
Continuous Delivery
Checkstyle, Open Tasks
1
Praqmatic Software Development
Continuous Delivery
The Continuous Delivery toolstack for embedded Java
by Leif Sørensen, Partner at Praqma
2
Praqmatic Software Development
Continuous Delivery
PraqmaContinuous Delivery Experts
We automate softwaredevelopment processes and verification techniques
We do sponsored Open Source development.
Our focus is strong on Open Source tools especially Jenkins CI
Regional serviceService partneragreements
● Continuous delivery experts, experienced in working in regulated environments such at FDA, Solvency II, MISRA and ISO
● We help software development teams setup their software development processes, continuous integration and continuous delivery strategies.
● Open source community karma
● Offer SLA to our customers, that enables safe use of OSS
● Contribute by proxy
● Hvem er vi/jeg?
● Hvem er I?
3
Praqmatic Software Development
Continuous Delivery
Continuous Delivery Defies Phases
Software development is iterative by nature. Traditionally each iteration is seen as divided into phases
Development Integration Testing Deployment Release
The workload in each phase is unpredictable...and so becomes the release date
The business stakeholders must be able to decide the release date
Development+Integration+Testing+Deployment+
Release
Development+Integration+Testing+Deployment+
Release
Development+Integration+Testing+Deployment+
Release
Development+Integration+Testing+Deployment+
Release
Development+Integration+Testing+Deployment+
Release
Every commit is a potential release candidate
● Software development is iterative by nature, each release is followed by another, and each release tend to be regarded as a separate cycle
● Traditionally the SW process is perceived as having phases, which all -except the development itself - deals with consolidating the development effort.
● The consolidating phases are all notoriously unpredictable.
● The release data can not be planned
● The solution is to to automate all consolidation and verification steps and execute them upon every single commit
● The most important ingredients are an unquenchable urge to automate everything and a well greased build environment
● The phases – as we know them from traditional SW development – has got to be eliminated
● CD defies phases
4
Praqmatic Software Development
Continuous Delivery
Agile manifesto
2 important points from agile manifesto
5
Praqmatic Software Development
Continuous Delivery
Continuous Delivery A Staged Approach
CommitRejected
Released
Pre-test
StaticAnalysis
Passed
Failed
Deploy &Test
Passed
Failed
Failed
Release &Deploy
Passed
Failed
Imagine that you should draw a state-transition diagram of the process that should validate a release candidate from the point where it's committed to the VCS and through the verifications that would finally validate it.
It Could probably look something like this.
Point is:
● It's a staged model
● Each stage consist of an action AND a decision
● If this shall be automated then BOTH the action and the decision must be automated
Jenkins Can do this!
6
Praqmatic Software Development
Continuous Delivery
Signs ofContinuous Delivery Maturity
“Early Branching”
Branches used for releases
Merges are rare
Unit Test
Code Coverage
Verification before commit
run in developer'sWorkspace
Common nightly build
Build status isnotified tocommitter
“Late branching”
Branches usedfor work isolation
Merges are common
Metrics ontechnical debt &
compliance
Mock-up's & proxies
Ci serverbuilds on commit
Artifacts are managed
Latest build status Is available to
all stakeholders
Pre-tested Commits
Integration branchis pristine
Peer-reviews
AutomatedFunctional
Test
No build scripts-only configurations
Dependenciesare managed
Trend reports
Build status can be subscribed to
(pull vs push)
All commits are tied to tasks
Individual history rewrites
In DVCS
Test Data
Test in target
Distributed builds
Staged buildsequence
Monitors in work areas show
real-time status
Release notes & traceability
analysisare generatedautomatically
AutomatedAcceptance
Test
Build from VM
CI serverorchestrate VMs
Build reports and statistics are
shared withcustomer and
public
Visibility
SCM
Test + QA
Build
Novice Expert
7
Praqmatic Software Development
Continuous Delivery
Cobertura● A code coverage utility for Java.
Javadoc
Checkstyle
● Junit● A programmer-oriented testing framework for Java.
Tools
8
Praqmatic Software Development
Continuous Delivery
Jenkins CI - What it does
Jenkins CI make the state of the software
visible
9
Praqmatic Software Development
Continuous Delivery
Build pipelines
10
Praqmatic Software Development
Continuous Delivery
Cobertura Code Coverage
11
Praqmatic Software Development
Continuous Delivery
Cobertura Code Coverage
12
Praqmatic Software Development
Continuous Delivery
Checkstyle, Open Tasks