Contents
Foreword
Preface
Acknowledgments
About the Authors
Part I: Foundations
Chapter 1: The Problem of Delivering Software
Introduction
Some Common Release Antipatterns
How Do We Achieve Our Goal?
What Are the Benefits?
The Release Candidate
Principles of Software Delivery
Summary
Chapter 2: Configuration Management
Introduction
Using Version Control
Managing Dependencies
Managing Software Configuration
Managing Your Environments
Summary
Chapter 3: Continuous Integration
Introduction
Implementing Continuous Integration
Prerequisites for Continuous Integration
Using Continuous Integration Software
Essential Practices
Suggested Practices
Distributed Teams
Distributed Version Control Systems
Summary
Chapter 4: Implementing a Testing Strategy
Introduction
Types of Tests
Real-Life Situations and Strategies
Process
Summary
Part II: The Deployment Pipeline
Chapter 5: Anatomy of the Deployment Pipeline
Introduction
What Is a Deployment Pipeline?
Deployment Pipeline Practices
The Commit Stage
The Automated Acceptance Test Gate
Subsequent Test Stages
Preparing to Release
Implementing a Deployment Pipeline
Metrics
Summary
Chapter 6: Build and Deployment Scripting
Introduction
An Overview of Build Tools
Principles and Practices of Build and Deployment Scripting
Project Structure for Applications That Target the JVM
Deployment Scripting
Tips and Tricks
Summary
Chapter 7: The Commit Stage
Introduction
Commit Stage Principles and Practices
The Results of the Commit Stage
Commit Test Suite Principles and Practices
Summary
Chapter 8: Automated Acceptance Testing
Introduction
Why Is Automated Acceptance Testing Essential?
Creating Acceptance Tests
The Application Driver Layer
Implementing Acceptance Tests
The Acceptance Test Stage
Acceptance Test Performance
Summary
Chapter 9: Testing Nonfunctional Requirements
Introduction
Managing Nonfunctional Requirements
Programming for Capacity
Measuring Capacity
The Capacity-Testing Environment
Automating Capacity Testing
Adding Capacity Tests to the Deployment Pipeline
Additional Benefits of a Capacity Test System
Summary
Chapter 10: Deploying and Releasing Applications
Introduction
Creating a Release Strategy
Deploying and Promoting Your Application
Rolling Back Deployments and Zero-Downtime Releases
Emergency Fixes
Continuous Deployment
Tips and Tricks
Summary
Part III: The Delivery Ecosystem
Chapter 11: Managing Infrastructure and Environments
Introduction
Understanding the Needs of the Operations Team
Modeling and Managing Infrastructure
Managing Server Provisioning and Configuration
Managing the Configuration of Middleware
Managing Infrastructure Services
Virtualization
Cloud Computing
Monitoring Infrastructure and Applications
Summary
Chapter 12: Managing Data
Introduction
Database Scripting
Incremental Change
Rolling Back Databases and Zero-Downtime Releases
Managing Test Data
Data Management and the Deployment Pipeline
Summary
Chapter 13: Managing Components and Dependencies
Introduction
Keeping Your Application Releasable
Dependencies
Components
Managing Dependency Graphs
Managing Binaries
Managing Dependencies with Maven
Summary
Chapter 14: Advanced Version Control
Introduction
A Brief History of Revision Control
Branching and Merging
Distributed Version Control Systems
Stream-Based Version Control Systems
Develop on Mainline
Branch for Release
Branch by Feature
Branch by Team
Summary
Chapter 15: Managing Continuous Delivery
Introduction
A Maturity Model for Configuration and Release Management
Project Lifecycle
A Risk Management Process
Common Delivery Problems—Their Symptoms and Causes
Compliance and Auditing
Summary
Bibliography
Index
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z