Search…
⌃K
Links

Default environment variables

How to create and manage default environment variables for your ReleaseHub environments

Why to use environment variables

Environment variables hold the environment-specific information that an application needs at runtime.
For instance, a web application deployed in a production environment has to know how to access the production database. The same application running in a staging environment would have to know about a staging database instead.
By storing configuration as environment variables instead of in code, you'll make your applications portable, secure, and easy to deploy on ReleaseHub environments.

How to create default environment variables for your environments

When you create a new application, ReleaseHub generates a default environment variables file, based on your code.
For example, if your repository has a docker-compose.yml file, ReleaseHub will populate the default environment variables for your new application based on the environment variables in that file.
If your repository does not have a docker-compose.yml file, you can create your ReleaseHub application's default environment variables manually, by editing your application's settings.

How to edit an application's default environment variables

To edit the default environment variables for an application, visit the application's App Settings page, then click the Edit button in the “Default Environment Variables” section.
Edit the default environment variables
This opens a YAML editor, which you can use to edit your default environment variables file.

Default environment variables file structure

A ReleaseHub application's default environment variables file is formatted in YAML, and consists of three sections:
Section
Type
Required
Description
mapping
Hash
false
Maps ReleaseHub variables to your app's environment variables
defaults
Array
true
Default environment variables for your app
services
Hash
false
Service-specific environment variables
Here's an example of a default environment variables file:
mapping:
COMMIT_HASH: RELEASE_COMMIT_SHA
AWS_REGION: RELEASE_CLUSTER_REGION
defaults:
- key: DEFAULT_LANG
value: en
- key: DB_HOSTNAME
value: db
services:
admin:
- key: DB_USERNAME
value: admin_rw
- key: DB_PASSWORD
secret: true
frontend:
- key: DB_USERNAME
value: user_ro
- key: DB_PASSWORD
secret: true
Environment variables consist of a key, a value, and an optional secret flag. Mark an environment variable as secret using secret=true. Secrets are encrypted at rest in a vault and hidden in the UI. You may also import secret environment variables from external secrets managers. See the instructions here for more on secrets.

Individual environment variable schema

Field
Type
Required
Description
key
String
True
The environment variable's name. It is convention to use uppercase names for environment variables. Example: DB_USERNAME
value
String or Null
True
The value for this environment variable. Required if secret is false. If secret is true, this field is optional, and ReleaseHub defaults to the previously saved value if this field is omitted.
secret
Boolean
False
Value is secret and should be encrypted. Value will be hidden from ReleaseHub UI. Defaults to false.
Here's an example of three environment variables:
defaults:
- key: DEFAULT_LANG
value: en
- key: DB_HOSTNAME
value: db
- key: DB_PASSWORD
value:
secret: true

How ReleaseHub uses an application's default environment variables file

When you create a new environment, ReleaseHub uses the application's default environment variables file to generate an environment-specific environment variables file for your new environment.
Think of an application's default environment variables file as the blueprint for each new environment's environment variables.

ReleaseHub's environment variables

Apart from the environment variables lifted from your docker-compose.yml, and the variables you created yourself, ReleaseHub provides additional environment variables.
You can map ReleaseHub's environment variables to your app's environment variable names so that you do not need to change your application's code when deploying on ReleaseHub or elsewhere.
Environment variables provided by ReleaseHub have names that start with RELEASE_.
Here's an overview of the variables provided by ReleaseHub:

RELEASE_ACCOUNT_ID

ReleaseHub account ID: Each ReleaseHub account has a unique numerical identifier.

RELEASE_APP_NAME

ReleaseHub application name: Each ReleaseHub application has a unique string identifier.

RELEASE_BRANCH_NAME

Git branch: The name of the git branch from your repository deployed to this environment.

RELEASE_BUILD_ID

ReleaseHub build ID: Each ReleaseHub build has a unique numerical identifier.

RELEASE_CLOUD_PROVIDER

Cloud provider: The cloud provider that hosts this environment. For example, aws or gcp.

RELEASE_CLUSTER_REGION

Cloud provider region: The cloud provider region for this environment. For example, us-west-2 or us-east-1.

RELEASE_COMMIT_SHA

Git hash: The SHA hash of the git commit deployed in this environment. This refers to a commit in your repository.

RELEASE_COMMIT_SHORT

Short git hash: The short hash of the git commit deployed in this environment. This refers to a commit in your repository.

RELEASE_CONTEXT

ReleaseHub context: Refers to the Kubernetes context for this deployment.

RELEASE_DOMAIN

ReleaseHub domain: If you do not have a custom domain set up on your ReleaseHub account, this will be rls.sh.

RELEASE_ENV_ID

ReleaseHub environment ID: Each ReleaseHub environment has a unique string identifier.

RELEASE_RANDOMNESS

ReleaseHub random string: This short random string is used to create unique links.

ReleaseHub's service-specific environment variables

ReleaseHub also provides environment variables specific to each service in your environment.
When creating these variables, ReleaseHub converts the service name to uppercase and prepends this to each service-specific environment variable's name.
For example, if you have two services, admin and frontend, ReleaseHub provides environment variables as follows:

ADMIN_COMMIT_SHA

Short git hash: The SHA hash of the git commit deployed for this service. This refers to a commit in your repository.

ADMIN_COMMIT_SHORT

Short git hash: The short hash of the git commit deployed for this service. This refers to a commit in your repository.

ADMIN_INGRESS_HOST

Ingress hostname: The hostname of the instance/load balancer for this service, accessible to the internet.

ADMIN_INGRESS_URL

Ingress URL: The public URL for this service.

FRONTEND_INGRESS_URL, FRONTEND_INGRESS_HOST etc.

The equivalent environment variables are provided for the frontend service in this example.

Mapping environment variables in the mapping section

You can use the mapping section to map existing environment variables to new environment variables.

Mapping ReleaseHub's variables

By mapping ReleaseHub's environment variables to your app's environment variables, you do not need to reference ReleaseHub-specific environment variable names in your code.
In the example below, your code expects an environment variable called AWS_REGION. Mapping allows you to pass RELEASE_CLUSTER_REGION to your application, adding its value to a new environment variable called AWS_REGION.
mapping:
COMMIT_HASH: RELEASE_COMMIT_SHA
AWS_REGION: RELEASE_CLUSTER_REGION
REACT_APP_ADMIN_BASE_URL: ADMIN_INGRESS_URL
REACT_APP_FRONTEND_BASE_URL: FRONTEND_INGRESS_URL

Mapping your app's environment variables

The mapping section also allows you to reference your app's environment variables. In the example below, REACT_APP_ADMIN_PATH gets its value from DEFAULT_ADMIN_PATH:
defaults:
- key: DEFAULT_ADMIN_PATH
value: /admin/
mapping:
REACT_APP_ADMIN_BASE_URL: ADMIN_INGRESS_URL
REACT_APP_ADMIN_PATH: DEFAULT_ADMIN_PATH

Combining existing variables and strings to create new variables

ReleaseHub's mapping section allows you to create new environment variables through string interpolation.
In the example below, ADMIN_FULL_URL is created by concatenating ADMIN_INGRESS_URL and DEFAULT_ADMIN_PATH:
defaults:
- key: DEFAULT_ADMIN_PATH
value: /admin/
mapping:
ADMIN_FULL_URL: "${ADMIN_INGRESS_URL}${DEFAULT_ADMIN_PATH}"
You can also provide default values if an environment variable is unset or empty.
In the example below, if MAYBE_EMPTY_BASE_URL does not exist, or is empty, the default https://example.com will take its place.
mapping:
ADMIN_FULL_URL: "${MAYBE_EMPTY_BASE_URL:-'https://example.com'}/admin/"
The syntax to indicate a default is based on parameter expansion in bash: ${parameter:-defaultvalue}, but unlike in bash, defaultvalue is interpreted as a string. defaultvalue can't reference an environment variable.
String interpolation and parameter expansion is limited to the mapping section of your environment variables YAML.

The defaults section

The defaults section contains environment variables that are available to all services in an environment.
Here's an example of the defaults section:
defaults:
- key: DEFAULT_LANG
value: en
- key: DB_HOSTNAME
value: db

The services section

Use the services section to define environment variables for specific services only. Each service in this section has one or more environment variables.
Here's an example of service-specific environment variables:
services:
admin:
- key: DB_USERNAME
value: admin_rw
- key: DB_PASSWORD
secret: true
frontend:
- key: DB_USERNAME
value: user_ro
- key: DB_PASSWORD
secret: true