将变量从 shell 脚本传递给詹金斯

Passing variable from shell script to jenkins

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

求推荐!!

您提到您正在 shell 脚本中导出 DATE 环境变量,该脚本可能是通过 "Execute shell" 步骤启动的。

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

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

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

echo DATE=$(date +%Y-%m-%d) > env.properties

然后您可以添加一个 "Inject environment variables for your job" 构建步骤,并在 "Environment Properties File Path" 字段中输入 env.properties

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

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

foo = sh(
  returnStdout: true, 
  script: 'date'
)

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

编辑:这是管道作业,不是自由式作业。

我遇到了同样的问题。 对我有用的解决方案是:

env.ABC=bat(returnStdout: true, 
script: '''  @echo off echo abc ''').trim()

如果您想在另一个批处理脚本中重用变量,.trim() 和 @echo off 很重要。