Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在特殊的shell环境中运行Jenkins ant build_Ant_Hudson_Jenkins - Fatal编程技术网

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

在特殊的shell环境中运行Jenkins ant build,ant,hudson,jenkins,Ant,Hudson,Jenkins,我们的内部构建系统使用shell脚本来设置构建项目的环境。然后,实际的构建工具(ant或make)可以引用环境变量来配置各种东西。本质上,它确实: $ /path/to/setup_env.sh . [build env] $ ant compile 注意,第一个命令启动并初始化一个新的shell,并期望在该shell中执行所有后续的构建操作 现在我正试图在詹金斯身上复制同样的东西。如何运行shell脚本,然后在同一环境中执行后续的ant构建步骤 内置的“Execute Shell”和EnvI

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

$ /path/to/setup_env.sh .
[build env] $ ant compile
注意,第一个命令启动并初始化一个新的shell,并期望在该shell中执行所有后续的构建操作

现在我正试图在詹金斯身上复制同样的东西。如何运行shell脚本,然后在同一环境中执行后续的ant构建步骤

内置的“Execute Shell”和EnvInject插件没有帮助,因为它们在进入下一个构建步骤之前放弃了对环境的任何更改

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

试试。

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

步骤1-执行Shell 使用内置的“Execute Shell”Jenkins运行我们的
setup\u 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'

/path/to/setup\u env.sh。您是否尝试过将这两个项都放在一个构建步骤中?将它们组合到一个shell脚本中?问题是第一步启动一个新shell,并期望在该shell中执行后续步骤。我将用这个细节来更新这个问题。我到底如何使用EnvInject?使用EnvInject运行shell脚本时,它实际上不会保留脚本执行的任何环境修改。这是记录在案的行为。我本应该猜到这么多——否则这个问题就没有意义了。您可以稍微重写shell脚本,让它接受一个参数,该参数告诉它不要启动子shell,并在最后退出(我们称之为
andexit
)。然后你说:
sourcesetup\u env.sh andexit
。环境变量现在位于父shell中。人们仍然可以在没有参数的情况下使用它。“您可以稍微重写shell脚本”-只要!!:-)如果你以优雅的方式解决了问题,请发布你的解决方案并“ping”我。酷!我曾想过以某种方式将变量导出到文件中,但不知道可以将可执行文件“注入”到脚本中。事实上,我不熟悉