Automating Software Deployment
Automating Software Deployment

Retired

This book is no longer available for sale.

Automating Software Deployment

This book is 100% complete

Completed on 2018-10-26

About the Book

This book teaches a technically inclined reader how to automate the deployment process of self-written software using Open Source tools. Thus it introduces you to Continuous Delivery, a practice under the DevOps umbrella. It enables faster feedback cycles, which is an important aspect of agile software development.

It makes some assumptions on the technologies used:

  • Debian GNU/Linux or derived distributions, such as Ubuntu, as the operating system
  • aptly for repository management
  • Ansible for deployment and configuration management
  • Go Continuous Delivery for orchestrating the process

It covers the following topics:

  • Why automate the release process?
  • Requirements for automated deployments
  • Deployments enviroments (test, staging, production, ...) and their function
  • Architecture of a deployment system
  • Packaging the software
  • Distributing the software
  • Deploying the software
  • Orchestrating the whole process with Go Continuous Delivery
  • Version handling
  • Unit Testing
  • Smoke Testing and Rolling Deployments
  • Security Considerations
  • State Management and managing schema changes.

It shows a step by step process for creating a deployment system, and features two example applications deployed this way.

About the Author

Moritz Lenz
Moritz Lenz

Moritz Lenz is a software engineer and architect.

In the Perl community, he is well known for his contributions to the Perl 6 programming language, the Rakudo Perl 6 compiler, related test suite, infrastructure and tools.

At his employer, noris network AG, he introduced Continuous Delivery for many in-house developed applications, and now wants to share his experience with the wider world.

About the Contributors

Carl Mäsak
Carl Mäsak
Paul Cochrane
Paul Cochrane

Table of Contents

  • 1. Introduction
    • 1.1 Who this book is for
  • 2. Why Automate Deployments?
    • 2.1 Save Time
    • 2.2 Shorter Release Cycles
    • 2.3 Shorter Feedback Cycles
    • 2.4 Reliability of Releases
    • 2.5 More Architectural Freedom
    • 2.6 Advanced Quality Assurance Techniques
    • 2.7 Automating Deployments or Continuous Delivery?
    • 2.8 Agile, DevOps?
  • 3. Requirements for Automating Deployments
    • 3.1 Version Control
    • 3.2 Automated Tests
    • 3.3 Cooperation Between Operators and Developers
    • 3.4 Partial Control Over the Destination Environment
    • 3.5 Summary
  • 4. Automating Deployments: Simplistic Deployment with Git and Bash
    • 4.1 Reality Kicks In
    • 4.2 More Headaches
    • 4.3 A Less Daunting Perspective
  • 5. Environments for your Software
    • 5.1 The Development Environment
    • 5.2 One or More Testing Environments
    • 5.3 How Many Environments Should I Use?
    • 5.4 Summary
  • 6. The Anatomy of a Deployment System
    • 6.1 The Pipeline Architecture
    • 6.2 Anti-Pattern: Separate Builds per Environment
    • 6.3 Everything Hinges on the Packaging Format
    • 6.4 Summary
  • 7. The Example Project: Package Info
    • 7.1 Source
  • 8. Building a Debian Package
    • 8.1 Getting Started with Packaging
    • 8.2 The control File
    • 8.3 Directing the Build Process
    • 8.4 Using Systemd to Start the Application Server
    • 8.5 Triggering the Build
    • 8.6 Summary
  • 9. Distributing Debian Packages
    • 9.1 Signatures
    • 9.2 Preparing the Repository
    • 9.3 Automating Repository Creation and Package Addition
    • 9.4 Serving the Repositories
    • 9.5 Summary
  • 10. Package Deployment
    • 10.1 Ansible: A Primer
    • 10.2 Deploying with Ansible
    • 10.3 Summary
  • 11. A Virtual Playground for Automating Deployments
    • 11.1 Requirements and Resource Usage
    • 11.2 Introducing Vagrant
    • 11.3 Configuring the Machines
    • 11.4 Summary
  • 12. Building in the Pipeline with Go Continuous Delivery
    • 12.1 About Go Continuous Delivery
    • 12.2 Installation
    • 12.3 Building in the Pipeline
  • 13. Summary
  • 14. Distributing and Deploying Packages in the Pipeline
    • 14.1 Uploading in the Pipeline
    • 14.2 Deploying in the Pipeline
    • 14.3 Results
    • 14.4 Going All the Way to Production
    • 14.5 Achievement Unlocked: Basic Continuous Delivery
  • 15. Pipeline Improvements
    • 15.1 Rollbacks and Installing Specific Versions
    • 15.2 Configuration Templates
    • 15.3 Avoiding the Rebuild Stampede
    • 15.4 Summary
  • 16. A Second Example Project: python-matheval
    • 16.1 Meet python-matheval
    • 16.2 Integration in GoCD
    • 16.3 Summary
  • 17. Automated Tests and Rolling Releases
    • 17.1 Unit Tests
    • 17.2 Smoke Testing
    • 17.3 Adding Smoke Tests to the Pipeline, and Rolling Releases
    • 17.4 Summary
  • 18. Security
    • 18.1 The Dangers of Centralization
    • 18.2 Time to Market for Security Fixes
    • 18.3 Audits and Software Bill of Materials
    • 18.4 Conclusions
  • 19. State Management
    • 19.1 Synchronization Between Code and Database Versions
    • 19.2 Decoupling Application and Database Versions
  • 20. What’s Next?
    • 20.1 Improved Quality Assurance
    • 20.2 Metrics
    • 20.3 Infrastructure Automation
    • 20.4 Conclusions
  • Acknowledgements
  • Notes

The Leanpub 45-day 100% Happiness Guarantee

Within 45 days of purchase you can get a 100% refund on any Leanpub purchase, in two clicks.

See full terms...

Write and Publish on Leanpub

Authors, publishers and universities use Leanpub to publish amazing in-progress and completed books and courses, just like this one. You can use Leanpub to write, publish and sell your book or course as well! Leanpub is a powerful platform for serious authors, combining a simple, elegant writing and publishing workflow with a store focused on selling in-progress ebooks. Leanpub is a magical typewriter for authors: just write in plain text, and to publish your ebook, just click a button. It really is that easy.

Learn more about writing on Leanpub