DevOps (a clipped compound of “development” and “operations”) is a software development methodology that combines software development (Dev) with information technology operations (Ops). The goal of DevOps is to shorten the systems development life cycle while delivering features, fixes, and updates frequently in close alignment with business objectives.
The goals of DevOps span the entire delivery pipeline. They include:
- Improved deployment frequency;
- Faster time to market;
- Lower failure rate of new releases;
- Shortened lead time between fixes;
- Faster mean time to recovery (in the event of a new release crashing or otherwise disabling the current system).
Simple processes become increasingly programmable and dynamic, using a DevOps approach. DevOps aims to maximize the predictability, efficiency, security, and maintainability of operational processes. Very often, automation supports this objective.
DevOps integration targets product delivery, continuous testing, quality testing, feature development, and maintenance releases in order to improve reliability and security and provide faster development and deployment cycles. Many of the ideas (and people) involved in DevOps came from the enterprise systems management and agile software development movements.
DevOps automation is a software engineering practice, which aims at eliminating manual hand-offs, aligning siloed Dev and Ops departments, and delivering release-driven systems through the utilization of automation tools in development, test, stage, and production environments. DevOps automation can be achieved by repackaging platforms, systems, and applications into reusable building blocks through the use of technologies such as virtual machines and containerization.
DevOps Tutorials – Infrastructure as code
Infrastructure as code (IaC) is the process of managing and provisioning computer data centers through machine-readable definition files, rather than physical hardware configuration or interactive configuration tools. The IT infrastructure managed by this comprises both physical equipment such as bare-metal servers as well as virtual machines and associated configuration resources. The definitions may be in a version control system. It can use either scripts or declarative definitions, rather than manual processes, but the term is more often used to promote declarative approaches.
IaC approaches are promoted for cloud computing, which is sometimes marketed as infrastructure as a service (IaaS). IaC supports IaaS, but should not be confused with it.
Ansible is open source software that automates software provisioning, configuration management, and application deployment. Ansible connects via SSH, remote PowerShell or via other remote APIs.
Puppet is an open-source software configuration management tool. It runs on many Unix-like systems as well as on Microsoft Windows, and includes its own declarative language to describe system configuration.
Chef is a a company and the name of a configuration management tool written in Ruby and Erlang. It uses a pure-Ruby, domain-specific language (DSL) for writing system configuration “recipes”.
DevOps Tutorials – CI/CD
Continuous integration (CI) is the practice of merging all developer working copies to a shared mainline several times a day. Grady Booch first proposed the term CI in his 1991 method, although he did not advocate integrating several times a day. Extreme programming (XP) adopted the concept of CI and did advocate integrating more than once per day – perhaps as many as tens of times per day.
Continuous delivery (CD or CDE) is a software engineering approach in which teams produce software in short cycles, ensuring that the software can be reliably released at any time and, when releasing the software, doing so manually. It aims at building, testing, and releasing software with greater speed and frequency. The approach helps reduce the cost, time, and risk of delivering changes by allowing for more incremental updates to applications in production. A straightforward and repeatable deployment process is important for continuous delivery.
CD contrasts with continuous deployment, a similar approach in which software is also produced in short cycles but through automated deployments rather than manual ones.
Jenkins Docker Image Example
Jenkins is an open source automation server written in Java. Jenkins helps to automate the non-human part of the software development process, with continuous integration and facilitating technical aspects of continuous delivery. It is a server-based system that runs in servlet containers such as Apache Tomcat.
Shippable is a DevOps Assembly Lines Platform that helps developers and DevOps teams achieve CI/CD and make software releases frequent, predictable, and error-free. We do this by connecting all your DevOps tools and activities into a event-driven, stateful workflow.
Bamboo is a continuous integration and continuous deployment server developed by Atlassian. Although initially available both as an on-premises and cloud computing service, in May 2016 it was announced that the cloud version would be discontinued by end of January 2017.
DevOps Tutorials – Test automation
Test automation is the use of special software (separate from the software being tested) to control the execution of tests and the comparison of actual outcomes with predicted outcomes. Test automation can automate some repetitive but necessary tasks in a formalized testing process already in place, or perform additional testing that would be difficult to do manually. Test automation is critical for continuous delivery and continuous testing.
Selenium Tutorial for Beginners
Selenium is a portable software-testing framework for web applications. Selenium provides a playback (formerly also recording) tool for authoring tests without the need to learn a test scripting language (Selenium IDE). It also provides a test domain-specific language (Selenese) to write tests in a number of popular programming languages, including C#, Groovy, Java, Perl, PHP, Python, Ruby and Scala.
JMeter Tutorial for Load Testing – The ULTIMATE Guide
Apache JMeter is an Apache project that can be used as a load testing tool for analyzing and measuring the performance of a variety of services, with a focus on web applications.
JUnit Cucumber Example
Cucumber is a software tool used by computer programmers for testing other software. It runs automated acceptance tests written in a behavior-driven development (BDD) style. Central to the Cucumber BDD approach is its plain language parser called Gherkin. It allows expected software behaviors to be specified in a logical language that customers can understand. As such, Cucumber allows the execution of feature documentation written in business-facing text.
DevOps Tutorials – Containerization
Containerization is a system of inter-modal freight transport using inter-modal containers (also called shipping containers and ISO containers). The containers have standardized dimensions. They can be loaded and unloaded, stacked, transported efficiently over long distances, and transferred from one mode of transport to another—container ships, rail transport flatcars, and semi-trailer trucks—without being opened. The handling system is completely mechanized so that all handling is done with cranes and special forklift trucks. All containers are numbered and tracked using computerized systems.
Containerization originated several centuries ago but was not well developed or widely applied until after World War II, when it dramatically reduced the costs of transport, supported the post-war boom in international trade, and was a major element in globalization. Containerization did away with the manual sorting of most shipments and the need for warehousing. It displaced many thousands of dock workers who formerly handled break bulk cargo. Containerization also reduced congestion in ports, significantly shortened shipping time and reduced losses from damage and theft.
Containers can be made of weathering steel to minimize maintenance needs.
Docker Tutorial for Java Developers
Docker is a computer program that performs operating-system-level virtualization also known as containerization. Docker is used to run software packages called “containers”.
Rocket Software is a privately held software development firm founded in 1990. Rocket develops products in such fields as analytics, networks, data, storage, and enterprise software.
DevOps Tutorials – Orchestration
Orchestration is the automated configuration, coordination, and management of computer systems and software. A number of tools exist for automation of server configuration and management, including Ansible, Puppet, Salt and Terraform. Orchestration is often discussed in the context of service-oriented architecture, virtualization, provisioning, converged infrastructure and dynamic data-center topics. Orchestration in this sense is about aligning the business request with the applications, data, and infrastructure.
The main difference between a workflow “automation” and an “orchestration” (in the context of cloud computing) is that workflows are processed and completed as processes within a single domain for automation purposes, whereas orchestration includes a workflow and provides a directed action towards larger goals and objectives. In this context, and with the overall aim to achieve specific goals and objectives (described through quality of service parameters), for example, meet application performance goals using minimized cost and maximize application performance within budget constraints.
Kubernetes is an open-source container-orchestration system for automating deployment, scaling and management of containerized applications. It was originally designed by Google and is now maintained by the Cloud Native Computing Foundation. It aims to provide a “platform for automating deployment, scaling, and operations of application containers across clusters of hosts”. It works with a range of container tools, including Docker, since its first release.
Docker Swarm Tutorial
Docker Swarm is Docker’s native feature to support clustering of Docker machines. This enables multiple machines running Docker Engine to participate in a cluster, called Swarm.
Apache Mesos is an open-source project to manage computer clusters. It was developed at the University of California, Berkeley. Mesos uses Linux cgroups to provide isolation for CPU, memory, I/O and file system. Mesos is comparable to Google’s Borg scheduler, a highly secretive platform used internally to manage and distribute Google’s services.
DevOps Tutorials – Deployment
Software deployment is all of the activities that make a software system available for use. The general deployment process consists of several interrelated activities with possible transitions between them. These activities can occur at the producer side or at the consumer side or both. Because every software system is unique, the precise processes or procedures within each activity can hardly be defined. Therefore, “deployment” should be interpreted as a general process that has to be customized according to specific requirements or characteristics.
- Elastic Beanstalk
AWS Elastic Beanstalk is an orchestration service offered from Amazon Web Services for deploying infrastructure which orchestrates various AWS services, including EC2, S3, Simple Notification Service (SNS), CloudWatch, autoscaling, and Elastic Load Balancers.
Octopus is a software package for performing Kohn–Sham density functional theory (DFT) and time-dependent density functional theory (TDDFT) calculations. The code is written predominantly in Fortran, with some C and Perl. It is released under the GPL.
DevOps Tutorials – Measurement
Software measurement is a quantified attribute of a characteristic of a software product or the software process. It is a discipline within software engineering. The content of software measurement is defined and governed by ISO Standard ISO 15939 (software measurement process).
The primary measure of software is size. Software size is principally measured in function points. It can also be measured in lines of code, or specifically, source lines of code (SLOC) which is functional code excluding comments. Whilst measuring SLOC is interesting, it is more an indication of effort than functionality. Two developers could approach a functional challenge using different techniques, and one might need only write a few lines of code, and the other might need to write many times more lines to achieve the same functionality. The most reliable method for measuring software size is code agnostic, from the user’s point of view – in function points.
One method of software measurement is metrics that are analyzed against the code itself. These are called software metrics and including simple metrics, such as counting the number of lines in a single file, the number of files in an application, the number of functions in a file, etc. Such measurements have become a common software development practice. There are also more detailed metrics that help measure things like software complexity, Halstead, cohesion, and coupling.
New Relic is an American software analytics company based in San Francisco, California. New Relic’s technology, delivered in a software as a service (SaaS) model, was announced in 2013. It monitors Web and mobile applications in real-time with support for custom-built plugins to collect arbitrary data.
Kibana is an open source data visualization plugin for Elasticsearch. It provides visualization capabilities on top of the content indexed on an Elasticsearch cluster. Users can create bar, line and scatter plots, or pie charts and maps on top of large volumes of data.
Datadog is a monitoring service for cloud-scale applications, providing monitoring of servers, databases, tools, and services, through a SaaS-based data analytics platform.
DevOps Tutorials – ChatOps
ChatOps is a collaboration model that connects people, tools, process, and automation into a transparent workflow. This flow connects the work needed, the work happening, and the work done in a persistent location staffed by the people, bots, and related tools. The transparency tightens the feedback loop, improves information sharing, and enhances team collaboration. Not to mention team culture and cross-training.
Hubot is your friendly robot sidekick. Install him in your company to dramatically improve employee efficiency.
Lita is a chat bot written in Ruby. It connects with your favorite chat service and helps keep you efficient while having fun.
Errbot is a chatbot, a daemon that connects to your favorite chat service and brings your tools into the conversation.