Introduction

DevOps is a set of practises that combines software development (Dev) and IT operations (Ops). It aims to shorten the systems development life cycle and provide continuous delivery with high software quality. DevOps is complementary with Agile software development; several DevOps aspects came from the Agile methodology. (Wikipedia)

DevOps lifecycle

It consists of 5 phases that create a loop:

  • Continuous development
  • Continuous testing
  • Continuous integration
  • Continuous deployment
  • Continuous monitoring

Software development

Software development has 7 stages:

  • Plan
  • Create
  • Verify
  • Package
  • Release
  • Configure
  • Monitor

Agile model

  • Analyze
  • Plan
  • Design
  • Build
  • Test
  • Review
  • Launch

Working with Scrum

There is a product backlog that has all the features to be implemented.

Every 2-4 weeks a sprint plan is made, and the selected features put in the respective sprint backlog.

Every time a sprint ends, there is a retrospective. That is a team meeting in which everyone gets to talk about how everything is going and share their thoughts.

Agile and DevOps

Both agile methodologies and DevOps have things in common:

  • Early and valuable deliveries of software
  • Automate everything
  • Improve team integration

DASA - 6 principles of DevOps

  • Customer-centric action
  • Create with the end in mind
  • End-to-end responsibility
  • Cross-functional autonomous teams
  • Continuous improvement
  • Automate everything you can

DevOps tools

Here is a list of some tools (there are many, many more available) used in DevOps.

For source code management:

  • Git
  • GitHub
  • GitLab

For software builds:

  • Gradle
  • Maven

For testing:

  • Selenium
  • Junit
  • Appium

For integration:

  • Jenkins
  • Bamboo

For deployment:

  • Terraform
  • Ansible
  • Chef
  • Puppet

For monitoring:

  • Nagios
  • Splunk

For containerization:

  • Docker
  • Kubernetes

Configuration management

Configuration management is a system engineering method that ensures a product’s characteristics remain consistent during its life cycle.

It provides a configuration model of the services, assets and infrastructure by recording the relationships between service assets and configuration items.

Configuration management tools

They enable deployments to be:

  • Faster
  • Scalable
  • Repeatable
  • Predictable

Some popular tools are:

  • Saltstack: Python based, open source tool used to remotely manage configuration items.
  • Ansible: Python based, agentless tool.
  • Chef: Ruby based configuration management tool that has integration with most of the cloud providers.
  • Puppet: Ruby DSL based tool that enables the use to manage software, systems and network configuration items.