Jenkins注入环境变量

时间:2015-07-03 09:53:57

标签: java maven jenkins jenkins-plugins

在Jenkins的工作中,我正在做一些驻留在前置步骤构建中的操作,例如执行shell脚本。 通过使用Jenkins插件“EnvInject”,我想将环境变量注入我的maven构建(单元测试),以便可以在我的Java单元测试中使用它们。 在shell脚本中我做了类似的事情:

echo "ip=$IP" >> unit-test.properties

构建Jenkins时输出以下内容:

[EnvInject] - Injecting environment variables from a build step.
[EnvInject] - Injecting as environment variables the properties file path 'unit-test.properties'
[EnvInject] - Variables injected successfully.

但是我的Java代码(单元测试)中没有“ip”变量。当我对System.getProperties() and System.getenv()进行完整打印时,我没有看到“ip”被列入。

我是否需要对maven执行任何特殊操作才能将变量传递给我的Java代码?还有别的错吗?

从这一点开始,我几乎陷入困境,我确实希望从前面的步骤中注入一个key=value到我的Java代码中。

2 个答案:

答案 0 :(得分:11)

我的解决方案:

创建一个"构建一个自由风格的软件项目"。

  1. Jenkins>新商品>构建自由式软件项目
  2. 添加第一步:执行shell @ Build,并将echo key=value对回显到.properties文件
  3. 添加第2步:注入环境变量,使用步骤2中定义的.properties文件
  4. 添加第3步:调用顶级Maven目标
  5. 可以使用步骤#2中定义的key访问所有自定义环境变量。 这是我发现从shell到java注入环境变量的唯一方法。

    As explained.

答案 1 :(得分:0)

我的项目有类似的要求,除了我的项目是Maven。要使用jenkins中的变量值到我的java代码,我使用了 -DargLine =" -DEnv = $ Environment" " Build-> Advanced-> JVM选项&#34 ;.从我的java代码中,我获得了" Env"的价值。使用System.getProperty()。仅供参考"环境"是我的Jenkins变量," Env"是变量,它将从jenkins传递的值存储到其变量(Environment)中,并使用System.getProperty()在java代码中获取。