A Battle-Tested DevOps Platform
Improving Your Development Workflow
A fellow software developer asked a relatively important question on Reddit a while back: How can we improve our development workflow?
The question was backed by a detailed description of their current workflow and the original poster's ideas about the methods they should be using. People contributed very informative comments to the discussion, so we recommend this thread to anyone interested in creating more effective software development workflows.
The poster wasn't sure how to introduce DevOps to his organization and what tools were necessary to do so successfully. Obviously, there is no shortage of tools out there that have their role to play as you build out your DevOps pipeline, but in this post, we'll focus on building a DevOps platform on top of which you'll be able to layer your other tools.
DevOps in Short
To truly succeed at DevOps, you have to embrace an entire culture — one that spans various departments in your organization as well as the entire lifecycle of your software. And that's the short version of it.
Having the proper tools in place paves the way to earning the right to say you do DevOps. But tools alone won’t magically turn you into a DevOps organization overnight. Having said that, the proper tools are essential to making DevOps work, the primary goal being that your software in development is ready to be deployed at all times.
The longer version?
You need to get your Ops team on board.
That’s because DevOps done right breaks down traditional organizational silos. But it also requires Ops to embrace the very thing they’re conditioned to disdain: change. And yes, breaking down communication barriers between developers, IT, testers, and business executives presents you with a legitimate obstacle to adoption.
But if you succeed, you reap the benefits of having a single, seamless entity where increased communication leads to better collaboration and creates added value for the customer — faster.
The Evolution from Waterfall to Agile to DevOps
In the Waterfall model, you first define the outcome according to customer needs, and then the development process runs until a "finished" product is released. The biggest problem with this approach is that the customer's needs usually change during the development phase. You end up delivering software that doesn't meet their shifting needs, or you spend a lot of time and money changing your plans mid-development.
The next step in the evolution is the Agile model. In Agile, the idea is to develop software in small iterations and be able to adapt to your customer's changing needs faster than in Waterfall. However, this model has its hitches as well:
- Budget goals and deadlines are often missed.
- Completed software components are incompatible.
- New features break old functions.
- Huge silos keep development and IT operations create animosity.
DevOps fulfills the promise of Agile, bringing the same kind of Agility to more parts of the development and deployment process. With continuous integration (CI) and continuous delivery (CD) pipelines, you can release often, the releases actually work, and your products meet customer needs — even exceed expectations! Cross-departmental cooperation ensures tools and processes streamline development instead of forming bottlenecks. With the right tools, you can enable automation and increase transparency throughout the duration of the project.
The picture above represents how a DevOps production model works.
As you can see, business needs are the starting point for the DevOps model: understanding your customer's needs and planning work accordingly. Once you define an initial set of requirements, software development can start. Production then runs continuously: automated testing and deployment allows new versions to be released in short intervals. And the whole cycle is traceable to ensure that everything runs smoothly.
If — and when — needs change during development, they are easy to implement without starting over from scratch. The revised needs are communicated and documented in the requirements management tool, and from there they get delivered to the development team so they can implement the change. Once again, automation does its thing to ensure that each new change works once integrated into the software and can be deployed fast.
To ensure a constant feedback loop between stakeholders, effective communication tools are vital.
Building a Battle-Tested DevOps Pipeline
There is no mythical behemoth that can take care of every single aspect of your DevOps pipeline. To fully support your nascent DevOps culture, you need a platform that supports multiple tools.
The DevOps platform presented below is battle-tested in development organizations that have thousands of users in industries ranging from finance to logistics.
Starting with business needs means you need a tool that can handle both requirements management and general project management. Perforce offers a complete suite of Agile project management tools including requirements management, issue management, and test case management, and it integrates seamlessly with Jira.
When it comes to development, you'll be using a variety of tools. For version control, Helix TeamHub is the best choice because it allows you to:
- Delegate IT’s tasks to project owners with self-service project administration.
- Solve problems and communicate solutions using project-based wikis and other collaboration tools.
- Host multiple repository types under a single platform including Git, SVN, Mercurial, Maven, Ivy, and Docker container registries.
- Integrate with all of the tools mentioned in this article to implement your DevOps pipeline.
- Manage source code, large binary files, and build artifacts under a single platform using Helix TeamHub Enterprise with Helix Core.
- Run 40-80% faster builds in Helix TeamHub Enterprise, powered by Helix4Git.
Once you have a version control system robust enough to power your DevOps initiative and a development environment in place, it’s time to consider what you’ll do as new code rolls in. That means it’s time for a little continuous integration. For that, one of the most popular tools in use today is Jenkins.
You can perform unit tests with JUnit, which is a simple framework for running repeatable tests where code tests code. SonarQubehas been proven to work phenomenally for static code analysis. Many use tools like Artifactoryto store build artifacts, but another great option is to use Maven or Ivy since they can be managed in the same project as your source code using Helix TeamHub.
Automated acceptance testing is run with Robot Framework. It has an easy-to-use, tabular test data syntax, and it utilizes a keyword-driven testing approach.
Production deployments and configuration management are taken care of by Ansible, can take care of production deployments and configuration management. It’s a simple IT automation engine that automates cloud provisioning, configuration management, application deployment, and intra-service orchestration. For software containerization, our chosen tool is Docker.
Monitoring Your Progress
Finally, you can track the entire process with Zabbix, which is designed for real-time monitoring in the enterprise. It works even if you need millions of metrics from thousands of servers. You can also use Grafanato visually display metrics on clean, informative dashboards.
Let's combine these tools and put them on the right places in the DevOps production model:
The original poster in Reddit, who wanted to streamline their software development process should definitely look into DevOps. However, the tools are only one part of a DevOps organization and setting up the platform I've described above doesn't instantly make your organization a DevOps advocate. You'll need a complete cultural change and commitment from the whole organization.
If you have already started the cultural shift towards DevOps and want to set up the best possible DevOps environment, just use the example above.
Helix TeamHub: A DevOps Pipeline Tool for Teams of All Sizes