Coder Social home page Coder Social logo

bkeroack / acyl Goto Github PK

View Code? Open in Web Editor NEW

This project forked from carlosa8c/acyl

0.0 1.0 0.0 161.6 MB

Testing Environments On Demand

License: MIT License

Dockerfile 0.04% Makefile 0.01% Go 56.33% PLpgSQL 0.06% Shell 0.12% JavaScript 3.01% HTML 40.32% CSS 0.09% Mustache 0.02%

acyl's Introduction

Acyl chloride

Acyl

CircleCI Docker Repository on Quay

Testing Environments On Demand

Acyl is a server and CLI utility for creating dynamic testing environments on demand in Kubernetes, triggered by GitHub Pull Requests.

Environments are defined by acyl.yml in your source code repository, and consist of one or more Helm Charts that are installed into a new Kubernetes namespace that is created on demand and torn down when you're finished. Environment lifecycles are tied to Pull Requests: a new environment is created when you open a PR, it is updated as you push additional commits to the PR (including force pushes), and finally it is destroyed when the PR is closed or merged, automatically.

Acyl includes features to make team collaboration and environment configuration easier for multiple teams working on complex application stacks, allowing teams to maintain separate isolated testing environments but share revisions of in-progress code when needed.

Acyl has been used in various forms as part of the core Dollar Shave Club software delivery pipeline since 2016, as described in a recent blog post.

Web UI

Acyl includes a full web UI with authentication/authorization based upon GitHub Apps.

Environment Configuration

Environments are defined by acyl.yml, which describes the required Helm Charts along with their release value configuration and the dependency relationships among them. The config file can be thought of as a "Helm compose", analagous to Docker Compose except using Helm Charts instead of individual containers. Acyl uses Metahelm to construct a dependency graph of the environment charts and installs them in optimal reverse-dependency order.

An acyl.yml in one application repository can reference acyl.yml files in other repositories, and those applications (and their dependencies) will be transitively included in the environment. In this way complex application stacks maintained by different teams can share testing environment configuration.

Examples

  • Acyl is self-hosting: we use it to create testing environments for Acyl development itself. See acyl.yml in this repository.
  • Furan also uses Acyl for testing environments.

Local Development

Acyl has CLI tools available to visualize, debug and test environment configurations locally.

acyl config info will validate, analyze and show a visualization for the acyl.yml in the current directory (which must be a valid git repository with GitHub remotes).

acyl config test <create/update/delete> will simulate PR open/push/close events and create, update or delete environments in a local Kubernetes cluster (Docker For Mac Kubernetes, MicroK8s, etc).

For more details, see Local Development.

Architecture

Architecture

  • Acyl: This is the server application which listens for GitHub webhook events and performs operations to create, update or destroy environments within your Kubernetes cluster. The server is intended to run within the same cluster, with ClusterAdmin permissions. The Acyl binary also can be used as a local CLI utility for local environment development and debugging.
  • Postgres: This is the primary datastore for Acyl.
  • Furan: This is used to build and push application Docker images on demand.
  • (OPTIONAL) Notifications can be sent to Slack channels or individual users when environments are created or altered.
  • (OPTIONAL) Vault can be used for Acyl secrets like GitHub tokens and database credentials.

Further Reading

acyl's People

Contributors

bkeroackdsc avatar esterlinej avatar mikeykhalil avatar wwalexander avatar jmedberydsc avatar jakiestfu avatar theturtle32 avatar alrs avatar maxlahayedsc avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.