Organizations want to move to a continuous integration/continuous deployment (CI/CD) model in software development and the cloud can help, but there are key obstacles standing in the way. For example, in many software companies, the IT operations (IT Ops) team has a lengthy procurement and provisioning cycle, and developers may have to wait anywhere from several days to a few weeks for IT Ops to handle each request for new tools or workspaces.
In addition, there is a lack of automation in IT Ops procurement and provisioning cycles. For example, developers may be using an outdated IT ticketing system to request infrastructure and software — each time a developer issues a ticket request, an IT Ops person must follow a certain workflow to fulfill that request, and must complete each step before sending the ticket on to the next IT Ops person in the chain.
Silos are another obstacle. In large enterprises, IT Ops teams have silos — individuals or sub-teams with different responsibilities at different levels. Each individual or sub-team fulfills certain tasks for a Dev/Test request separately from the others. These silos turn IT Ops procurement into a series of handoffs, where each team member must complete their assigned tasks before handing the job off to another team member. This results in delays, where DevOps people must wait for requests to move through the IT Ops pipeline as each person in each silo performs their separate tasks. The silos create a lack of collaboration between separate IT Ops teams, and between IT Ops and DevOps, when ideally they should all be working together to accelerate the procurement process.
A self-service private cloud will remove these obstacles, helping to clear the IT Ops pipeline while providing developers, testers, and QA people with the IT infrastructure and tools they need for ongoing CI/CD development. According to Gene Kim, “When self-service provisioning can be done quickly and consistently through complete virtualization, you eliminate the obstacles to give developers, testers, and QA the environments they need for continuous integration and continuous deployment.”
The following are some attributes of a self-service automated cloud.
On-Demand Self-Service Provisioning
A self-service private cloud should offer a set of automated provisioning tools so developers and testers can create their own Dev/Test environments. It should include both a self-service user interface and an API-driven infrastructure-as-code that lets developers create VMs and databases, access storage, set up network connections, etc., using RESTful API coding.
In essence, a self-service private cloud automates the provisioning process by letting developers and testers manage their own initial deployments and configurations. This removes many of the confusing and error-prone manual steps that IT Ops people must go through to deliver the infrastructure and software stacks that developers need. It also removes the silos within the IT Ops organization, as it puts provisioning of individual elements (VMs, databases, storage, etc.) in the hands of developers.
An Intelligent and Well-Organized User Interface
A self-service private cloud should have an intelligent user interface (UI) that gives developers access to a set of common infrastructure tools (e.g., VMs, Oracle, or SQL Server databases, storage, network connections) and applications. This eliminates the old ticketing-based processes where users must submit multiple tickets to IT Ops to build their physical and software stacks, allowing developers to set up their own DevOps environments on the private cloud with just a few clicks.
Ideally, a self-service UI should allow IT Ops administrators to assign resources in an organized manner. They should be able to designate business units (BUs) on the UI (e.g., “AppDevTeam1,” “WebDevTeam1”) based on units within the company; assign team members to BUs; and designate current projects (e.g., “AppDevProject1”) on the UI according to BU. They should also be able to assign quotas to each BU (e.g., AppDevTeam1 gets 100 VMs, 25 vCPU cores, 100 GB memory, and 400 GB storage), and to each individual project (e.g., AppDevProject1 gets 10 VMs, 5 vCPU cores, 8 GB memory, and 40 GB storage).
A self-service private cloud should have an online “application store” that provides single-click access to common development tools and services, such as:
- CI/CD tools such as Jenkins, Git, Maven, and Junit
- Workload management tools such as Ansible, Puppet, and Chef
- Middleware services such as RabbitMQ and Redis
- Storage back-ends such as MySQL, Postgres, Cassandra, and MongoDB
The private cloud should also allow IT Ops to place commonly-used applications on the self-service UI to give developers and testers even easier access to them. For example, IT Ops can make a duplicate of the production environment available on the UI for testers. They can then update the clone production environment every few months to make sure testers are using the most current and accurate duplicate.
Seamless, two-way cloud migration
A self-service hybrid should have seamless two-way migration to allow developers and testers who have public cloud access to easily move applications and workloads back and forth between public and private clouds.
A self-service private cloud solution should have a set of administrative dashboards that allow the IT Ops team to control access to resources on the UI. These dashboards should give admins complete visibility into which teams and team members are utilizing which resources, and allow the IT Ops team to perform admin tasks such as:
- Creating user accounts and passwords on the UI
- Creating BUs, and projects for each BU, on the UI
- Assigning developers and testers as "members" of a certain BU or project
- Assigning self-service infrastructure tools (compute, storage, network) on the UI, and setting quotas for those tools according to BU or project
- Importing new applications to the application store or the UI
A Software as a Service (SaaS) platform
A SaaS platform with portal-based access is the best venue for a self-service private cloud solution. A SaaS platform provides the flexibility to do upgrades and customization to the various features of the UI, application store, and administrative dashboards. The flexibility of the SaaS private cloud solution gives it the potential to become the de facto standardized platform for CI/CD and deployment in agile software development.
Both Dev/Test and IT Ops teams are under pressure to support the demands of agile development, but they have different goals. Developers and testers want to achieve faster time to market in delivering applications to their customers. Meanwhile, IT Ops teams want to achieve a faster time to value in delivering IT resources and applications to Dev/Test teams to support their goal of faster time to market.
As we've seen, the obstacles that hinder these goals — lengthy procurement and provisioning cycles, lack of automation, internal silos that create bottlenecks — are formidable, but can be overcome with the right technologies. A self-service, automated private cloud empowers developers and testers, giving them the tools they need to create their own DevOps environments. It also frees IT Ops teams from manual provisioning tasks, allowing them to provide developers and testers with IT resources in a more direct and timely manner. In short, a self-service private cloud helps both developers and IT Ops teams achieve their separate goals of faster time to market and time to value by clearing IT Ops obstacles to support the ongoing CI/CD cycle.
This article was originally posted “Keys To Agile Software Development” from Cloud Strategy Magazine.