Chapter
Chapter 1: Introduction to DevOps and Continuous Delivery
The Agile wheel of wheels
Beware the cargo cult Agile fallacy
Chapter 2: A View from Orbit
The DevOps process and Continuous Delivery – an overview
Scrum, Kanban, and the delivery pipeline
Wrapping up – a complete example
Chapter 3: How DevOps Affects Architecture
Introducing software architecture
Architecture rules of thumb
The separation of concerns
The principle of cohesion
Back to the monolithic scenario
Handling database migrations
How to keep service interfaces forward compatible
Microservices and the data tier
DevOps, architecture, and resilience
Chapter 4: Everything is Code
The need for source code control
The history of source code management
Which source code management system?
A word about source code management system migrations
Choosing a branching strategy
Setting up a basic Git server
Trying out different Git server implementations
Chapter 5: Building the Code
The many faces of build systems
Managing build dependencies
Job chaining and build pipelines
A look at the Jenkins filesystem layout
Build servers and infrastructure as code
Alternative build servers
Collating quality measures
About build status visualization
Taking build errors seriously
Chapter 6: Testing the Code
Pros and cons with test automation
JUnit in general and JUnit in particular
Automated integration testing
Automated acceptance testing
Integrating Selenium tests in Jenkins
Testing backend integration points
A complete test automation scenario
Chapter 7: Deploying the Code
Why are there so many deployment systems?
Executing code on the client
The Puppet master and Puppet agents
Salt versus Ansible versus Puppet versus PalletOps execution models
Chapter 8: Monitoring the Code
Chapter 9: Issue Tracking
What are issue trackers used for?
Some examples of workflows and issues
What do we need from an issue tracker?
Problems with issue tracker proliferation
Chapter 10: The Internet of Things
and DevOps
Introducing the IoT and DevOps
The future of the IoT according to the market
Machine-to-machine communication
IoT deployment affects software architecture
Okay, but what about DevOps and the IoT again?
A hands-on lab with an IoT device for DevOps
Chapter 1: Basic Command Line Tools
Controlling network interfaces
Monitoring network details with the IP command
Monitoring connections using the ss command
Gathering basic OS statistics
Viewing historical resource usage with SAR
Installing and configuring a Git client
Creating an SSH key for Git
Using ssh-copy-id to copy keys
Creating a new Git repository
Cloning an existing Git repository
Checking changes into a Git repository
Pushing changes to a Git remote
Chapter 2: Ad Hoc Tasks
with Ansible
Installing an Ansible control node on Ubuntu
Installing an Ansible control node on CentOS
Creating an Ansible inventory
Using the raw module to install
python-simplejson
Installing packages with Ansible
Restarting services using Ansible
Executing freeform commands with Ansible
Managing users with Ansible
Managing SSH keys with Ansible
Chapter 3: Automatic Host builds
Creating an Apt mirror using aptly
Automated installation using PXE boot and a Preseed file
Automating post-installation tasks
Chapter 4: Virtualization with VMware ESXi
Installing and using the vSphere Client
Allowing SSH access to ESXi
Allocating resources to a guest
Using the ESXi command line to start, stop, and destroy guests
Managing command-line snapshots
Tuning the host for guest performance
Chapter 5: Automation
with Ansible
Creating a scaffold Playbook
Creating a webserver using Ansible and Nginx
Creating an application server role using Tomcat and Ansible
Installing MySQL using Ansible
Installing and managing HAProxy with Ansible
Using ServerSpec to test your Playbook
Chapter 6: Containerization
with Docker
Pulling an image from the public Docker registry
Performing basic Docker operations
Running a container interactively
Running a container in detached mode
Saving and restoring a container
Using the host only network
Running a private Docker registry
Managing images with a private registry
Chapter 7: Using Jenkins for Continuous Deployment
Installing the Git plugin
Installing a Jenkins slave
Creating your first Jenkins job
Building Docker containers using Jenkins
Deploying a Java application to Tomcat with zero downtime using Ansible
Chapter 8: Metric Collection
with InfluxDB
Creating a new InfluxDB database
Logging events with the InfluxDB REST API
Gathering host statistics with Telegraf
Exploring data with the InfluxDB data explorer
Creating dashboards with Grafana
Chapter 9: Log Management
Centralizing logs with Syslog
Managing log rotation with the Logrotate utility
Installing ElasticSearch, Logstash, and Kibana
Importing logs into Elasticsearch with Logstash
Using Kibana queries to explore data
Using Kibana queries to examine data
Chapter 10: Monitoring with Sensu
Installing a Sensu server
Installing a Sensu client
Installing check prerequisites
Using Ansible to install Sensu
Chapter 11: IAAS with Amazon AWS
Creating your first security group
Creating your first EC2 host
Using Elastic Load Balancers
Managing DNS with route53
Using Ansible to create EC2 hosts
Chapter 12: Application Performance Monitoring with New Relic
Signing up for a New Relic account
Installing the New Relic Java agent
Using the performance overview
Locating performance bottlenecks with Transaction Traces
Observing database performance with New Relic
Release performance monitoring with New Relic
Server Monitoring with New Relic
Chapter 1: Evolution of a
Software House
A brief history of ACME systems
The evolution in a nutshell
Chapter 2: No Pain, No Gain
Including (almost) everyone
Openness, transparency, and honesty
The great elephant disclosure
Chapter 3: Plan of Attack
Setting and communicating the goal
and vision
Standardizing vocabulary and language
A business change project in its own right
The merits of a dedicated team
The importance of evangelism
Courage and determination
Seeking advice from others
Chapter 4: Culture and Behaviors
All roads lead to culture
An open, honest, and safe environment
Encouraging and embracing collaboration
Fostering innovation and accountability at grass roots
Building trust-based relationships across organizational boundaries
Rewarding good behaviors and success
Recognizing dev and ops teams are incentivized can have an impact
Embracing change and reducing risk
Chapter 5: Approaches, Tools,
and Techniques
Engineering best practice
How many environments are enough?
Developing against a production-like environment
When a simple manual process is also an effective tool
Chapter 6: Hurdles Along the Way
What are the potential issues you need to look out for?
Chapter 7: Vital Measurements
Measuring effective engineering best practice
Chapter 8: Are We There Yet?
Reflect on where you are now
A victim of your own success
[P]lan, [D]o, [C]heck, [A]djust
Rest on your laurels (not)
Chapter 9: The Future is Bright
Expanding beyond software delivery
Appendix A: Some Useful Information
Appendix B: Where Am I on the Evolutionary Scale?
Appendix C: Retrospective Games
Appendix D: Vital Measurements Expanded
Code complexity – some science
Embedding monitoring into your software