在特殊的shell环境中运行Jenkins ant build

时间:2012-02-15 02:48:28

标签: ant hudson jenkins

我们的内部构建系统使用shell脚本来设置构建项目的环境。然后实际的构建工具(ant或make)可以引用环境变量来配置各种事物。从本质上讲,它确实:

$ /path/to/setup_env.sh .
[build env] $ ant compile

请注意,第一个命令启动并初始化一个新shell,并期望在该shell中执行所有后续构建操作。

现在我试图在Jenkins中复制相同内容。如何运行shell脚本,然后在同一环境中进行后续的ant构建步骤?

内置的'Execute Shell'以及EnvInject插件没有帮助,因为它们在转移到下一个构建步骤之前放弃了对环境的任何更改。

我不想修改ant构建文件,因为它应该继续在当前的内部构建系统中工作。

2 个答案:

答案 0 :(得分:5)

这是一个为我们制定的“解决方案”。关键的想法是setup_env.sh脚本启动一个新的shell,在其中导出一堆环境变量。我们需要的是访问这些变量定义。所以我们做了三部分Jenkins Build:

第1步 - 执行Shell

使用内置的'Execute Shell'Jenkins来运行我们的setup_env.sh脚本。然后为新启动的shell提供一个简单的python脚本,将环境转储到文件中。

/path/to/setup_env.sh . <<< 'python <<SC
print "Exporting env to buildenv.properties file"
import os
f = open("buildenv.properties", "w")
env = os.environ
for k in env:
  f.write("%s=%s\n" % (k, env[k]))
f.close()
print "Done exporting env"
SC'

第2步 - 注入环境变量

现在我们使用EnvInject Plugin从上一步骤中转储的文件中注入环境变量。这里的配置很简单,只需将转储的属性文件名指定为Properties File Path字段值。

第3步 - 调用Ant

在这里,我们开始正常的ant构建。由于环境现在包含所有必需的定义,因此构建正常完成。

答案 1 :(得分:1)

尝试EnvInject Plugin