将变量从shell脚本传递给jenkins

use*_*823 33 jenkins jenkins-plugins

我从Jenkins触发一个shell脚本,这个脚本获取日期并将其导出为环境(Linux)变量$ DATE.我需要在同一个Jenkins工作中使用这个$ DATE.我做了参数构建工作.创建一个字符串参数作为DATE值DATE = $ DATE.但它没有用.

请建议!!

Chr*_*Orr 77

您提到您正在DATEshell脚本中导出环境变量,这可能是通过"执行shell"步骤启动的.

问题是,一旦shell步骤完成,该环境就消失了 - 变量将不会转移到后续的构建步骤.
因此,当您稍后尝试使用该$DATE值时 - 无论是在另一个构建步骤中,还是作为另一个作业的参数 - 该特定环境变量将不再存在.

您可以做的是使用EnvInject插件在构建期间导出环境变量.使用此插件设置的变量将可用于所有后续构建步骤.

例如,您可以DATE在一个构建步骤中将属性字段写入:

echo DATE=$(date +%Y-%m-%d) > env.properties
Run Code Online (Sandbox Code Playgroud)

然后,您可以添加"为作业注入环境变量"构建步骤,并env.properties在"环境属性文件路径"字段中输入.

这样,DATE变量(以及该属性文件中的任何其他内容)将被导出,并且对其余构建步骤可见.

  • 谢谢.遗憾的是Jenkins默认不支持此功能.我试图找到的是一种更好的方法,可以在一个命令中自动将shell脚本中设置的所有变量输出到属性文件中.我的工作之一是根据目录,文件名,时间戳等创建大约15个变量.然后我需要15个echo命令输出到属性文件.如果我要添加其他变量,我还需要确保它们被输出.能够运行类似于"env"的命令会输出所有定义的变量,这将是很好的. (2认同)

Dam*_*per 11

您可以使用赋值语句和 sh 的 returnStdout 来获取 Jenkins 中的值,而无需写入属性文件。

foo = sh(
  returnStdout: true, 
  script: 'date'
)
Run Code Online (Sandbox Code Playgroud)

然后在 Jenkinsfile 中,您可以像使用任何其他变量一样使用 $foo。

编辑:这是一个管道工作,而不是一个自由式工作。