繁体   English   中英

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

[英]jenkins - how to pass a value from bash to groovy?

我正在使用两个脚本组件进行詹金斯安装。 bash位运行,然后再时髦 我希望能够从bash脚本-> groovy脚本传递一个值(属性?其他?)。

这可能吗? 我是否需要将该值写入属性文件并以常规方式读回?


编辑:我的目标是在bash中生成一个build#并将其传递给groovy,以便我可以在jenkins显示中设置描述并构建#。 看来groovy在构建服务器上不可用,所以我正在寻找另一个方向。 目前正在尝试使用“ postbuild”插件和“ env-inject”插件。 公开征求意见。

要使此成功,请考虑以下几点:

  1. 确保您尝试使用Jenkins中的一个“执行外壳”或通过脚本来完成此操作。
  2. 导出shell变量,以便该变量将出现在将执行groovy脚本的子进程中。
# 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

如果出于某种原因而不希望导出变量(可能有充分而有效的理由),则仍可以将变量作为“系统属性” 显式传递给groovy脚本:

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

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

产生以下结果:

$ ./foo.sh
bar
$ 

最好的方法是设置一个环境变量,以将信息从bash共享到groovy。 您也可以使用标准输入/输出来传送内容。

因此,如果您在bash脚本中设置env,则在该脚本之外将无法使用它。 不用执行bash脚本,而是在jenkins的命令中内联该脚本。 运行您的bash代码,然后调用groovy脚本。

像下面这样

#do somebash scripting
VARIABLE="something"

#call your groovy code
groovy util.groovy

您的常规代码(util.groovy):

String variable = env['VARIABLE']

我只是在这个问题上工作了几天,以为我可以分享我发现的东西。 我必须从.sh文件访问groovy文件中的变量,并且在第一次抓取变量时遇到了困难。 不过,有一种简单的方法可以做到这一点。 这是我所做的:

在bash文件中,将值保存在变量中。 然后在常规脚本中执行以下操作:

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

希望这可以帮助。 这个问题是一个很好的挑战! 需要特别注意的是,无论您要获取哪种类型的变量,标准输出都将返回String。 如果需要使用整数值,则可以将整数值与Integer.parseInt(variableToGet)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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