Jez Humble's Continuous Delivery Web site
Common Pain Points (highest to lowest) [from DZone]:
Environment Configuration and setup
Deployment Process
Supply Chain Management
Requirements Issues
User Acceptance Test
Build And Compile
Automated Tests
Coordination of teams, users and resources
Untidiness in changes
Delivery and Rollout
Regression Test
Performance Test
Integration Test
Notes From YouTube Video: Building a Continuous Delivery Pipeline with Gradle and Jenkins
Principals:
Every commit can result in a release candidate
Automate Everything
Automated test are essential
'Done' means released
Build Pipeline: Automated manifestation of delivery process
Build Quality in: Establish automated quality gates
Pipeline:
Build Stage (Automated)
Git Checkout
Compile/Unit Tests
Integration Tests
Code Analysis
Package
Publish Binaries
Acceptance Stage (Automated)
Deploy to Test Envs
Functional Test
Non-Functional Test
User Acceptance Stage (Manual trigger)
Deploy to Test Envs
User Acceptance Tests
Release Stage
Deploy to Production (Manual trigger)
Database SetUp and TearDown:
Use tools like dbdeploy.
It stores incremental changes to the database and keeps a record in the database about what has already been applied.
Java Code Coverage:
Cobertura: Offline byte-code instrumentation
EMMA: Offline byte-code instrumentation
Clover: Source-code Instrumentation
JACOCO: On the fly byte-code instrumentation
Java Static Code Analysis:
PMD
CodeNarc
FindBugs
CheckStyle
JDepend
SonarQube provides a centralised way of doing Code Coverage, Static analysis and reports
Packaging Delivery Artifacts
Exclude Environment specific configuration (tokenise them)
Include build information for trace-ability
Choose a versioning strategy
Publish Artifacts
Version Artefacts
Use Binary Repository
Nexus
Artifactory
Apache Archiva
Publish once, deploy many
Jenkins plugins
Parameterised Trigger Plugin
Build Name Setter
Gradle Plugin
Clone Workspace SCM
JaCoCo
Build Pipeline