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

Dee*_*rda 6 ant hudson jenkins

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

$ /path/to/setup_env.sh .
[build env] $ ant compile
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

Dee*_*rda 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'
Run Code Online (Sandbox Code Playgroud)

第2步 - 注入环境变量

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

第3步 - 调用Ant

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