Bamboo:如何在构建的根进程中设置PATH /环境变量?

时间:2016-05-24 16:12:06

标签: path environment bamboo

(Bamboo 5.5.1,Windows构建代理)

我们的Bamboo服务器为多个项目运行构建,这些项目对PATH /环境变量有不同的要求。一个主要的例子是一些需要Python 3的工作,其他需要Python 2的工作.Python' pip'通过调用' python.exe'来激活Python解释器,而没有给出选择Python 2或3的路径;它需要PATH中的第一个 - 这可能是错误的,所以pip失败了。

我们已经创建了一个可执行文件,可以在每个作业中首先运行,通过设置正确的“toobox”来配置环境。对于这项工作(这里,工具箱'是一个文件,其中列出了所有工具及其版本;描述文件指定了每个工具所需的环境。)可执行文件为所有工具设置所需的文件系统链接工具正常工作。但它无法设置PATH /环境变量。或者更确切地说:它可以设置/修改它们,但是当运行可执行文件的进程终止时,一切都会丢失 - 一个进程无法改变其进程的环境。以下任务(在相同的工作中,在同一个代理上)将从母进程继承初始的,未修改的PATH /环境。

因此我们设置了工具箱'可执行文件生成一个脚本文件(.bat)作为输出,母进程作为脚本运行,以便相同的PATH /环境设置由同一作业中的后续任务(子进程)继承。

显然,在Bamboo中,脚本任务不是脚本。我做了一个小测试工作:

任务1是生成带有所有SET命令(包括PATH)的.bat文件的可执行文件。

任务2是一个Bamboo"脚本"任务运行生成的文件。日志显示它已正确执行;执行SET命令。

任务3是另一个显示所有环境变量的Bamboo脚本任务,包括PATH。

但是,任务2"脚本"都没有改变%PATH%和其他环境变量。行为就好像根进程启动子进程来运行任务2脚本(而不是获取指定的文件),并且只要"脚本"脚本就会丢弃对该子进程的环境更改。口译完成。它根本不像脚本(因此"" s!),但作为子进程。

当我在cmd.exe shell中执行以下三个步骤时:1)生成setvars.bat,2)运行setvars.bat,3)SET,以显示当前变量, - 然后一切正常,完全符合预期。这就是我追求的行为;我希望Bamboo root进程执行与cmd.exe相同的操作。

有什么方法可以让根进程源脚本(即.bat文件),为其未来的子进程更改自己的PATH /环境?

注1:Python 2/3示例只是一个问题的示例;特定于Python的解决方案只能满足一小部分需求。

注意2:可执行文件CAN在注册表中设置永久PATH /变量,但这不会帮助那些不读取注册表但依赖于从其母进程继承的值的工具。要使注册表更改生效,您必须重新启动Bamboo代理程序。

注意3:如果以下任务是脚本,则每个脚本(而不是根进程)都可以获取生成的.bat文件。这对于二元'不会起作用。由于其他原因无法修改自己的环境的任务或任务。

注4:PATH / enviromnent变化是高度动态的;它们不能在作业规范中配置(例如,工具位置可能因代理运行作业而异),并且不能在代理级别指定(不同的作业有不同的要求,例如PATH顺序)。

我不一定使用旧的MS-DOS .bat命令格式;如果我可以使用其他命令语言来设置根进程环境,那对我来说没问题 - 但是必须有一种方法可以使根进程本身运行命令,而不是在子进程中运行。

一些与此类似的旧问题正由#34;使用脚本任务来回答!"这正是我在做的事情。如果这是答案,请告诉我如何运行一个修改环境的脚本任务,然后显示另一个显示更改的任务。它对我来说不是这样的工作方式!

0 个答案:

没有答案