In the previous blog ‘DevOps – Achieving Success Through Organizational Change’ we learned about basics of DevOps and its advantages in software development. The DevOps movement drives IT departments into improving collaboration between developers, sysadmins, and testers. It also improves deployment rates, defect detection, and feature delivery. But technology leaders are learning that DevOps is above all an organizational change. “Doing DevOps” is more about changing processes and simplifying workflows between departments than it is about employing new tools. Thus, there will never be an all-encompassing DevOps tool.
Tools for DevOps Adoption
But a software development process can’t work efficiently without right tools. Similarly in the case of DevOps, you can always benefit from the right set of tools. These tools help in information sharing, process automation, reduction in deployment time and ultimately in continuous deployment. The most common DevOps tools are continuous integration, configuration management platforms, and containerization tools. Continuous integration tools are used to automate the testing and feedback process and build a document trail. These are used to immediately identify and correct defects in the code base. Configuration management tools are primarily used for tracking and controlling changes in the software. These extract infrastructure components from the code for automation and maintain the continuous delivery of software. Others tools help in standardizing builds, improve collaboration between developers and sysadmins, or monitor systems.
5 Set of DevOps Tools
The DevOps tools can be categorized in five groups depending on its purpose in the particular stage of DevOps lifecycle
1. Continuous Integration: Jenkins, Travis, TeamCity
2. Configuration Management: Puppet, Chef, Ansible, CFengine
3. Continuous Inspection: Sonarqube, HP Fortify, Coverity
4. Containerization: Vagrant, Docker
5. Virtualization: Amazon EC2, VMWare, Microsoft Hyper-V
Continuous Integration Tools
Jenkins Jenkins is an open-source continuous integration server written in Java. It helps developers in building and testing software continuously and monitors externally-run jobs such as cron jobs and procmail jobs. It increases the scale of automation and is quickly gaining popularity in DevOps circles. Jenkins requires little maintenance and has built-in GUI tool for easy updates. Jenkins provides customized solution as there are over 400 plugins to support building and testing virtually any project.
TeamCity TeamCity (TC) is a major all-in-one, extensible, continuous integration server. Written in Java, the platform is made available through the JetBrains. The platform is supported in other frameworks and languages by 100 ready to use plugins. TeamCity installation is really simple and has different installation packages for different operating systems.
Travis CI is an open-source hosted, distributed continuous integration service used to build and test projects hosted at GitHub. Travis CI can be configured to run the tests on a range of different machines, using the different software installed.
Configuration Management Tools
Puppet is arguably the most well-established of these configuration management platforms. It tends to be favored by organizations whose DevOps push was driven by ops people who like the simplicity of its declarative programming language and gentler learning curve. The Web UI works well for management but does not allow flexibility in configuration of modules. The reporting tools are well developed, providing deep details on how agents are behaving and what changes have been made.
Chef is a systems and cloud infrastructure framework that automates the building, deploying, and management of infrastructure via short, repeatable scripts called “recipes.” Chef tends to offer a greater degree of flexibility than Puppet for those who have the skills to program infrastructure via this Ruby-driven platform. As a result, Chef tends to be well-loved by organizations whose DevOps programs are more heavily championed by the developers.
Ansible built on Python, combines multi-node software deployment, ad-hoc task execution, and configuration management. Ansible is more suited for a larger or more homogenous infrastructure. It uses an agentless architecture. Ansible can be run from the command line without the use of configuration files for simple tasks, such as making sure a service is running, or to trigger updates and reboots.
Continuous Inspection Tools
SonarQube is the central place to manage code quality. It offers visual reporting on and across projects and enabling to replay the past code to analyze metrics evolution. It is written in Java but is able to analyze code in about 20 different programming languages.
HP Fortify Static Code Analyzer (SCA) helps verify that your software is trustworthy, reduce costs, increase productivity and implement secure coding best practices. It scans source code, identifies root causes of software security vulnerabilities and correlates and prioritizes results. Thus providing line–of–code guidance for closing gaps in your security.
DevOps teams use this containerization tool as an open platform that makes it easier for developers and sysadmins to push code from development to production without using different, clashing environments during the entire application lifecycle. Docker brings portability to applications via its containerization technology, wherein applications run in self-contained units that can be moved across platforms. It offers standardizations to keep the operations folks happy and the flexibility to use just about any language or tool chain to keep the development team satisfied.
Vagrant is an open source product described as Virtual Machine (VM) manager. It is a wonderful tool that allows you to script and package the VM config and the provisioning setup with multiple VMs each with their own configurations managed with puppet and/or chef.
Amazon Elastic Compute Cloud (Amazon EC2) provides virtualization using scalable computing capacity in the Amazon Web Services (AWS) cloud. Amazon EC2 decreases capital expenditure by eliminating the investment in hardware upfront cost. Businesses can use virtual servers, configure security and networking and manage storage.
VMWare provides virtualization through a gamut of products. It’s product vSphere virtualizes your server resources and provide critical capacity and performance management capabilities. VMWare’s NSX virtualization and Virtual SAN provides network virtualization and software-defined storage respectively.
At Maruti Techlabs, we have successfully incorporated TeamCity as continuous integration tool and Sonarqube as inspection tool in the respective steps of DevOps. We use Amazon Web Services (AWS) as virtualization tool for cloud computing and launching virtual servers.