Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.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
Path 竹:如何在构建的根进程中设置路径/环境变量?_Path_Environment_Bamboo - Fatal编程技术网

Path 竹:如何在构建的根进程中设置路径/环境变量?

Path 竹:如何在构建的根进程中设置路径/环境变量?,path,environment,bamboo,Path,Environment,Bamboo,(5.5.1,Windows构建代理) 我们的Bambol服务器为许多项目运行构建,这些项目对路径/环境变量的要求各不相同。一个主要的例子是一些作业需要Python3,另一些作业需要Python2。Python“pip”通过调用“Python.exe”激活Python解释器,而不提供选择Python 2或3的路径;它会选择路径中首先出现的任何东西——这可能是错误的,所以pip失败了 我们已经创建了一个在每个作业中首先运行的可执行文件,通过为作业设置适当的“toobox”来配置环境(这里,“工具箱

(5.5.1,Windows构建代理)

我们的Bambol服务器为许多项目运行构建,这些项目对路径/环境变量的要求各不相同。一个主要的例子是一些作业需要Python3,另一些作业需要Python2。Python“pip”通过调用“Python.exe”激活Python解释器,而不提供选择Python 2或3的路径;它会选择路径中首先出现的任何东西——这可能是错误的,所以pip失败了

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

因此,我们让“设置工具箱”可执行文件生成一个脚本文件(.bat)作为输出,以使母进程作为脚本运行,以便同一作业中的后续任务(子进程)继承适当的路径/环境设置

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

任务1是一个可执行文件,它使用所有设置的命令(包括PATH)生成.bat文件

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

任务3是另一个竹子脚本任务,显示所有环境变量,包括路径

但任务2“脚本”未更改%PATH%或其他环境变量。这种行为就好像根进程启动子进程来运行Task2脚本(而不是寻找指定的文件),一旦“脚本”解释完成,对该子进程的环境更改就会被丢弃。它的行为根本不像脚本(因此为“s!”),而是作为子进程

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

是否有任何方法可以使根进程源脚本(即.bat文件)为其未来的子进程更改其自身的路径/环境

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

注2:可执行文件可以在注册表中设置永久路径/变量,但这对不读取注册表但依赖于从其母进程继承的值的工具没有帮助。要使注册表更改生效,必须重新启动代理进程

注3:如果以下任务是脚本,那么其中的每一个(而不是根进程)都可以生成生成的.bat文件。这不适用于“二进制”任务,或者由于其他原因无法修改自身环境的任务

注4:路径/环境变化是高度动态的;它们不能在作业规范中配置(例如,刀具位置可能因代理运行作业而不同),也不能在代理级别指定(不同的作业有不同的要求,例如路径顺序)

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

一些与此类似的老问题的答案是“使用脚本任务!”这正是我正在做的。如果这是答案,请告诉我如何运行一个脚本任务来修改环境,然后再运行另一个任务来显示更改。对我来说不是这样的