简体   繁体   中英

jenkins - how to pass a value from bash to groovy?

I'm working on a jenkins install with two script components. The bash bits run first and then groovy . I'd like to be able to pass a value (property? Other?) from the bash script->groovy script.

Is this possible? Do I need to write the value to a property file and read it back in groovy?


EDIT: my goal from this was to generate a build # in bash and pass this to groovy so I could set the description and build # in the jenkins display. It appears that groovy isn't available on the build server so I'm looking for another direction. Currently experimenting with the 'postbuild' plugin and the 'env-inject' plugin. Open to suggestions.

Here are a few things to consider to make this successful:

  1. Make sure you're trying to accomplish this with one "Execute shell" in Jenkins or from a script.
  2. Export the shell variable so that the variable will be present in the child process that will execute your groovy script.
# foo.sh
export foo=bar
groovy myscript.groovy
# myscript.groovy
def env = System.getenv()
String myvar=env['foo']
println myvar

Running foo.sh should produce the following:

./foo.sh
bar

If for some reason you prefer not to export the variable (there may be good and valid reasons for this), you can still explicitly pass the variable to the groovy script as a "system property":

# foo.sh
foo=bar
groovy -Dfoo="$foo" yourscript.groovy

# yourscript.groovy
String yourvar = System.properties['foo']
println yourvar

which produces the following results:

$ ./foo.sh
bar
$ 

The best way is setting an environment variable to share the information from bash into groovy. You could pipe things as well using standard in/out as well.

So if you are setting the env in a bash script it wont be available outside of that script. Instead of doing a bash script put the script inline in your command in jenkins. Run your bash code then call the groovy script.

Something like below

#do somebash scripting
VARIABLE="something"

#call your groovy code
groovy util.groovy

your groovy code (util.groovy):

String variable = env['VARIABLE']

I just worked on this problem for days and thought I might share what I discovered. I had to access a variable in a groovy file from a .sh file and had difficulty at first grabbing the variable. There is a simple way to do it, though. Here's what I did:

In your bash file, save the value in a variable. Then in the groovy script, do this:

variableToGet = sh(returnStdout: true, script: """
                . ${DIRECTORY}/bash_file.sh
                echo \$VARIABLE
            """).trim()

Hope this helps. This problem was a good challenge! It's important to note, however, that standard out will return a String, regardless of what type of variable you are grabbing. If you need to use an integer value, you can then use the integer value with Integer.parseInt(variableToGet)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM