jenkins - 如何将值从bash传递给groovy?

时间:2015-04-09 22:35:28

标签: bash groovy jenkins

我正在使用两个脚本组件进行jenkins安装。首先运行 bash 位,然后运行 groovy 。我希望能够从bash script-> groovy脚本中传递一个值(属性?其他?)。

这可能吗?我是否需要将值写入属性文件并在groovy中读回来?


编辑:我的目标是在bash中生成一个构建#并将其传递给groovy,这样我就可以在jenkins显示中设置描述并构建#。似乎groovy在构建服务器上不可用,所以我正在寻找另一个方向。目前正在试验' postbuild'插件和'env-inject'插入。接受建议。

4 个答案:

答案 0 :(得分:3)

要想成功,需要考虑以下几点:

  1. 确保您尝试使用一个"执行shell"在詹金斯或剧本中。
  2. 导出shell变量,以便变量将出现在将执行groovy脚本的子进程中。
  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)

一起使用