A Brief on DevOps


"The most powerful tool we have as developers is automation." – Scott Hanselman

In a simpler term, DevOps is a ‘Soch’ (a philosophy) which encourages frequent feedbacks from customers and accordingly make changes to plan, design or deliverables. It discourages HiPPOs (Highest Paid Person’s Opinion) culture in the company. For frequent feedbacks, release should be available to customers frequently in the production environment. This implies, goal of DevOps is to minimize time elapsed from ‘acceptance of change request’ to ‘availability of quality code to customers’. Companies can achieve nirvana in DevOps by automating everything in their delivery process. But DevOps is not all about automation, some companies can minimize the deployment time by just changing the culture (e.g. removing red tapes during handover of work to different teams, a concept of Go-NoGo manual approval).

What is DevOps?
DevOps is the combination of cultural philosophies, practices, and tools that increases an organization’s ability to deliver applications and services at high velocity. This speed enables organizations to better serve their customers and compete more effectively in the market. DevOps moves the focus from development to delivery—a subtle but important distinction.
What is DevOps?


History of DevOps
At the Agile 2008 conference, Andrew Shafer and Patrick Debois presented on "Agile Infrastructure". The term DevOps was popularized through a series of "devopsdays" starting in 2009 in Belgium. Since then, there have been devopsdays conferences, held in many countries, worldwide. History of DevOps
The Incredible True Story of How DevOps Got Its Name


Practices for Effective DevOps
To realize the goals of effective collaboration & smoother operation, below practices can be adopted
»  Active participation of all stakeholders (developers, operations staff, testers, support people)
»  Automated regression testing, extending to TDD & BDD
»  Integrated Configuration Management, where developers not only focus on solution level but also should consider production configuration issues and rest of organization’s infrastructures (test environments)
»  Integrated Change Management, where development team should work closely with Operation & testing team to understand the implication of any technology changes at organization level
»  Implementing Continuous Integration with automated regression testing and static code analysis
»  Continuous deployment planning along with operation, testing and support team
»  Continuous deployment from one sandbox environment to next one until production environment
»  Support of developers during the critical production issues from beginning
»  Application monitoring other than infrastructure monitoring
»  Real time insights to organization’s governance team through automated dashboard
Top 10 Practices for Effective DevOps


Continuous Delivery Tools Chain
The key to an effective DevOps implementation is understanding your tools, and implementing an effective continuous delivery tool chain

CD ChainNotesTools
Orchestration and Deployment Pipeline Visualization Deployment pipeline steps can be built and visualized by integrating the entire existing tool chain. It helps team to detect delays & wait times between each steps. ElectricCommander, CA LISA, IBM UrbanCode, XebiaLabs XL
Version Control Source code and configuration files are version controlled. All text based files, getting changed by team members should be added into the version control Git, Mercurial, Perforce, Subversion, TFS, Bazaar, CVS
Continuous Integration Integrate new code with stable main release line and alert stakeholders if it causes issues in the final product Jenkins, Travis CI, ThoughtWorks GO, CircleCI, TeamCity, Bamboo, Gitlab CI
Continuous Inspection Automatic & continuous audit of code quality in terms of maintainability, coding standards, future bugs etc. SonarQube, CheckStyle, JavaNCSS, CPD, FindBugs, PMD
Artifact Management Focus is on packaged artifacts like application assets, virtual image, configuration data, infrastructure code etc. Artifacts are identifiable, versioned and immutable. Package metadata identifies how and when it was tested and against which environment Nexus, Artifactory, Archiva
Test Automation The goal should be to automate regression suite completely except scenarios, which can’t be automated. JMeter, Selenium/WebDriver, Cucumber (BDD), RSpec (BDD), SpecFlow (BDD), LoadUI (Performance), PageSpeed (Performance), Netem (Network Emulation), SoapUI (Web Services)
Environment Automation Test environment can be brought up on-demand using automation tool, which can provision VMs and applying configuration template. Vagrant, Docker, Packer
Server Configuration and Deployment Management Tools are used to deploy binaries into the required environment(s). Team needs to ensure that process is fully automated and must have capability of rolling back to previous stable version w/o any issues Ansible, Chef, Puppet, SaltStack
Monitoring and Reporting Log files from all system can be aggregated at centralized location, should be indexed and searchable from web browser

Real time insights to organization’s governance team through automated dashboard
Application: New Relic, Dynatrace, AppDynamics

Infrastructure: Nagios, Sensu

Logs: Splunk, Fluentd, Heapster, Logstash, Prometheus, WeaveScope

The Continuous Delivery Toolchain


Comments

Popular posts from this blog

Performance Test Run Report Template

Understanding Blockchain

Bugs Management in Agile Project