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
2. Continuous Delivery
Praqma
Continuous Delivery Experts
We automate
software
development
processes and
verification
techniques
We do sponsored
Open Source
development.
Our focus is strong on
Open Source tools
especially Jenkins CI
Regional service
Service partner
agreements
3. 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
5. Continuous Delivery
Continuous Delivery
A Staged Approach
Commit
Rejected
Released
Pre-test
Static
Analysis
Passed
Failed
Deploy &
Test
Passed
Failed
Failed
Release &
Deploy
Passed
Failed
6. Continuous Delivery
Signs of
Continuous Delivery Maturity
“Early Branching”
Branches used
for releases
Merges are rare
Unit Test
Code
Coverage
Verification
before commit
run in developer's
Workspace
Common
nightly build
Build status is
notified to
committer
“Late branching”
Branches used
for work isolation
Merges are
common
Metrics on
technical debt &
compliance
Mock-up's &
proxies
Ci server
builds on commit
Artifacts are
managed
Latest build status
Is available to
all stakeholders
Pre-tested
Commits
Integration branch
is pristine
Peer-reviews
Automated
Functional
Test
No build scripts
-only configurations
Dependencies
are 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 build
sequence
Monitors in work
areas show
real-time status
Release notes
& traceability
analysis
are generated
automatically
Automated
Acceptance
Test
Build from VM
CI server
orchestrate VMs
Build reports
and statistics are
shared with
customer and
public
Visibility
SCM
Test + QA
Build
Novice Expert
7. Continuous Delivery
Cobertura
● A code coverage utility for Java.
Javadoc
Checkstyle
● Junit
● A programmer-oriented testing framework for Java.
Tools
14. 2
Praqmatic Software
Development
Continuous Delivery
Praqma
Continuous Delivery Experts
We automate
software
development
processes and
verification
techniques
We do sponsored
Open Source
development.
Our focus is strong on
Open Source tools
especially Jenkins CI
Regional service
Service partner
agreements
● 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?
15. 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
17. 5
Praqmatic Software
Development
Continuous Delivery
Continuous Delivery
A Staged Approach
Commit
Rejected
Released
Pre-test
Static
Analysis
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!
18. 6
Praqmatic Software
Development
Continuous Delivery
Signs of
Continuous Delivery Maturity
“Early Branching”
Branches used
for releases
Merges are rare
Unit Test
Code
Coverage
Verification
before commit
run in developer's
Workspace
Common
nightly build
Build status is
notified to
committer
“Late branching”
Branches used
for work isolation
Merges are
common
Metrics on
technical debt &
compliance
Mock-up's &
proxies
Ci server
builds on commit
Artifacts are
managed
Latest build status
Is available to
all stakeholders
Pre-tested
Commits
Integration branch
is pristine
Peer-reviews
Automated
Functional
Test
No build scripts
-only configurations
Dependencies
are 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 build
sequence
Monitors in work
areas show
real-time status
Release notes
& traceability
analysis
are generated
automatically
Automated
Acceptance
Test
Build from VM
CI server
orchestrate VMs
Build reports
and statistics are
shared with
customer and
public
Visibility
SCM
Test + QA
Build
Novice Expert