Today I’d like to talk about DevOps, some of its core functions and the pain points we run into while implementing DevOps toolchains and methodologies. Finally I’d like to share an exciting new solution to unify and focus our efforts in creating a best-in-class IT organization.
Before we begin it’s important to understand what I mean when I say ‘DevOps’. I’m talking broadly about an Agile approach to rapidly releasing software in an iterative, test-driven manner by uniting the efforts of both Developers and SysAdmins/Operations teams.
DevOps isn’t a person or a role or a department – it’s a better way of going about developing, testing and releasing software and infrastructure.
In recent years we’ve seen an explosion in usage of old and new tools and methodologies surrounding the DevOps movement.
Enterprise IT Organizations realize DevOps practices like Continuous Delivery, use of Version Control Systems for production artifacts, Automated Acceptance Testing and System Monitoring all improve IT performance.
Strong IT performance is a competitive advantage that all companies need, whether it’s a startup trying to scale like a large organization or an industry giant trying to innovate at the speed of smaller companies.
DevOps is still a relatively new methodology, so without trying to fully define everything that it encompasses, I’d like to discuss some of the core functions that a successful DevOps practice might include, and then we’ll look at how those core functions coalesce to support rapid, iterative development.
Continuous Delivery is a methodology that focuses on making sure your software is always in a releasable state throughout it’s lifecycle. That means it’s theoretically ‘production ready’ any time it’s in the trunk or master branch of development.
Continuous Integration is a development practice whereby developers routinely merge their code into trunk or the master branch in a Version Control System, ideally multiple times per day or per week. Each new feature or code change triggers a set of quick tests to discover bugs and regressions and to report on the health of a given version of code.
Automated Acceptance Testing
You’ve probably heard of Test Driven Development or __Behaviour Driven Development __and these methodologies have gained wide acceptance in both Agile and DevOps circles as a means of proving out new features, ensuring compatibility and avoiding expensive production bugs. As a core part of continuous delivery, automated acceptance tests are written alongside new code to ensure that new features meet business requirements, to prove their validity and to ensure that existing features are protected against regressions. These tests are often run as part of an automated build and can function as gates for promotion through the various stages of the pipeline.
Version Control System
A prerequisite for __Continuous Integration _and_ Continuous Delivery __is that all code must be routinely checked into version control. This includes:
- Application code
- Application configurations
- System or platform configurations (infrastructure as code)
- Automated Unit Tests / Integration Tests or Auditing tests
Comprehensive __Version Control __provides the foundation of a reliable, repeatable, low-risk process for performing continuous deployments and for restoring service in the event of failure.
You might be thinking, “We’re currently using a solid chunk of these tools and processes – it looks like we’re already ‘Doing Devops’.”
So what’s the problem here?
Well, as we can see, there are many tools in our arsenal that we can use to develop and deploy GA applications and services within the DevOps methodology, but the problem of logically and consistently gluing all these tools and processes together remains.
Often there is no centrally agreed upon tool chain for fully proving out a new application, or the responsibility for bridging the gaps between each different toolset or development stage is left up to various development and operations teams.
And what about __our existing investment __in tools and processes? Often an enterprise IT organization has spent millions in training and licensing of tools already. We want to find a effective and pain-free way to unite all parts of the developmental pipeline without throwing away useful tools and processes.
The solution I’m excited to talk to you about today is VMWare’s Code Stream, available as an appliance in the vRealize Suite.
Code Stream is an application release automation and continuous delivery solution that allows developers and operations teams to release software more frequently and efficiently by marrying the SDLC tools and processes into a single, logical build pipeline.
Code Stream enables continuous delivery by automating the tasks required to build, test and deploy at each stage in the release delivery pipeline, including custom defined gating rules between stages.
To automate delivery, Code Stream integrates with and orchestrates existing SDLC tools.
At its core, Code Stream can be understood by breaking it down into three functional modules:
Pipeline Automation, Artifact Management, and the Release Dashboard.
Code Stream’s __Pipeline Automation __module allows your team to model your release process, configure workflow tasks and define gates around your organization’s policies governing build and deployment processes.
Keeping your increasing number of artifacts stored and version controlled is an important part of the DevOps pipeline and Code Stream’s Artifact Management module supports the modeling and resolution of these artifacts in concert with associated build versions and environments. This allows efficient management of binary artifacts and ensures that correct versions are retrieved and deployed.
Often the developers and sysdmins are well aware of the current state of a given application, but with increasing numbers of builds and deployments across multiple organizations or business units, it’s important to have a central location to view and monitor all applications at each of their stages in the pipeline, especially for administrators and directors.
Code Stream’s Release Dashboard module provides a summary view of all active pipelines as well as an end-to-end view of each individual pipeline. This unified view allows for open lines of communication between teams, enhanced collaboration, earlier bug identification and gives relevant stakeholders the comfort of knowing exactly where an application sits at a given time.
Extensibility & Leveraging
While Code Stream does a great job of uniting the core parts of a performant DevOps pipeline, one of the key strengths of this suite is that it leverages__ existing tools__ to do so, obviating the need to invest in new tools and training. Code Stream, while providing some sane defaults, remains agnostic about an organization’s specific choices around artifact and repository tools like Artifactory, Yum and Git or configuration management tools like Puppet, Chef, Salt or Ansible. Along with this powerful flexibility, a public REST interface is offered, allowing programmatic integration with other existing suites.
While this is a fairly high level overview, we can see the benefits that a standardized toolchain can bring in organizing and unifying the efforts of an IT organizations implementation of DevOps.
If you’d like to become more responsive to business needs, deliver applications more quickly, automate deployment configurations to ensure reliability, leverage your already existing toolsets and improve governance and visibility, then let’s connect and talk further about how VMWare’s vRealize Code Stream can take your company to the next Levvel.