Capricious Environment Propagator is here to help you manage state of files representing a system deployed to multiple environments.
If you have a rust toolchain you can:
cargo install cepler
Otherwise pre-compiled binaries are attached to the github releases and can be downloaded and unpacked.
To use cepler first you must write a config file (by default expected at cepler.yml
but can be overriden via -c
flag or CONFIG_FILE
env var).
The config file specifies:
- What environments there are
- What files are relevant to a specific environment
- How the config files are propagated across the environments
cepler.yml
environments:
# The Name of the Environment
testflight:
# List of files (globs) that should (always) trigger a redeploy of this environment
latest:
- k8s/service.yml
- k8s/testflight.yml
staging:
# The preceeding environment
passed: testflight
# The files that should trigger once they have been propagated from the preceeding environment
propagated:
- k8s/service.yml
latest:
- k8s/staging.yml
production:
passed: staging
propagated:
- k8s/service.yml
latest:
- k8s/production.yml
There are 3 basic commands in cepler check
, prepare
, record
.
cepler check -e <environment>
- Check if an environment needs deployingcepler prepare -e <environment>
- Prepare the state of the files checked out in the current directory for deploymentcepler record -e <environment>
- Record (and commit) metadata about files currently checked out and relevant to the environment
There are a number of additional cli flags described via cepler help [subcommand]
:
$ cepler --help
cepler 0.5.0
USAGE:
cepler [OPTIONS] <SUBCOMMAND>
FLAGS:
-h, --help Prints help information
-V, --version Prints version information
OPTIONS:
--clone <CLONE_DIR> Clone the repository into <dir>
-c, --config <CONFIG_FILE> Cepler config file [env: CEPLER_CONF=] [default: cepler.yml]
--git-branch <GIT_BRANCH> Branch for --clone option [env: GIT_BRANCH=] [default: main]
--git-private-key <GIT_PRIVATE_KEY> Private key for --clone option [env: GIT_PRIVATE_KEY=]
--git-url <GIT_URL> Remote url for --clone option [env: GIT_URL=]
SUBCOMMANDS:
check Check wether the environment needs deploying. Exit codes: 0 - needs deploying; 1 - internal error;
2 - nothing to deploy
concourse Subcommand for concourse integration
help Prints this message or the help of the given subcommand(s)
ls List all files relevent to a given environment
prepare Prepare workspace for hook execution
record Record the state of an environment in the statefile
reproduce Reproduce workspace according to last recorded state
$ cepler help prepare
cepler-prepare
Prepare workspace for hook execution
USAGE:
cepler prepare [FLAGS] --environment <ENVIRONMENT>
FLAGS:
--force-clean Delete all files not referenced in cepler.yml
-h, --help Prints help information
OPTIONS:
-e, --environment <ENVIRONMENT> The cepler environment [env: CEPLER_ENVIRONMENT=]
For information on integration into concourse pipelines refer to the readme at concourse/README.md