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.

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

Product information

  • Title: Practical DevOps
  • Author(s): Joakim Verona
  • Release date: February 2016
  • Publisher(s): Packt Publishing
  • ISBN: 9781785882876