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 a faster pace.
Development and operations teams are not isolated and considered separate teams in a DevOps environment. These teams are merged into a single team where engineers work across the full development life-cycle utilizing a broad range of skills that are not specific to any single function. Automation and creating processes that integrate development and operations efforts are a core attribute of a well run DevOps team. The benefits of utilizing DevOps to manage engineering efforts are:
- Speed – move faster to help your customers realize value, adapt to changing markets, and grow more efficiently.
- Rapid delivery – increase the frequency of releases so you can innovate and improve your products and build a competitive advantage.
- Reliability – ensure the quality of application builds and infrastructure deployment changes so you can reliably deliver products at a fast pace while maintaining high quality for customers.
- Scale – automation and consistency help you manage complex or changing systems with reduced risk.
- Improved collaboration – build a more effective team with a DevOps cultural model that emphasizes ownership and accountability. Share responsibilities and combine workflows.
- Security – move quickly while retaining control and compliance. Using infrastructure as code allows you to track policy changes and track compliance at scale.
Continuous Integration/Continuous Delivery (CI/CD)
Merging code changes into a central repository while doing security/compliance checks, validating bug fixes with unit testing, and validating performance can all be managed in an automated fashion that allows developers and operations to focus more on improving your product. Orchestrating tools, processes, and workflows requires time up front but in the end will allow teams to be the most effective and ultimately provide the highest value.
Continuous delivery is a software development practice where code changes are automatically built, tested, and prepared for release to production. Efficient DevOps teams will always have a production ready package available with the latest code revisions applied that have been rigorously tested and validated using automated methods.
The approach of building one application with a single purpose creates issues when trying to reuse application code in other projects and applications. Using a micro services system architecture allows you to build products using a collection of smaller, single purpose services that can be reused by any application. Utilizing the cloud leverage micro services opens up new possibilities for developers and infrastructure teams by allowing them to focus on creating new products instead of re-inventing single purpose applications.
Infrastructure as Code
Infrastructure as code is a practice in which infrastructure is provisioned and managed using code and software development techniques, such as version control and continuous integration. The cloud’s API-driven model enables developers and system administrators to interact with infrastructure programmatically, and at scale, instead of needing to manually set up and configure resources. Thus, engineers can interface with infrastructure using code-based tools and treat infrastructure in a manner similar to how they treat application code. Because they are defined by code, infrastructure and servers can quickly be deployed using standardized patterns, updated with the latest patches and versions, or duplicated in repeatable ways.
Developers and system administrators use code to automate operating system and host configuration, operational tasks, and more. The use of code makes configuration changes repeatable and standardized. It frees developers and systems administrators from manually configuring operating systems, system applications, or server software.
Policy as Code
With infrastructure and its configuration codified with the cloud, organizations can monitor and enforce compliance dynamically and at scale. Infrastructure that is described by code can thus be tracked, validated, and reconfigured in an automated way. This makes it easier for organizations to govern changes over resources and ensure that security measures are properly enforced in a distributed manner (e.g. information security or compliance with PCI-DSS or HIPAA). This allows teams within an organization to move at higher velocity since non-compliant resources can be automatically flagged for further investigation or even automatically brought back into compliance.