Modern application development using agile development and DevOps techniques is growing in acceptance across all types of IT environments. The reason for the widespread adoption of agile and DevOps is that it improves collaboration and delivers a faster return on investment for application development.
Implementing DevOps requires new technologies that automate the software development lifecycle (SDLC), but it also requires a shift in organizational mindset. That is, DevOps success requires teams cooperating and collaborating throughout the organization, from individual contributors to upper-level managers, from programmers to administrators, from IT experts to business subject matter experts. Achieving this cooperative environment is usually more difficult than implementing technology and every organization will have different challenges and methods of bringing disparate pieces of the company to work seamlessly together.
Nevertheless, technology is important, too. Understanding the multiple software components that comprise a DevOps implementation can be confusing. And there are gaps in the technology that are only now being filled, specifically in terms of supporting database access and operations.
Let’s take a look at some of the key enablement components used to automate DevOps processes.
Processes and Software for Automating the DevOps Pipeline
A key aspect of adopting a DevOps approach is that it enables you to move faster. Automating the myriad of processes required during software development and operations can increase speed and thereby enable faster development.
To achieve this speed, organizations implement a DevOps toolchain. A toolchain is the set of programming tools that are used to perform a complex software development task or to create a software product.[1] The software tools that comprise a toolchain typically are executed sequentially with the output or state of one tool becoming the input for the next.
A DevOps toolchain, therefore, is a set of tools that interoperate with one another to aid in the delivery, development, and management of software applications throughout the SDLC. With this in mind, let’s take a look at some of the most popular automation activities and software used in a DevOps toolchain.
Orchestration
An orchestration tool is a key element of the DevOps toolchain. Orchestration enables the automation of coordinating and managing a complex SDLC. Automation typically refers to a single task or capability. Orchestration, on the other hand, is used to automate a complex, multi-step process. The goal of orchestration is to streamline and optimize frequent, repeatable processes to ensure accurate, speedier deployment of software.
The orchestration tool drives the entire DevOps process and is used to integrate and automate the SDLC. Examples of popular orchestration tools include Jenkins and XebiaLabs XL Release.
Continuous Integration and Delivery
Continuous Integration (CI) and Continuous Delivery (CD) are important components of the DevOps toolchain. Typically CI and CD are implemented into collaboration tools that provide a dashboard for the integration and delivery of software. Bamboo and Jenkins offer CI and CD capabilities.
Configuration Management
Tools that deliver configuration and resource management automate the maintenance of your systems. Keeping your software infrastructure in a consistent state. This can include servers, storage, networking, and software, with the goal of managing the environment in a known, desired state. Examples of configuration management tools include Chef, Ansible, and Puppet.
Source Control
The concept of source control is as old as software development. The general idea is for software to manage who can change code, who is changing code, and track those changes. It enables developers to work collectively on a complex software project without impacting code changes other developers are making.
Source control tools are at the foundation of the SDLC in DevOps as they centralize the storage and management of code. GitHub and Assembla are two popular examples of DevOps version control tools.
Collaboration and Tracking
Collaboration tools aid in the scheduling and tracking of code sprints by delivering transparency to the process for all stakeholders. Many different types of tools can fall into this category, including communication, project management, and service management software. Tools that let developers catalog and track issues help to speed delivery by improving the response to taking corrective action. Remedy, ServiceNow, and Jira are examples of popular collaboration and tracking tools.
Testing
Whenever code is being written, it must also be tested. Automated software testing tools can improve the speed and quality of software by quickly identifying defects and validating the accuracy of code. Selenium, Mocha, and Ranorex are examples of testing software.
Deployment
DevOps tools for deployment automate the migration of application code throughout your environments. Such tools are designed to facilitate rapid feedback and continuous delivery in agile development while providing the audit trails, versioning, and approvals needed in production. Examples of popular deployment tools include IBM UrbanCode Deploy and XebiaLabs XL Deploy.
Containers
A container is a standard unit of software that packages up code and all its dependencies so the application runs quickly and reliably from one computing environment to another.[2] Using a container, you can incorporate everything required to run an application to enable it to be portable, without being impacted by differences across multiple environments. Docker is the most popular container software. Kubernetes is frequently used with Docker as a container orchestration system that automates application deployment, scaling, and management.
Monitoring
Powerful monitoring software that can oversee the performance and operation of applications and services is a crucial component of a DevOps pipeline. There are many types of monitoring software. Monitoring is essential for the IT infrastructure such as the operating system, network, and database; the end-user response and experience; and for the performance and functionality of the actual applications themselves. Advanced monitoring solutions can even be proactive in terms of suggesting and implementing corrective actions to resolve issues. Nagios and Raygun are examples of popular DevOps monitoring tools.
Putting It All Together
The key to success with automating DevOps is a well-constructed toolchain for automating all of the afore-mentioned processes in an integrated and cooperative manner. If you have been an IT professional for any length of time, most of the categories we just discussed will not be new to you. What is new, however, is likely the integration of the tools hooked up together to work in concert for the purpose of delivering application software quickly and accurately.
You may have noticed that the emphasis of the automated toolchain above is on application development and code management, more so than database administration and management.
Additionally, the list of activities we just reviewed is not comprehensive. A glaring omission is the lack of integration with your database management systems. What is needed is more automation and integration of DBA tasks and processes.
To be successful at DevOps, when the applications access databases (which is most of them), you will need tools that automate database administration. These DBA tasks include:
- Database provisioning and configuration
- Automated backups and recovery testing
- Database design and modeling
- SQL coding for performance
- SQL testing and performance
- Test data management
- Database change management
Some of these DBA tasks have been automated over time, regardless of their integration into DevOps. Whether using purchased tools or customized scripts, many DBA tasks have at least some automated capabilities, such as performance alerts, script generation for making changes, and the creation of backup and recovery scripts.
Simple automation, though useful, is no longer sufficient for effective participation with DevOps. DBA tools also need to be integrated into the DevOps toolchain, either natively in the product or using orchestration. This can be somewhat complex if the tool was not built for the DevOps environment, but more and more tools are being augmented to integrate into DevOps better, and there are also some new DBA tools built specifically with DevOps integration in mind.
The Bottom Line
The bottom line, though, is that automation is crucial for DevOps success, and this means DBA automation as well as the more typical SDLC automation associated with DevOps.
© 2020, Mullins Consulting, Inc.
[1] https://en.wikipedia.org/wiki/Toolchain
[2] https://www.docker.com/resources/what-container