DevOps
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.