So… why did we build this particular example?
In short, we picked an integration with CircleCI as one of our examples because it is a great way to automate the build, test, and deployment processes. It provides integration with some of the most popular source code management systems like Github and Bitbucket, and is used by leading edge companies including Facebook, Kickstarter, and Spotify.
Continuous integration (CI) speeds up development and release management. There are lots of ways to do this, and we like the one offered by Circle CI. Integration with CircleCI is very straightforward. It requires developers to simply check in a simple YAML file that describes the build and test steps to the CI system. It allows developers to pick the build tools, dependency managers, and test frameworks they want to use and modify without the hassle of external coordination. It places the ownership of the build tooling in the hands of the developer, right where it needs to be.
What is beneficial about the integration of Fugue and CircleCI?
First, a little about Fugue. Fugue enables developers to program cloud infrastructure. In the past, infrastructure had to be created manually or with ad-hoc tooling which was particularly unnatural when compared to typical software development. With Fugue, we can apply modern development practices and tooling to develop and release infrastructure just like we would in typical software development.
CircleCI's approach includes an integration with Github to build and test code from repositories, and works well when following the GitFlow branching model. This enables developers to develop new features in isolation. When the features are ready, they can be integrated back into the mainline of development, and releases can be cut as needed for testing and certification for public release. With CircleCI, builds are initiated on pushes to the various branches in a Github project.
The integration of Fugue and CircleCI means that by adding Fugue to the CircleCI build steps, we can validate our infrastructure code (Ludwig) using Fugue’s type system and custom validations. It’s an important part of ensuring that you’re always able to push to production. Fugue allows us to verify the correctness of contributions to the infrastructure that is supporting our services and allows us to decide whether to accept those contributions into development, test, or even production branches.
Repository access control becomes infrastructure change control with Ludwig infrastructure code, especially when access to make changes to the cloud infrastructure by ensuring all changes are initiated via the CI system. After testing and verification, CircleCI can use Fugue to run compositions and deploy or update the cloud infrastructure automatically. This is all handled seamlessly by Fugue’s automated state management capabilities and process model.
The CircleCI integration works well with Fugue because it enables developers to quickly spin up and tear down cloud environments with the same ease as branching lines of code using git. The functionality of each of these tools means that the combination of Github, CircleCI, and Fugue makes for a simple, predictable, controlled interface to your infrastructure.
What can you expect?
The Fugue/CircleCI example demonstrates the integration of the two products performing the build and update process for infrastructure in each deployment stage. Our specific example creates a network and security group in Amazon Web Services. It demonstrates how a user can branch infrastructure and iterate on it just like you would any other typical software project.
The combination of Fugue and CircleCI ultimately allows developers to manage their infrastructure using the best practices applied by leading software companies to develop and release their software. We think it offers a great, guided hands-on experience to familiarize yourself with Fugue and demonstrate how to make a dramatic difference on the time you spend managing your cloud infrastructure.