You are previewing Practical DevOps.
O'Reilly logo
Practical DevOps

Book Description

Harness the power of DevOps to boost your skill set and make your IT organization perform better

About This Book

  • Get to know the background of DevOps so you understand the collaboration between different aspects of an IT organization and a software developer

  • Improve your organization's performance to ensure smooth production of software and services

  • Deploy top-quality software and ensure software maintenance and release management with this practical guide

  • Who This Book Is For

    This book is aimed at developers and system administrators who wish to take on larger responsibilities and understand how the infrastructure that builds today's enterprises works. This book is also great for operations personnel who would like to better support developers. You do not need to have any previous knowledge of DevOps.

    What You Will Learn

  • Appreciate the merits of DevOps and continuous delivery and see how DevOps supports the agile process

  • Understand how all the systems fit together to form a larger whole

  • Set up and familiarize yourself with all the tools you need to be efficient with DevOps

  • Design an application that is suitable for continuous deployment systems with Devops in mind

  • Store and manage your code effectively using different options such as Git, Gerrit, and Gitlab

  • Configure a job to build a sample CRUD application

  • Test the code using automated regression testing with Jenkins Selenium

  • Deploy your code using tools such as Puppet, Ansible, Palletops, Chef, and Vagrant

  • Monitor the health of your code with Nagios, Munin, and Graphite

  • Explore the workings of Trac—a tool used for issue tracking

  • In Detail

    DevOps is a practical field that focuses on delivering business value as efficiently as possible. DevOps encompasses all the flows from code through testing environments to production environments. It stresses the cooperation between different roles, and how they can work together more closely, as the roots of the word imply—Development and Operations.

    After a quick refresher to DevOps and continuous delivery, we quickly move on to looking at how DevOps affects architecture. You'll create a sample enterprise Java application that you’ll continue to work with through the remaining chapters. Following this, we explore various code storage and build server options. You will then learn how to perform code testing with a few tools and deploy your test successfully. Next, you will learn how to monitor code for any anomalies and make sure it’s running properly. Finally, you will discover how to handle logs and keep track of the issues that affect processes

    Style and approach

    This book is primarily a technical guide to DevOps with practical examples suitable for people who like to learn by implementing concrete working code. It starts out with background information and gradually delves deeper into technical subjects.

    Downloading the example code for this book. You can download the example code files for all Packt books you have purchased from your account at If you purchased this book elsewhere, you can visit and register to have the code file.

    Table of Contents

    1. Practical DevOps
      1. Table of Contents
      2. Practical DevOps
      3. Credits
      4. About the Author
      5. About the Reviewers
        1. Support files, eBooks, discount offers, and more
          1. Why subscribe?
          2. Free access for Packt account holders
      7. Preface
        1. What this book covers
        2. What you need for this book
        3. Who this book is for
        4. Conventions
        5. Reader feedback
        6. Customer support
          1. Downloading the example code
          2. Errata
          3. Piracy
          4. Questions
      8. 1. Introduction to DevOps and Continuous Delivery
        1. Introducing DevOps
        2. How fast is fast?
        3. The Agile wheel of wheels
        4. Beware the cargo cult Agile fallacy
        5. DevOps and ITIL
        6. Summary
      9. 2. A View from Orbit
        1. The DevOps process and Continuous Delivery – an overview
          1. The developers
          2. The revision control system
          3. The build server
          4. The artifact repository
          5. Package managers
          6. Test environments
          7. Staging/production
        2. Release management
        3. Scrum, Kanban, and the delivery pipeline
        4. Wrapping up – a complete example
        5. Identifying bottlenecks
        6. Summary
      10. 3. How DevOps Affects Architecture
        1. Introducing software architecture
        2. The monolithic scenario
        3. Architecture rules of thumb
        4. The separation of concerns
        5. The principle of cohesion
        6. Coupling
        7. Back to the monolithic scenario
        8. A practical example
        9. Three-tier systems
        10. The presentation tier
        11. The logic tier
        12. The data tier
        13. Handling database migrations
        14. Rolling upgrades
        15. Hello world in Liquibase
        16. The changelog file
        17. The pom.xml file
        18. Manual installation
        19. Microservices
        20. Interlude – Conway's Law
        21. How to keep service interfaces forward compatible
        22. Microservices and the data tier
        23. DevOps, architecture, and resilience
        24. Summary
      11. 4. Everything is Code
        1. The need for source code control
        2. The history of source code management
        3. Roles and code
        4. Which source code management system?
        5. A word about source code management system migrations
        6. Choosing a branching strategy
        7. Branching problem areas
        8. Artifact version naming
        9. Choosing a client
        10. Setting up a basic Git server
        11. Shared authentication
        12. Hosted Git servers
        13. Large binary files
        14. Trying out different Git server implementations
        15. Docker intermission
        16. Gerrit
          1. Installing the git-review package
          2. The value of history revisionism
        17. The pull request model
        18. GitLab
        19. Summary
      12. 5. Building the Code
        1. Why do we build code?
        2. The many faces of build systems
        3. The Jenkins build server
        4. Managing build dependencies
        5. The final artifact
        6. Cheating with FPM
        7. Continuous Integration
        8. Continuous Delivery
        9. Jenkins plugins
        10. The host server
        11. Build slaves
        12. Software on the host
        13. Triggers
        14. Job chaining and build pipelines
        15. A look at the Jenkins filesystem layout
        16. Build servers and infrastructure as code
          1. Building by dependency order
        17. Build phases
        18. Alternative build servers
        19. Collating quality measures
        20. About build status visualization
        21. Taking build errors seriously
        22. Robustness
        23. Summary
      13. 6. Testing the Code
        1. Manual testing
        2. Pros and cons with test automation
        3. Unit testing
        4. JUnit in general and JUnit in particular
          1. A JUnit example
        5. Mocking
        6. Test Coverage
        7. Automated integration testing
          1. Docker in automated testing
          2. Arquillian
        8. Performance testing
        9. Automated acceptance testing
        10. Automated GUI testing
        11. Integrating Selenium tests in Jenkins
        12. JavaScript testing
        13. Testing backend integration points
        14. Test-driven development
        15. REPL-driven development
        16. A complete test automation scenario
          1. Manually testing our web application
          2. Running the automated test
          3. Finding a bug
          4. Test walkthrough
          5. Handling tricky dependencies with Docker
        17. Summary
      14. 7. Deploying the Code
        1. Why are there so many deployment systems?
          1. Configuring the base OS
          2. Describing clusters
          3. Delivering packages to a system
        2. Virtualization stacks
        3. Executing code on the client
          1. A note about the exercises
        4. The Puppet master and Puppet agents
        5. Ansible
        6. PalletOps
        7. Deploying with Chef
        8. Deploying with SaltStack
        9. Salt versus Ansible versus Puppet versus PalletOps execution models
        10. Vagrant
        11. Deploying with Docker
        12. Comparison tables
        13. Cloud solutions
        14. AWS
        15. Azure
        16. Summary
      15. 8. Monitoring the Code
        1. Nagios
        2. Munin
        3. Ganglia
        4. Graphite
        5. Log handling
          1. Client-side logging libraries
          2. The ELK stack
        6. Summary
      16. 9. Issue Tracking
        1. What are issue trackers used for?
        2. Some examples of workflows and issues
        3. What do we need from an issue tracker?
        4. Problems with issue tracker proliferation
        5. All the trackers
          1. Bugzilla
          2. Trac
          3. Redmine
          4. The GitLab issue tracker
          5. Jira
        6. Summary
      17. 10. The Internet of Things and DevOps
        1. Introducing the IoT and DevOps
        2. The future of the IoT according to the market
        3. Machine-to-machine communication
        4. IoT deployment affects software architecture
        5. IoT deployment security
        6. Okay, but what about DevOps and the IoT again?
        7. A hands-on lab with an IoT device for DevOps
        8. Summary
      18. Index