Environment variables

Environment variables are pairs of key-and-value that can be used in the pipelines instead of manually updating the same values. They allow developers to save time looking up and entering access details, and eliminate the risk of providing sensitive details in their scripts.

ENV VARs are used to parameterize build scripts. Setting up variables in a pipeline will cause the same build action to work differently depending on the pipeline.

Setting Environment Variables

When adding a new variable, the following fields are available:

  • Scope – defines the level of the variable
  • Encryption – enabling encryption will hide the value of the variable in the logs
  • Type – if you set it to Fixed, the value of the variable will always be the same. Switching the option to Settable will let you change the value and pass it to the next action or execution

Environment Variables can be defined on 4 levels:

  1. Workspace – available for all projects and pipelines. Configured in the workspace Preferences.
  2. Project – available for all pipelines in the project. Configured in the Project Options.
  3. Pipeline – available only for the pipeline where was created (eg. production server details). Configured in the pipeline details.
  4. Action - available only for the actions where the variable was defined

Each subsequent tier will overwrite the value from the higher tier. For example, if you have two same variables – one defined on the workspace level and another on the pipeline level – Buddy will use the pipeline value in that pipeline, and the workspace value in the rest of the account.

Workspace environment variables

You can learn more about passing parameters here.

Example Usage

Let's configure some variables to encrypt access to an FTP server:

  1. Go to your deployment pipeline and click the Variables tab
  2. Add variables with the corresponding values. For example:
    • Hostname: FTP_HOST / 192.168.0.100
    • Login: FTP_LOGIN / admin
    • Password: FTP_PASS / buddy1234

Configuring environment variables

  1. Now you can use the variables to store access credentials to your deployment server:

Using variables in action

Fields that support ENV VARs

Environment variables are supported across the whole service, but most commonly used in the build actions. You can predict a variable by entering $ in the supported field:

Run commands box

Here's the list of the currently supported fields:

Action NameSupported Fields
Amazon_S3SourcePath, Remote Path
Android_Build
Android_PublishAPK, Main Expansion File, Patch Expansion File, Service Account Key, Package Name, Mapping File, Changelog
Android_SignSelect the APK, Location, KeystorePassword KeyAlias, OutputDirectory, Output APK Name
AWS_CLI
AWS_ECSSourcePath
AWS_Lambda_DeploySourcePath
Azure
BugsnagAPI Key, Version, Revision, Builder Name, Release Stage
Cloud_FrontBaseURL, SourcePath
CloudflareBaseURL
Code_DeploySourcePath, BucketName, Description
Copy_FilesSourcePath, RemotePath
Custom
DatadogEvent Title, Content, Host, Tags, Aggregation Key
Datadog_StatusHostname
Digital_OceanSourcePath, Port, Login, Password, Remote Path, SSH Key Passphrase
Digital_Ocean_SpacesSourcePath, Remote Path
DiscordChannel
Docker_PushLogin, Password, Repository, Tags
DockerfileBuild Arguments
Elastic_BeanstalkSourcePath, VersionLabel, BucketName
EmailSubject
EslintConfigPath
Firebase
FTPSourcePath, Hostname, Port, Login, Password, RemotePath
FTPSSourcePath, Hostname, Port, Login, Password, RemotePath
Function_Deploy
GCE
GCloud_CLI
GCSSourcePath, RemotePath
Ghost InspectorPath
GITURL, Login, Password, Commit Message
Google_App_EngineSourcePath, Bucket, Version, ImageURL
Google_CDNBaseURL
Heroku
Heroku_CLI
HoneybadgerEnvironment
HTTPEndpointURL, Login, Password, UserAgent, ContentType
Kubernetes_ApplyServer, Username, Password, SourcePath, PruneWhitelist, GracePeriod
Kubernetes_CLIServer, Username, Password
Kubernetes_Run_JobServer, Username, Password, Yaml
Kubernetes_Run_PodServer, Username, Password, Yaml
Kubernetes_Set_ImageServer, Username, Password, ImageName, ImageTag
LambdaQualifier
LogglyTags
Monitor
New_RelicDescription, Changelog
PingHost
PushbulletTitle, URL
PushoverTitle, URL, URL Title
RackspaceSourcePath, RemotePath
RaygunAccess Token, API Key, Version, User, Email, Comment
ReplaceSourcePath, Replacements (name)
RollbarEnvironment, Comment, Username, Rollbar Username
RsyncSourcePath, Hostname, Port, Login, Password, RemotePath
Run_Docker_ContainerLogin, Password, Image, Version
Run_Next_PipelineComment
SentryRelease Version, Deploy Environment
SFTPSourcePath, Hostname, Port, Login, Password, RemotePath
ShopifySourcePath
Slack
Sleep
SMS
Split_TestsTests Path
SSHSourcePath, Hostname, Port, Login, Password, RemotePath
TCPHost, Port, String To Send, String To Expect
Telegram
Terminal
UpcloudSourcePath, Port, Login, Password, RemotePath, SSH Key Passphrase
VultrSourcePath, Port, Login, Password, RemotePath
Wait_For_Apply
Wait_For_Params
WEBURL, Check For String, Login, Password, UserAgent, ContentType
WEB_DavSourcePath, Hostname, Login, Password
ZIPSourcePath, TargetPath, FileName

If you didn't find your action here or the required field is unsupported, let us know on the live-chat or drop a line at support@buddy.works.

Some fields are HTML textareas and do not support variable suggestions, e.g. message fields in notifications. They do support ENV VARs perfectly fine, however.

Default Environment Variables

Buddy populates a number of environment variables during each execution – for example the branch from which you deploy and the ID of the execution. Here is the list of populated variables:

BUDDY_WORKSPACE_URL
BUDDY_WORKSPACE_ID
BUDDY_WORKSPACE_NAME
BUDDY_WORKSPACE_DOMAIN
BUDDY_PROJECT_URL
BUDDY_PROJECT_NAME
BUDDY_PROJECT_NAME_ID
BUDDY_REPO_SLUG
BUDDY_INVOKER_URL
BUDDY_INVOKER_ID
BUDDY_INVOKER_NAME
BUDDY_INVOKER_EMAIL
BUDDY_INVOKER_AVATAR_URL
BUDDY_EXECUTION_URL
BUDDY_EXECUTION_ID
BUDDY_EXECUTION_START_DATE
BUDDY_EXECUTION_MODE
BUDDY_EXECUTION_CLEAR_CACHE
BUDDY_EXECUTION_REFRESH
BUDDY_EXECUTION_COMMENT
BUDDY_EXECUTION_BRANCH
BUDDY_EXECUTION_TAG
BUDDY_EXECUTION_PULL_REQUEST_ID
BUDDY_EXECUTION_PREVIOUS_REVISION
BUDDY_EXECUTION_PREVIOUS_REVISION_MESSAGE
BUDDY_EXECUTION_REVISION
BUDDY_EXECUTION_REVISION_SHORT
BUDDY_EXECUTION_REVISION_MESSAGE
BUDDY_EXECUTION_REVISION_SUBJECT
BUDDY_EXECUTION_REVISION_COMMITTER_EMAIL
BUDDY_PIPELINE_URL
BUDDY_PIPELINE_ID
BUDDY_PIPELINE_NAME
BUDDY_PIPELINE_REF_NAME
BUDDY_PIPELINE_TRIGGER_MODE
BUDDY_PIPELINE_TARGET_SITE_URL
BUDDY_FAILED_ACTION_LOGS
BUDDY_FAILED_ACTION_NAME
BUDDY_EXECUTION_CHANGELOG
BUDDY_EXECUTION_PULL_REQUEST_NO
BUDDY_EXECUTION_PREVIOUS_REVISION_SUBJECT
BUDDY_EXECUTION_REVISION_COMMITTER_NAME

Passing variables between actions

Passing variables within one pipeline is useful, e.g. when we want to assign file content to a variable and send it in a notification:

Variable passing pipeline example

  1. The first action builds the application and saves the log output to logs.txt.
  2. In case the build fails, the Local Shell action assigns the content of logs.txt to a variable using export LOGS=$(cat log.txt).
  3. The logs are then sent to a Slack channel with $LOGS as the message content.

Make sure to set the variable to 'Settable', otherwise it will not be possible to change its value.

Passing variables between executions

You can pass the values of variables between executions as well. The values can be saved in one execution and then used in another one, e.g. you can set a variable with the version type and increment it in every execution.

You can read more about semantic versioning in our dedicated guide.

Passing variables between pipelines

You can pass a variable between pipelines using the Run next pipeline action:

  1. Go into the Variables tab in the action details.
  2. Define the name of the variable and the value to pass: Variables tab

You can assign any variable from the target pipeline as the value.

Passing variables on execution start

You can parameterize your execution using the Pass arguments action – it will pause the pipeline and wait for your input to proceed:

Pass argunents window

Learn more about passing variables here.