将变量从 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 很重要。
我从 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 很重要。