DevOps Principles (part2)
So far we have defined what is devops and some of DevOps principles in previous post.
This is the continuation of the previous post. Please go through below links if we miss the previous posts.
As said in previous posts we can write scripts/programs for automatically create infrastructure and somehow we can configure small changes, but if we want to take up large infrastructure with lots of set of servers with lots of configuration items.
So the process to make sure each server is in desired state i.e configured as we defined with timely manner is call Configuration management. It will manages and make all of our servers will be in desired state.
This Configuration Management enables us to version control for our configurable infrastructure. We will get lot benefits like automated framework, Cost effective and also idempotent in behavior.
But for these configuration items we can’t rely on scripts since requirements are dynamic and frequent changes in scripts may affect other resources. So there are bunch of tools available especially for server configuration management.
Popular choices are Puppet, Chef, Ansible.
Continuous Testing is the process of executing all of our tests automatically as part of our continuous delivery. As discussed in previous posts we require immediate feedback for frequent delivery and this is achieved through Continuous Testing.
We have to integrate our functional testing into CI/CD so that automatically tests are executed.
Developers are also responsible for writing unit tests which will enables continuous testing.
Teams have to configure a Continuous Integration environment to use the appropriate tests to be executed.
I wonder if I wrote a single line of code and that should be reflected in live application which is awesome. And Continuous Deployment enables us our changes should reflect in our environments without manual interventions.
The process of Deploying application with new changes to desired environments staging, QA, and production and which will ensure that application undergo all unit tests, UA (User Acceptance) tests and are passed in each environment.
So it is an extension of Continuous Integration aiming to minimizing the lead time (time elapsed to reflect changes in production when developer commit the code).
To achieve Continuous Deployment we can use some popular tools such as Ansible, Codeship, Jenkins, Circle CI, Python fabric etc.
Hurray we achieved everything above i.e writing our new code and according to our changes infrastructure is provided and configured, next all tests are passed so that changes are deployed to production. We may think that yeah everything is done, now we don’t need to do anything but we need to do one more thing which is very important and that is Continuous Monitoring.
After successful deployments we are required to monitor our resources and as well as our applications so that we can improve continuously. So we need to monitor our infrastructure and monitor logs of our application to identify improvements and changes.
There are lot of tools available in market to monitor our different resources, some of them are
Nagios, Zabbix, Sensu, New Relic, Prometheus, AWS CloudWatch, Graphana and AppDynamics etc.
These posts/articles gives an overview of what is devops and what are common principles or best practices to follow to our software delivery. If you miss any of the posts you can find the links below.