Settings/Profiles
Environment Variables
Buildr uses several environment variables that help you control how it works. Some environment variables you will only set once or change infrequently. You can set these in your profile, OS settings or any tool you use to launch Buildr (e.g. continuous integration).
For example:
There are other environment variables you will want to set when running Buildr, for example, to do a full build without running the tests:
For convenience, the environment variables TEST
and DEBUG
are case insensitive, you can use either test=no
or TEST=no
. Any other environment variable names are case sensitive.
You can also set environment variables from within your Buildfile. For example, if you discover that building your project requires gobs of JVM heap space, and you want all other team members to run with the same settings:
Make sure to set any environment variables at the very top of the Buildfile, above any Ruby statement (even require
).
Using ||=
sets the environment variable, if not already set, so it’s still possible for other developers to override this environment variable without modifying the Buildfile.
Buildr supports the following environment variables:
Variable | Description |
---|---|
BUILDR_ENV |
Environment name (development, production, test, etc). Another way to set this is using the -e command line option. |
DEBUG |
Set to no/off if you want Buildr to compile without debugging information (default when running the release task, see Compiling). |
HOME |
Your home directory. |
HTTP_PROXY |
URL for HTTP proxy server (see Specifying Repositories). |
HTTPS_PROXY |
URL for HTTPS proxy server (see Specifying Repositories). |
IGNORE_BUILDFILE |
Set to “true” or “yes” to ignore changes in Buildfile or its dependencies when running tests. |
JAVA_HOME |
Points to your JDK, required when using Java and Ant. |
JAVA_OPTS |
Command line options to pass to the JDK (e.g. '-Xms1g' ). |
M2_REPO |
Location of the Maven2 local repository. Defaults to the .m2 directory in your home directory (ENV['HOME'] ). |
NO_PROXY |
Comma separated list of hosts and domain that should not be proxied (see Specifying Repositories). |
TEST |
Set to no/off to tell Buildr to skip tests, or all to tell Buildr to run all tests and ignore failures (see Running Tests). |
USER |
Tasks that need your user name, for example to log to remote servers, will use this environment variable. |
Buildr does not check any of the arguments in JAVA_OPTS
. A common mistake is to pass an option like mx512mb
, where it should be Xmx512mb
. Make sure to double check JAVA_OPTS
.
Some extensions may use additional environment variables, and of course, you can always add your own. This example uses two environment variables for specifying the username and password:
The same works for the repositories.snapshot_to
hash.
Personal Settings
Some things clearly do not belong in the Buildfile. For example, the username and password you use to upload releases. If you’re working in a team or on an open source project, you’d want to keep these in a separate place.
You may want to use personal settings for picking up a different location for the local repository, or use a different set of preferred remote repositories, and so forth.
The prefered way to store personal settings is to create a .buildr/settings.yaml
file under your home directory. Settings stored there will be applied the same across all builds.
Here’s an example settings.yaml
:
Later your buildfile or addons can reference user preferences using the hash returned by the Buildr.settings.user
accessor.
Build Settings
Build settings are local to the project being built, and are placed in the build.yaml
file located in the same directory that the buildfile
. Normally this file would be managed by the project revision control system, so settings here are shared between developers.
They help keep the buildfile and build.yaml file simple and readable, working to the advantages of each one. Example for build settings are gems, repositories and artifacts used by that build.
When buildr is loaded, required ruby gems will be installed if needed, thus adding features like the imaginary twitter notifier addon.
Artifacts defined on build.yaml
can be referenced on your buildfile by supplying the ruby symbol to the Buildr.artifact
and Buildr.artifacts
methods. The compile.with
, test.with
methods can also be given these names.
Build settings can be retreived using the Buildr.settings.build
accessor.
Non constant settings
Before loading the Buildfile, Buildr will attempt to load two other files: the buildr.rb
file in the .buildr
directory under your home directory, followed by the _buildr.rb
(or .buildr.rb
) file it finds in the build directory.
The loading order allows you to place global settings that affect all your builds in your buildr.rb
, but also over-ride those with settings for a given project.
Here’s an example buildr.rb
:
Buildr 1.3 and earlier used the file buildr.rb
directly in your home directory. Starting with version 1.4, Buildr loads buildr.rb
from the .buildr
directory under your home directory in preference. If you use Buildr 1.3 and earlier and don’t want to duplicate your settings, you can move you existing buildr.rb
under the .buildr
directory and create a new buildr.rb
in your home directory containing:
Environments
One common use case is adapting the build to different environments. For example, to compile code with debugging information during development and testing, but strip it for production. Another example is using different databases for development, testing and production, or running services at different URLs.
So let’s start by talking about the build environment. Buildr has a global attributes that indicates which environment it’s running in, accessible from the environment
method. You can set the current build environment in one of two ways. Using the -e/--environment
command line option:
Or by setting the environment variable BUILDR_ENV
:
Unless you tell it otherwise, Buildr assumes you’re developing and sets the environment to development
.
Here’s a simple example for handling different environments within the Buildfile:
We recommend picking a convention for your different environments and following it across all your projects. For example:
Environment | Use when … |
---|---|
development | Developing on your machine. |
test | Running in test environment, continuous integration. |
production | Building for release/production. |
Profiles
Different environments may require different configurations, some you will want to control with code, others you will want to specify in the profiles file.
The profiles file is a YAML file called profiles.yaml
that you place in the same directory as the Buildfile. We selected YAML because it’s easier to read and edit than XML.
For example, to support three different database configurations, we could write:
Here’s a simple example for a buildfile that uses the profile information:
The profile
method returns the current profile, selected based on the current environment. You can get a list of all profiles by calling profiles
.
When you run the above example in development
, the current profile will return the hash { 'db'=>'hsql', 'jdbc'=>'hsqldb:mem:devdb' }
.
We recommend following conventions and using the same environments in all your projects, but sometimes the profiles end up being the same, so here’s a trick you can use to keep your profiles DRY.
YAML allows you to use anchors (&
), similar to ID attributes in XML, reference the anchored element (*
) elsewhere, and merge one element into another (<<
). For example:
You can learn more about YAML here, and use this handy YAML quick reference.