environment-variablesbitbucket-pipelines

Make variable visible across steps in Bitbucket pipelines?


I would like to share a variable across two steps.

I define it like:

- export MY_VAR="FOO-$BITBUCKET_BUILD_NUMBER"

but then when I try to print it in other step:

- echo $MY_VAR

it's empty.

How I can share such variable?


Solution

  • April 2025: now it's possible without tricks

    You can now export variables and use them in all subsequent steps as shown below.

    pipelines:
      default:
        - step:
            name: Export Variable
            script:
              - echo "VAR_1=12345" >> $BITBUCKET_PIPELINES_VARIABLES_PATH
            output-variables:
              - VAR_1
        - step:
            name: Use Variable
            script:
              - echo $VAR_1
    

    The feature was first released and explained on 31st of March 2025: [Atlassian News Blog] Easily share data between steps in Bitbucket Pipelines.

    This feature is explicitly meant to replace the old way:

    Previously, sharing variables between steps required more effort than desired, doing things like saving variables in an artifact file and using that artifact in subsequent steps. With this new feature, you can now share variables seamlessly and efficiently, reducing complexity and potential errors in your pipeline configurations. ~ the Blog article

    Read the docs: Output Variables step option (in Bitbucket Pipelines configuration reference).


    Responding to a comment, that it wouldn't work with anchored steps: I've found that it does work for anchored steps, too.

    I tested it in a branch test-output-variables-and-anchors:

    definitions:
      steps:
        - step: &output-variables
            name: Export Variable
            script:
              - echo "VAR_1=12345" >> $BITBUCKET_PIPELINES_VARIABLES_PATH
              - echo "VAR_2=67890" >> $BITBUCKET_PIPELINES_VARIABLES_PATH
            output-variables:
              - VAR_1
              - VAR_2
    
        - step: &log-variables
            name: Log Variables
            script:
              - echo $VAR_1
              - echo $VAR_2
    
    pipelines:
      branches:
        test-output-variables-and-anchors:
          - step: *output-variables
          - step: *log-variables
    

    This worked and flawlessly did output the VAR_1 and VAR_2 values correctly in the second step.