Search code examples
shellmaven-3versioningbamboo

Bamboo: Access script variable in subsequent maven task


I have seen many posts where people asking to access Bamboo variables in script but this is not about that.

I am defining a variable in Shell Script task, as below, and then I would like to access that variable in the subsequent maven task.

#!/bin/sh
currentBuildNumber=${bamboo.buildNumber}
toSubtract=1
newVersion=$(( currentBuildNumber - toSubtract ))
echo "Value of newVersion: ${newVersion}"

This one goes perfectly fine. However I have a subsequent maven 3 task where I try to access this variable by typing ${newVersion} I get below error

error   07-Jun-2019 14:12:20    Exception in thread "main" java.lang.StackOverflowError
simple  07-Jun-2019 14:12:21    Failing task since return code of [mvn --batch-mode -Djava.io.tmpdir=/tmp versions:set -DnewVersion=1.0.${newVersion}] was 1 while expected 0

Basically, I would like to automate the version number of the built jar files just by using ${bamboo.buildNumber} and subtracting some number so that I won't have to enter the new version number every time I run a build.

Appreciate your help... thanks,

EDIT: I posted the same question on Atlassian forum too... I will update this post when I get an answer there... https://community.atlassian.com/t5/Bamboo-questions/Bamboo-Access-script-variable-in-subsequent-maven-task/qaq-p/1104334


Solution

  • Generally, the best solution I have found is to output the result to a file and use the Inject Variables task to read the variable into the build.

    For example, in some builds I need a SUFFIX variable, so in a bash script I end up doing

    SUFFIX=suffix=-beta-my-feature
    echo $SUFFIX >> .suffix.cfg
    

    Then I can use the Inject Variables Task to read that file

    Inject Variables Task

    Make sure it is a Result variable and you should be able to get to it using ${bamboo.NAMESPACE.name} for the suffix one, it would be ${bamboo.VERSION.suffix}