Skip to content
Testing Environments On Demand
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.circleci clean history Feb 20, 2019
.helm/charts helm charts: incorrect key name in deployment template Mar 5, 2019
assets/html clean history Feb 20, 2019
cmd
data clean history Feb 20, 2019
doc initial readme and diagram Feb 22, 2019
migrations clean history Feb 20, 2019
pkg k8s client config: enable mechanism to set JWT path Apr 9, 2019
testdata/integration
testing
vendor deps: update furan client Apr 4, 2019
.gitignore clean history Feb 20, 2019
.goreleaser.yml
Dockerfile clean history Feb 20, 2019
Gopkg.lock deps: update furan client Apr 4, 2019
Gopkg.toml datadog apm: upgrade version Mar 7, 2019
LICENSE MIT license Feb 20, 2019
Makefile clean history Feb 20, 2019
README.md
acyl.yml datadog apm: initial support Mar 4, 2019
main.go

README.md

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.

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.
  • Consul: This is used for event concurrency control/locking.
  • 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

You can’t perform that action at this time.