How I can access global and/or plan specific variables from python scripts, if they are called by a remote agent?
Asked by Michael Roettger:

Hello. I'm currently evaluating Bamboo for our build equipment. We have mostly python scripts to run different steps. My current issue is, how I can access global and/or plan specific variables by the python scripts, if they are called by a remote agent?

I read your documentation about the usage of global variables but I don't see the link to python. I wouldn't like to use an environment variable because this must be defined for each task. I'm looking for a solution which works for a entire plan, where I can access e.g. on the subversion revision number or the build number.

Thanks for any help.


Answers:
author: AjayA
body: Hi Michael,

Bamboo wil pass down any build specific variable/global variable you have defined to your build. If you don't want to specify a global Bamboo variable then you can specify a plan specific variable as per;

http://confluence.atlassian.com/display/BAMBOO/Defining+Plan+Variables

You can then access this variables using a simlar code;

```
import os
print  os.environ['foo']
```

Hope that help! Let me know if you have any question?

Regards

Ajay.

comments: author: Michael Roettger
body: Hi Ajay. Thanks so far for the fast answer.To ensure I understand it right, if I create a bamboo variable called 'planx.myvariable' I can access on it by python with os.environ\['planx.myvariable'\]?This would also mean, that I can access on bamboo specific variables like os.environ\['bamboo.repository.revision.number'\]. Right?RegardsMichael


author: Michael Roettger
body: Hi Ajay.  
Thanks for the fast answer. To ensure I understand it right, if I create a plan specific variable called 'planx.myvariable' I can access on it by python with os.environ\['planx.myvariable'\]?  
This would also mean, that I can access on bamboo specific variables like os.environ\['bamboo.repository.revision.number'\]. Right?  
Regards  
Michael


author: Jeremy Largman
body: Hi Michael, I converted your answer to a comment, since it's better placed here inline with Ajay's answer.


author: James Dumay
body: Hi Michael, yes you can. However all variables in bamboo are prefixed with 'bamboo.'. So your 'planx.myvariable' becomes 'bamboo.planx.myvariable'


author: Archana Balasanjeevi
body: os.environ\['bamboo.repository.revision.number'\] does not work for me in python. I am getting the below error.

bwd=os.environ\['bamboo.build.working.directory'\]

File "/usr/lib/python2.7/UserDict.py", line 23, in __getitem__

raise KeyError(key)

KeyError: 'bamboo.build.working.directory'

<br />


author: sodoww
body: For anyone who's bothering with the similar problem: in Python ran on Bamboo the os.environ contains Bamboo's variables in form where every dots are replaced with underscores, e.g. variable "bamboo.build.working.directory" should be resolved as: os.environ\["bamboo_build_working_directory"\]


author: ashleyg
body: i still get error not sure why.

i get error  
Traceback (most recent call last):  
File "\<stdin\>", line 3, in \<module\>  
File "/usr/lib64/python2.6/UserDict.py", line 22, in __getitem__  
raise KeyError(key)  
KeyError: ''

Is there a way to successfully invoke bamboo plan variables within a python inline script just like it works for a shell or batch script.

Any help here would be greatly appreciated.

Cheers,

Ashley


author: raju
body: Is this issue resolved now? I am still looking for a proper solution to this.


author: Klevin Kona
body: This is a way to call bamboo variables inside python script

print(os.environ\['bamboo_NAME_OF_THE_VARIABLE\])


author: karel
body: can you change the value of a variable?