acyl

command module
v0.9.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 9, 2022 License: MIT Imports: 1 Imported by: 0

README

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

Documentation

The Go Gopher

There is no documentation for this package.

Directories

Path Synopsis
pkg
api
match
Package match implements branch matching
Package match implements branch matching
memfs
Package memfs provides a billy filesystem base on memory.
Package memfs provides a billy filesystem base on memory.
mocks
Package mocks is a generated GoMock package.
Package mocks is a generated GoMock package.
nitro/meta
Package meta reads and interprets repo metadata (acyl.yml)
Package meta reads and interprets repo metadata (acyl.yml)
persistence
Package persistence provides an implementation of datalayer.go DataLayer interface.
Package persistence provides an implementation of datalayer.go DataLayer interface.
testing

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL