Elixir logo

Environment provisioning is a key part of a continuous delivery process. The idea is simple: we should not only build, test and deploy application code, but also the underlying application environment.

Are your environments being provisioned on-demand as applications deploy? Can Devs request new environments to fit changes in how the application is built? Is environment configuration and modeling built into the application deployment process?

What is the “environment”

The application environment consists in 3 main areas:

  • Infrastructure

  • Configuration

  • Dependencies

Infrastructure is the most important element of the environment, as it defines where the application will run, the specific configuration needs and how dependencies need to interact with the application.

Configuration is the next most important aspect of the application environment. Configuration dictates both how the application behaves in a given infrastructure and how the infrastructure behaves in relation to the underlying application.

Dependencies are all the different modules or systems an application dependes on, from libraries to services or other applications.

What is infrastructure today?

The concept of infrastructure refers to the components, hardware, and software, needed to operate an application service or system. But, as hardware has been abstracted away in favor of scalable, reliable and affordable solutions, the true definition of infrastructure is something different to every application.

We could say infrastructure now advances almost as fast as application technologies and languages themselves. Infrastructure has melded with the application in such a way that now we have to basically pick the infrastructure as part of the architecture decisions.

Infrastructure has never stopped evolving:

  • virtualization, or how to provision infrastructure in minutes instead of days
  • containerization, or how to provision infrastructure in seconds instead of minutes
  • the cloud, or how to provision infrastructure you do not own
  • serverless, or how not to provision infrastructure as it will provision itself on demand
  • and so on…

And the IT infrastructure is not just vertical, but also horizontal, as platforms can also connect many services pods and execution silos.

How about configuration and dependencies?

Configuration and dependencies are very profound topics that deserve their own articles. But let’s say that today both tend to be containerized one way or the other, meaning both programming languages and infrastructure technologies promote the packaging of environment configuration and dependencies as part of the deliverable.

Business Challenges

For any organization to successfully test and release new applications or application versions, the appropriate environment(s) needs first to be in place. The enterprise follows many different procedures for supplying environments to applications. It may be manual or automated, or a combination of both.

It also may be in the hands of different teams or roles within the enterprise, from developers to operations and sysadmins.

Environment provisioning is how an organization manages infrastructure before, during and after the lifespan of an application or service. Environment provisioning is independent of Services Oriented Architecture (SOA), micro-services or a full MVC application, or any other execution structure as running services or application all need to

  • Before: setup development and unit-testing environments and basic SCM controls. Provision environments as the delivery flow advances.

  • During: applications change with new requirements or bugs, and they may need to scale current or provision new features of its infrastructure as they go.

  • After: when done, decommissioning environments is important to deallocate valuable resources.

Business Benefits

Now why would you want to automate environment provisioning? Or yet, how would you demonstrate that spending time automating and building provisioning into continuous deployment can be beneficial at your organization?

Reduce Average Time to Provision

This KPI offers a direct measurement of the end-to-end process for provisioning new infrastructure, including both physical and virtual machines, processing power, storage, databases, middleware, communication and networking infrastructure among others. IT managers and business users can employ this metric as an indication of the degree to which IT is supporting the ability needs of the business.

Reduce Service Complexity

Centralizing all environment automation operations in one place simplifies making decisions that affect the business, permitting a quick turnover of scalability investments and impact analysis and change execution when rearranging infrastructure resources to meet new business requirements.

Get Service Allocation Insights

Measure how to and for how long infrastructure is being used, how fast it’s being delivered and disposed of and what business requirements are behind each request.

Greater service efficiency and decreased costs

Provisioning and disposing of environments following establish patterns and templates help reduce waste and complexity. Modular environments are also easier to debug and scale as changes only impact in one application instead of a cluster of applications. The bottomline is that modular environment reduce the costs of running tests and are easier to throttle in production, which also translate in applications that only consume what they need at a given time.

Use Cases

Here a sample of use cases that triggers an organization to implement a provisioning solution:

  • Onboarding new application teams have to deal with organizational complexity and adhere to standards and release policies. Provisioning a baseline environment catalog will help circumvent organizational obstacles and technological challenges.

  • Coordinating code releasing and provisioning to make sure infrastructure changes arrive just-in-time with the code that requires it.

  • Dev and QA environment provisioning, to simplify and control the process of procuring and automating environment generation.

  • Self-service provisioning, offering users a “catalog” with a set of service requests and tasks that can be launched and managed.

  • Infrastructure code is being pushed and continuously deployed by developers (ie. Dockerfiles or Chef recipes), but require more control and end-to-end visibility.

Get started today

If you feel you’re not taking full advantage of environment provisioning, here’s a few ideas for you to get started ASAP:

  • When starting new apps, or designing architecture, try to predict how environments will be provisioned at different stages during the delivery pipeline, specially QA and Production.

  • Build apps that can have features tested on-demand by spinning throw-away environments.

  • Have your DevOps processes (ie. scripts, builds) run in containers too.

  • Add environment provisioning to your CI/CD pipeline.

  • Offer users a way to control and define the environment rules and infrastructure needs, as code if possible.

In general, containers are a great way to go thanks to it’s infrastructure as code nature and natural DevOps fit. Serverless on the other hand can abstract away many environment concerns and make better use of resources as applications grow.

Let Clarive be your best friend in your DevOps journey to continuous delivery. Start with your 30-day trial now.