【问题标题】:Jenkins EnvInject build stepJenkins EnvInject 构建步骤
【发布时间】:2013-08-06 08:33:33
【问题描述】:
我有一份 Jenkins 工作,正在做以下事情(除其他外):
- 读取用户输入的 ENVIRONMENT 和 SERVERTYPE
- 注入环境变量 AGENT(最初为空白)作为构建步骤来创建
一个新变量
- 根据输入的内容执行 shell 作为构建步骤以填充 AGENT
在环境和服务器类型中
- 使用 AGENT 作为插件的输入作为构建后操作
问题在于 AGENT 的值似乎不会在“执行 shell”构建步骤之外持续存在。当我尝试将它传递到构建后操作插件时,它仍然是空白的。
谁能指出我做错了什么?我已经阅读了文档,但似乎无法弄清楚。
【问题讨论】:
标签:
jenkins
jenkins-plugins
【解决方案1】:
您的问题是,无论您在 shell 脚本中设置什么变量,它们都无法显示出来。
对于任何进程都是如此:子进程(您的 shell 脚本)永远不会直接影响父进程(Jenkins 执行程序客户端)的环境。
如果需要数据持久化,则需要将其存储在脚本之外;有很多选项,例如将其上传到服务器或将其存储在数据库中,最明显和最简单的选项是将其保存到文件中。
您甚至可以使用 EnvInject 支持的语法将值保存到“属性文件”,并在“属性文件路径”字段中指定路径。
【解决方案2】:
您需要使用要再次注入的环境变量的值填充属性文件,这样它们才能在构建后操作之前继续存在。属性文件通常位于作业的工作区中。
例如使用以下步骤:
- 构建步骤“执行 shell”:
AGENT="My agent"
echo AGENT=$AGENT > my.properties
构建步骤:“注入环境变量”,
字段“属性文件路径”:
$WORKSPACE/my.properties
构建后操作:“可编辑电子邮件通知”,字段“默认内容”:
Current Agent $AGENT
Or ${ENV, var="AGENT"}