Buddy YAML Schema
The buddy.yml file defines all pipelines in the project. Every pipeline consists of a list of actions to be executed. Below you’ll find schemas for both pipelines and actions.
Minimal working example
yaml# Minimal Buddy YAML pipeline example - pipeline: build events: - type: PUSH refs: - main actions: - action: Run tests type: BUILD docker_image_name: node docker_image_tag: "20" execute_commands: - npm install - npm test
Pipeline schema
The buddy.yml file consists of a list of pipelines. Each pipeline can have events, actions, variables, and trigger conditions.
LOCAL,REMOTENONE,DYNAMIC,FIXEDLOW,NORMAL,HIGHDEFAULT,NANO,SMALL,MEDIUM,LARGE,XLARGE,CUSTOM,X2LARGELATEST_RUN,LATEST_RUN_MATCHING_REF,PULL_REQUESTDATE_MODIFIED,CONTENTSX64,ARM,X86PIPELINE,PROJECT,WORKSPACEPermissions schema
DENIED,READ_ONLY,USE_ONLY,BLIND,RUN_ONLY,READ_WRITE,MANAGE,DEFAULT,ALLOWED,STAGE,COMMITActions schema
Every pipeline contains a list of actions. The actions are executed in the order provided in the .yml file:
yaml- pipeline: "production" refs: - "refs/heads/master" execution_message_template: "test" filesystem_changeset_base: "CONTENTS" ignore_fail_on_project_status: "true" actions: - action: "Execute: npm test" type: "BUILD" docker_image_name: "library/node" docker_image_tag: "6" execute_commands: - "npm install" - "npm test" setup_commands: - "npm install -g gulp grunt-cli" variables: - key: "username" value: "Buddy" settable: "enabled" description: "var_description" retry_interval: 1 retry_count: 3 - action: "Upload files to buddy.server" type: "FTP" input_type: "BUILD_ARTIFACTS" local_path: "/" login: "buddy" password: "password" host: "buddy.server" port: "21" retry_interval: 1 retry_count: 3
Value: BUILD
ON_EVERY_EXECUTION,ON_SUCCESS,ON_FAILURE,ON_BACK_TO_SUCCESS,ON_WARNING,ON_WAIT_FOR_APPROVE,ON_TERMINATEWAIT_ON_SUCCESS,IN_SOFT_PARALLEL,IN_HARD_PARALLELVariables schema
You can define variables in the following way:
yamlvariables: - key: "my_file" type: "FILE" value: "dGVzdA0K" file_path: "/buddy-variables/file" file_chmod: "644" file_place: "CONTAINER" - key: "id_my_key" value: "secure!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.qiYL/5JiylAVf8oeD57u9w==" type: "SSH_KEY" encrypted: true file_path: "~/.ssh/id_my_key" file_chmod: "600" file_place: "CONTAINER" - key: "id_public_ssh_key" value: "ssh-rsa AAAAB3NzaC1yc3EAAAABIwAAAQEA0af9YuXUugKPsLCZzMu1R7bLLSyCrSlLlnR+Nj8FuYaVj/rHbPBk0g6Rg3zEj8H4AffVv7Lr/K9O8L7EYl9QRZoi24UfSiR4RYQvOXLSBNbs/5FO0Vl/Fo6m83OQ91gxdEKzPLYDKBBZfilz2DY2mOxzs9GtI+MoESLV2w/VjIT3ZB6xoz0EFTm20r81/HsFkX1QRz6WGEIxGt1r8R8NpvSJf/W3nIQQCGgV1gVISaJ3Oevuozhs8DIWna3eKv0umAdM2Y3aPIxKJCqeo7LmE9bzPEoMM//h0I/hgPImcDVRfemz7j/kfOqmcfq12kA47k1nZtSipX0Bay3kCPjQDw==" type: "SSH_PUBLIC_KEY" description: "Production server SSH public key" path: "~/.ssh/id_sandbox_pub" chmod: 600 - key: "my_variable" value: "my_value" type: "VAR"
VAR,FILE,SSH_KEY,IOS_KEYCHAIN,IOS_PROVISION_PROFILES,SSH_PUBLIC_KEY,GPG_KEYNONE,CONTAINERb64 for binary files (certificates, images, compiled blobs) where the value is already base64-encoded. Omit or set to text for plain text files (JSON, XML, config) — the system will handle encoding automatically. Only applies to non-encrypted asset variables (FILE, SSH_KEY, SSH_PUBLIC_KEY, IOS_KEYCHAIN, IOS_PROVISION_PROFILES).text,b64Event schema
Here's how to define the event triggering the pipeline:
yamlevents: - type: "PUSH" refs: - ":context" - "refs/heads/dev-*" - type: "PULL_REQUEST" events: - "assigned" - "unassigned" branches: - "main" - "relesaes/*" - type: "WEBHOOK" totp: true - type: "EMAIL" prefix: "deploy" whitelist: - "admin@company.com"
PUSH,CREATE_REF,DELETE_REF,PULL_REQUEST,SCHEDULE,PUBLISH_ARTIFACT_VERSION,DELETE_ARTIFACT_VERSION,WEBHOOK,EMAIL,CREATE_ARTIFACT_VERSION,ENVIRONMENT_CREATE,ENVIRONMENT_DELETE,SANDBOX_CREATED,SANDBOX_DELETED,SANDBOX_TIMED_OUTTrigger conditions schema
You can define trigger conditions in the following way:
yamltrigger_conditions: - trigger_condition: "VAR_IS" trigger_variable_value: "expectedValue" trigger_variable_key: "myVar" - trigger_condition: "ON_CHANGE"
The default operator for multiple trigger conditions is AND if you want to use OR you have to include it:
yamltrigger_conditions: - trigger_condition: OR trigger_operands: - trigger_condition: "VAR_NOT_CONTAINS" trigger_variable_value: "test" trigger_variable_key: "BUDDY_EXECUTION_URL" - trigger_condition: "VAR_IS" trigger_variable_value: "asd" trigger_variable_key: "BUDDY_EXECUTION_URL"
ALWAYS,ON_CHANGE,ON_CHANGE_AT_PATH,VAR_IS,VAR_IS_NOT,VAR_CONTAINS,VAR_NOT_CONTAINS,DATETIME,SUCCESS_PIPELINE,DAY,HOUR,OR,VAR_LESS_THAN,VAR_LESS_THAN_OR_EQUAL,VAR_GREATER_THAN,VAR_GREATER_THAN_OR_EQUAL,ACTION_STATUS_IS,ACTION_STATUS_IS_NOT,TRIGGERING_USER_IS,TRIGGERING_USER_IS_NOT,TRIGGERING_USER_IS_IN_GROUP,TRIGGERING_USER_IS_NOT_IN_GROUPSUCCESSFUL,FAILED,SKIPPED,SUPPRESSEDMultiline YAML
To apply multiline in YAML, use the | (pipe) character:
yamlpipeline: | first line second line
Please mind that some fields are collections and should retain the collection structure. This applies to SSH and build actions:
yaml- action: "Execute: ls" type: "BUILD" execute_commands: - npm install - npm test - npm build
If you want to apply multiline in such actions, you need to define it as an element of the execute_commands collection:
yaml- action: "Execute: ls" type: "BUILD" execute_commands: - | npm install && npm test - npm build
Schedule examples
Simple scheduled run every hour starting on 01.01.2025 8:00 UTC (codeless)
yamlevents: - type: SCHEDULE start_date: 2025-01-01T08:00:00Z delay: 60
Schedule run every day at 8:00 UTC starting on 01.01.2025 for branches dev and stage
yamlevents: - type: SCHEDULE start_date: 2025-01-01T08:00:00Z delay: 1440 refs: - refs/heads/dev - refs/heads/stage
Schedule run every day at 8:00 America/New_York for all dev-* branches:
yaml- type: SCHEDULE refs: - refs/heads/dev-* cron: 0 8 * * * timezone: America/New_York
YAML loops
Pipeline loop
Use loop to select variable keys to iterate over, with values separated by newlines or commas. Each value triggers a separate pipeline run. When multiple keys are listed, all combinations are executed.
Learn more about pipeline loop in the full documentation.
yaml- pipeline: "Deploy to Production" refs: - "*" loop: - deployment_strategy - region variables: - key: deployment_strategy value: "canary, rolling" - key: region value: | eu-west us-east ap-south
Action loop
Select variable keys to iterate over, with values separated by newlines or commas. Each value triggers a separate action run. With multiple keys, all combinations are executed.
yamlactions: - action: Test on Node $node_version type: BUILD loop: - node_version docker_image_name: node docker_image_tag: $node_version execute_commands: - npm install - npm test shell: BASH variables: - key: node_version value: "18, 20, 22"
Last modified on Apr 22, 2026