我正在使用两个脚本组件进行jenkins安装。首先运行 bash 位,然后运行 groovy 。我希望能够从bash script-> groovy脚本中传递一个值(属性?其他?)。
这可能吗?我是否需要将值写入属性文件并在groovy中读回来?
答案 0 :(得分:3)
要想成功,需要考虑以下几点:
# foo.sh
export foo=bar
groovy myscript.groovy
# myscript.groovy
def env = System.getenv()
String myvar=env['foo']
println myvar
运行foo.sh应该产生以下内容:
./foo.sh
bar
答案 1 :(得分:2)
如果由于某种原因你更喜欢不来导出变量(这可能有正当理由),你仍然可以显式地将变量传递给groovy脚本作为“系统属性”:
# foo.sh
foo=bar
groovy -Dfoo="$foo" yourscript.groovy
# yourscript.groovy
String yourvar = System.properties['foo']
println yourvar
产生以下结果:
$ ./foo.sh
bar
$
答案 2 :(得分:1)
最好的方法是设置一个环境变量,将bash中的信息共享到groovy中。您也可以使用标准输入/输出管道。
因此,如果您在bash脚本中设置env,则不会在该脚本之外提供。而不是做一个bash脚本,而是将脚本内联到jenkins的命令中。运行你的bash代码,然后调用groovy脚本。
如下所示
#do somebash scripting
VARIABLE="something"
#call your groovy code
groovy util.groovy
你的groovy代码(util.groovy):
String variable = env['VARIABLE']
答案 3 :(得分:1)
我刚刚解决了这个问题已经好几天了,我想我可能会分享我发现的东西。我不得不从.sh文件中访问groovy文件中的变量,并且在第一次抓取变量时遇到了困难。但是,有一种简单的方法可以做到这一点。这是我做的:
在bash文件中,将值保存在变量中。然后在groovy脚本中,执行以下操作:
variableToGet = sh(returnStdout: true, script: """
. ${DIRECTORY}/bash_file.sh
echo \$VARIABLE
""").trim()
希望这会有所帮助。这个问题是一个很好的挑战!然而,重要的是要注意,标准输出将返回一个字符串,无论你正在抓取什么类型的变量。如果需要使用整数值,则可以将整数值与Integer.parseInt(variableToGet)