It allows you to keep your shell environment in source control, thereby keeping everyone in sync and allowing access to shared dev tools, aliases, and more.
Installing a Tech Stack for a New Project
The following code makes sure that everybody has brew, node, and gulp:
# Download homebrew for Mac
$ /usr/bin/ruby -e "https://..."
# Install node using brew
$ sudo brew install node
# Install gulp for building
$ npm install --global gulp-cli
Each developer needed to be in charge of setting up their own developer environment. This is usually a set of commands in a wiki somewhere.
$ git clone https://your-zenv-fork/..
$ cd zenv
$ python install.py
Now, bringing on new developers is easy. Just clone and install!
Sharing Dev Tools
Let's say you've decided to write a tool that parses production logs called parse_logs. It's been very useful for you, so you want others to be able to use it as well. Sharing it with your team is as simple as adding it to the bin folder and pushing.
# This puts you in the ZEnv checkout
$ cd "$ZENV_ROOT"
$ mv ~/bin/parse_logs bin/
$ git commit -am 'Adding parse_logs tool'
$ git push
Add your tool
Any executable that works on the command line can be added to ZENv by moving it into the /bin directory.
# Pick up changes from git
ZENv$ ... (really sweet tool output)
Other developers can easily pull down the changes to get access to your tool.
Working on Multiple Projects
Sometimes you'll need to work with multiple checkouts of different projects, each with their own set of requirements. ZENv has support for creating sub-environments that allow you to change the set of available developer tools and environment variables depending on what project a developer needs to work on at the time.
$ cd db_backend
$ phing -logger -Dprops=../myprops
$ cd ../app_frontend
Each project has a unique set of commands to build that requires developers to understand each build system and their respective capabilities.
ZENv$ use db_backend
ZENv$ use app_frontend
With ZENv, there's no need to spend time figuring out the subtleties of each project's build system. Just build!