---
title: Introducing Bitops
description: Automate the provisioning and configuration of cloud infrastructure with BitOps.
image: https://www.bitovi.com/hubfs/BitOps%20Flow-General%20-%20CICD.png
---

- ![AI implementation](https://www.bitovi.com/hubfs/AIConsultingIcon.svg)
  
  [AI implementation](https://www.bitovi.com/services/ai-consulting)
- ![Systems engineering](https://www.bitovi.com/hubfs/icon%20-%20backend.svg)
  
  [Systems engineering](https://www.bitovi.com/services/systems-engineering-consulting)
- ![Project Management](https://www.bitovi.com/hubfs/icon%20-%20PM.svg)
  
  [Project Management](https://www.bitovi.com/services/agile-project-management-consulting)
- ![Product Design](https://www.bitovi.com/hubfs/icon%20-%20design.svg)
  
  [Product Design](https://www.bitovi.com/services/product-design-consulting)
- ![Frontend development](https://www.bitovi.com/hubfs/icon%20-%20frontend.svg)
  
  [Frontend development](https://www.bitovi.com/services/frontend-development-consulting)
- [View more
  
  →
  
  ](https://www.bitovi.com/digital-consulting-services)

We're Experts in...

- [JavaScript](https://www.bitovi.com/services/frontend/javascript-consulting)
- [AI training](https://www.bitovi.com/ai-training-for-software-engineers)
- [Angular](https://www.bitovi.com/services/frontend/angular-consulting)
- [Design systems](https://www.bitovi.com/services/axure-figma-migration)
- [React](https://www.bitovi.com/services/frontend/react-consulting)
- [Temporal](https://www.bitovi.com/services/backend/temporal-consulting)
- [React Native](https://www.bitovi.com/services/frontend/react-consulting/react-native)
- [Node.js](https://www.bitovi.com/services/backend/nodejs-consulting)

Showcase

![Yum! Brands](https://www.bitovi.com/hubfs/yum-showcase-link-1.png)

[View case study](https://www.bitovi.com/en/bitovi-yum-case-study)

More Projects

- [![Levi's](https://www.bitovi.com/hubfs/levis.svg)](https://www.bitovi.com/web-application-consulting-work/levis-ecommerce-responsive-redesign)
- [![Christie's International Real Estate](https://www.bitovi.com/hubfs/christies.svg)](https://design.bitovi.com/christies)
- [![BAFS](https://www.bitovi.com/hubfs/bafs.svg)](https://www.bitovi.com/ux-design-consulting/ux-case-studies/bafs-ppp)
- [View more
  
  →
  
  ](https://www.bitovi.com/our-software-consulting-work)

Open Source Tools

We build powerful tools and open source them to support the community.

[See what we've built →](https://www.bitovi.com/open-source)

- [![Blog](https://www.bitovi.com/hubfs/icon%20-%20blog.svg)
  
  BlogWe post about delivering products and solving problems.
  
  ](https://www.bitovi.com/blog)
- [![Partnerships](https://www.bitovi.com/hubfs/Handshake-1.svg)
  
  PartnershipsLearn about Bitovi's technology partners
  
  ](https://www.bitovi.com/partnerships)
- [![Academy](https://www.bitovi.com/hubfs/icon%20-%20academy%20(4).svg)
  
  AcademyFree courses to build delivery skills
  
  ](https://www.bitovi.com/academy)
- [![Open source tools](https://www.bitovi.com/hubfs/icon%20-%20open%20source.svg)
  
  Open source toolsUse or contribute to our community
  
  ](https://www.bitovi.com/open-source)

Let's Connect

- [![Discord](https://www.bitovi.com/hubfs/DiscordLogo.svg)
  
  Discord
  
  ](https://discord.gg/J7ejFsZnJ4)
- [![LinkedIn](https://www.bitovi.com/hubfs/LinkedinLogo.svg)
  
  LinkedIn
  
  ](https://www.linkedin.com/company/bitovi/)
- [![GitHub](https://www.bitovi.com/hubfs/GithubLogo.svg)
  
  GitHub
  
  ](https://github.com/bitovi/)

![Eggbot](https://www.bitovi.com/hubfs/build_assets/bitovi-limbo-cms-react/338/js_client_assets/assets/eggbot-LTGhdSGL.png)

Name *

Work Email *

Phone

What's your project?

Send

### Contact Us

(312) 620-0386contact@bitovi.com

[ DevOps ](https://www.bitovi.com/blog/topic/devops) |  November 4, 2020

# Introducing Bitops

 Automate the provisioning and configuration of cloud infrastructure with BitOps.

![Connor Graham](https://app.hubspot.com/settings/avatar/19f570d0095455dae4ba023d96feaca9)

 Connor Graham

Share:

[![Twitter](https://www.bitovi.com/hubfs/limbo-generated/_astro/twitter-white.os3xLc3C_Z2nW4or.svg) ](https://twitter.com/intent/tweet?text=) [![Reddit](https://www.bitovi.com/hubfs/limbo-generated/imgs/icons/reddit.png) ](http://reddit.com/submit?url=)

Defining [infrastructure as code](https://www.hashicorp.com/resources/what-is-infrastructure-as-code) repositories to handle complex systems with automated pipelines is difficult to manage at scale. [BitOps](https://github.com/bitovi/bitops) is a solution to describe your infrastructure and the artifacts deployed onto that infrastructure for multiple environments in a single place called an Operations Repo. It was created and open-sourced by Bitovi.

This is part 1 of a BitOps tutorial series:

- [Part 2: BitOps, Yo!](https://www.bitovi.com/blog/bitops-yo)

## Features

**Flexible Configuration:** Configure how you want BitOps to deploy your application with environment variables or yaml.

**Event Hooks:** If BitOps doesn't have built-in support for your use case, execute arbitrary bash scripts at different points in BitOps’ lifecycle.

**Agnostic Runtime:** By bundling infrastructure logic with BitOps, you can have the same experience regardless of which [pipeline service](https://www.bitovi.com/blog/devops-consulting-pipeline-runners) runs your [CI](https://www.bitovi.com/blog/devops-consulting-continuous-integration). You can even run BitOps locally!

## How it Works

BitOps is a boilerplate docker image for [DevOps](https://www.bitovi.com/blog/the-complete-guide-to-devops) work. An operations repository is mounted to a BitOps image's `/opt/bitops_deployment`directory. BitOps will

- Auto-detect any configuration belonging to one of its supported tools
- Loop through each tool and

## Operations Repository

An operations repo is a repository that defines the intended state of your cloud infrastructure. An operations repo is mounted as a volume to the BitOps [Docker image](https://hub.docker.com/r/bitovi/bitops) and BitOps works its magic!

```
docker pull bitovi/bitops
cd $YOUR_OPERATIONS_REPO
docker run bitovi/bitops -v $(pwd):/opt/bitops_deployment
```

 

The structure of an operations repo is broken down into environments, deployment tools, and configuration.

### Environments

An environment is a directory that lives at the root of an operations repository and is used to separate applications and/or environments. For example, if your application has a backend and frontend component for production and test, the root of your operations repo may contain a directory for each.

![Blog2 - BitOps, Yo](https://www.bitovi.com/hs-fs/hubfs/Google%20Drive%20Integration/Blog2%20-%20BitOps,%20Yo.png?width=350&name=Blog2%20-%20BitOps,%20Yo.png)

The directory per environment pattern is preferential to having a branch for each environment as this allows the state of all your infrastructure to be managed from one location without accidentally merging test config into your prod environment.

When running BitOps, you provide the environment variable `ENVIRONMENT`. This tells BitOps what configuration code it should use. In more complex examples where you have multiple components or environments that are dependent on each other, you can run BitOps multiple times in a single [CI](https://www.bitovi.com/blog/devops-consulting-continuous-integration)/CD pipeline by calling docker run with a different `ENVIRONMENT` value each time.

For example:

```
docker pull bitovi/bitops
# Deploy backend
docker run \
-e ENVIRONMENT="backend-test" \
-e AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID \
-e AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY \
-e AWS_DEFAULT_REGION="us-east-2" \
-v $(pwd):/opt/bitops_deployment \
bitovi/bitops:latest

# Deploy frontend
docker run \
-e ENVIRONMENT="frontend-test" \
-e AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID \
-e AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY \
-e AWS_DEFAULT_REGION="us-east-2" \
-v $(pwd):/opt/bitops_deployment \
bitovi/bitops:latest
```

### Deployment Tools

Within each environment directory are sub-directories grouping deployment tools by their names. Each of these deployment tool directories are optional. For example, if your application only requires Terraform to execute, you do not need an ansible/, cloudformation/ or helm/ sub-directory in your environment directory.

Continuing with our frontend and backend example, if your frontend only requires Cloudformation, but your backend requires both Ansible and Terraform, you would have an operations repo that looks like this.

### ![Blog2 - BitOps, Yo-3](https://www.bitovi.com/hs-fs/hubfs/Google%20Drive%20Integration/Blog2%20-%20BitOps,%20Yo-3.png?width=350&name=Blog2%20-%20BitOps,%20Yo-3.png)

### Configuration

Within each deployment tool directory there is your actual infrastructure as code. Each deployment tool directory is structured simply according to what the tool expects. For example, the terraform sub-directory should contain files just as Terraform would expect them to be.

Along with the standard contents of a tool's sub-directory, there is a special file called `bitops.config.yaml`. This file tells BitOps how to run your infrastructure code. More information about `bitops.config.yaml` can be found in the [official docs](https://bitovi.github.io/bitops/configuration-base/).

![Blog2 - BitOps, Yo-1](https://www.bitovi.com/hs-fs/hubfs/Google%20Drive%20Integration/Blog2%20-%20BitOps,%20Yo-1.png?width=350&name=Blog2%20-%20BitOps,%20Yo-1.png)

To create your own operations repository, look to the [official docs](https://bitovi.github.io/bitops/operations-repo-structure/).

## Combining BitOps with an Application Repo

Combining a BitOps operations repository with an existing application repository creates a deployment flow where the application repository’s pipeline is responsible for producing an artifact and notifying the operations repository. The operations repository will create the necessary infrastructure and deploy the artifact to it.

Here is an example of an application that is deployed to a Kubernetes cluster with Terraform and Helm.

![BitOps Flow-General - CICD](https://www.bitovi.com/hs-fs/hubfs/BitOps%20Flow-General%20-%20CICD.png?width=1325&name=BitOps%20Flow-General%20-%20CICD.png)

## Learn More

Want to learn more about using BitOps? Check out our [github](https://github.com/bitovi/bitops), our [official docs,](https://bitovi.github.io/bitops/) or come hang out with us on [Slack #bitops channel](https://bitovi-community.slack.com/archives/C01SX5L134G)<https://www.bitovi.com/community/slack>! We’re happy to assist you at any time in your [DevOps](https://www.bitovi.com/blog/the-complete-guide-to-devops) automation journey!

[![Tag for open source](https://www.bitovi.com/hubfs/limbo/icons/tag.svg) open source ](https://www.bitovi.com/blog/topic/open-source)[![Tag for development](https://www.bitovi.com/hubfs/limbo/icons/tag.svg) development ](https://www.bitovi.com/blog/topic/development)[![Tag for bitops](https://www.bitovi.com/hubfs/limbo/icons/tag.svg) bitops ](https://www.bitovi.com/blog/topic/bitops)

 Previous Post

![](https://www.bitovi.com/hs-fs/hubfs/rsz_cbn-m2yveaax30n.jpg?height=117&name=rsz_cbn-m2yveaax30n.jpg) [ Helpful Tips for Debugging Scully & Angular ](https://www.bitovi.com/blog/helpful-tips-for-debugging-scully-angular)

  

 Next Post

![bitops-yeoman](https://www.bitovi.com/hs-fs/hubfs/DevOps%20Page/love-yo.jpg?height=117&name=love-yo.jpg) [ BitOps, Yo! ](https://www.bitovi.com/blog/bitops-yo)

```json
{
  "@context" : "http://schema.org",
  "@type" : "Organization",
  "address" : {
    "@type" : "PostalAddress",
    "addressCountry" : "United States",
    "addressLocality" : "Libertyville",
    "addressRegion" : "IL",
    "postalCode" : "60048",
    "streetAddress" : "1134 Pine Tree Lane "
  },
  "alternateName" : "Bitovi",
  "areaServed" : {
    "@type" : "GeoCircle",
    "geoMidpoint" : {
      "@type" : "GeoCoordinates",
      "latitude" : "41.8781",
      "longitude" : "87.6298"
    },
    "geoRadius" : "5000 km"
  },
  "description" : "Bitovi is a UX, UI design and front-end JavaScript development consulting company",
  "email" : "contact@bitovi.com",
  "image" : "https://www.bitovi.com/hubfs/bitovi-logo-x2.png",
  "logo" : "https://www.bitovi.com/hubfs/bitovi-logo-23-1.svg",
  "mainEntityOfPage" : {
    "@id" : "https://www.bitovi.com/blog/introducing-bitops",
    "@type" : "WebPage",
    "description" : "Automate the provisioning and configuration of cloud infrastructure with BitOps."
  },
  "naics" : "541511",
  "name" : "Bitovi Web App Consulting",
  "sameAs" : [ "https://www.facebook.com/BitoviLLC/", "https://twitter.com/bitovi", "https://www.linkedin.com/company/bitovi" ],
  "telephone" : "312-620-0386",
  "url" : "http://bitovi.com"
}
```

```json
{
  "@context" : "http://schema.org",
  "@type" : "BlogPosting",
  "author" : {
    "@type" : "Person",
    "name" : "Connor Graham"
  },
  "dateModified" : "December 6, 2022, 9:26:07 PM",
  "datePublished" : "2020-11-04 19:53:02",
  "description" : "Automate the provisioning and configuration of cloud infrastructure with BitOps.",
  "headline" : "Introducing Bitops",
  "image" : {
    "@type" : "ImageObject",
    "url" : "https://www.bitovi.com/hubfs/BitOps%20Flow-General%20-%20CICD.png"
  },
  "publisher" : {
    "@type" : "Organization",
    "logo" : {
      "@type" : "ImageObject",
      "url" : "https://www.bitovi.com/hubfs/bitovi-logo-23-1.svg"
    },
    "name" : "Bitovi"
  }
}
```