[英]What is the reason behind the multitude of NuGet.exe versions within the Tfs build agent folder?
我正在努力了解Tfs的VNext版本如何在后台处理NuGet.exe版本。
我正在运行Tfs 2018(16.122.27102.1)本地服务器。 我的代理在计算机上的“ C:\\ dev \\ tfs_bld_agents \\ scully \\”位置(作为Windows服务)运行
如果我对它的理解正确,那么“ Nuget工具安装程序”(1)将确保在由代理执行此构建定义的位置安装在构建任务(在本例中为4.3.0)中指定的NuGet.exe版本。
随后的后续构建任务“ NuGet Restore”(2)将运行由先前构建任务(1)安装的NuGet.exe,并将执行NuGet restore命令。
但是,如果我在磁盘“ C:\\ dev \\ tfs_bld_agents \\ scully \\”上搜索构建代理的根文件夹,则会找到一系列不同版本的NuGet.exe。
出现此行为的原因是什么,即在构建代理文件夹中包含所有这些不同版本,并且看到由我的构建定义指定的NuGet.exe版本仅为4.3.0版本?
假设我们例如不(或不能在较旧的Tfs版本中)运行“ NuGet Tool Installer”构建任务,那么Tfs构建代理将如何确定在计算机上的哪里找到NuGet.exe?
默认情况下,这些NuGet.exe版本包含在NuGet Tool Installer
任务和NuGet
任务中。 在对构建进行排队时,构建代理会下载构建所需的任务,然后您将看到这些NuGet.exe版本。
因此,我进行了一些测试,以尝试跟踪在“ Nuget工具安装程序” Tfs构建任务中使用不同版本的NuGet时发生的情况。 对于基线,使用了Tfs2018(16.122.27102.1)构建代理(类型服务),只需将其提取并配置即可。
配置生成代理后,您的代理目录中将包含以下NuGet.exe:NuGet.exe版本:3.3.0(3.3.0.0212)-注意:这是在配置代理之后,此处未运行任何生成!
然后,我继续设置将由Agent mulder执行的构建定义。 构建定义包含“ NuGet工具安装程序”构建任务。 我的第一个尝试是指定NuGet 2.8.6,然后运行“ NuGet工具安装程序”构建任务。
完成此任务后,我们会在构建代理文件夹中找到以下NuGet.exe工件:
从现在开始,就您指定的版本而言,就NuGet.exe版本而言,... \\ _ tasks \\文件夹的内容似乎保持不变。
唯一明显的变化是,在此位置... \\ _ tool \\ NuGet \\ {请求的版本} \\ x64 \\ nuget.exe中添加了每个新版本。 因此,如果我们在“ NuGet工具安装程序”构建任务中精心选择每个可能的版本并运行它,我们将最终得到如下所示的扩展:
关于由运行“ NuGet工具安装程序”构建任务的代理产生的日志记录,引人注目的是在NuGet版本中的每次切换之后,都会显示以下消息: 前置PATH环境变量 。 我假设目的是指向磁盘上选定的NuGet.exe版本。 对于版本2.8.6,我们看到以下内容:
Prepending PATH environment variable with directory: C:\TfsBuild\mulder\_work\_tool\NuGet\2.8.6\x64
那么,如果我们还原到特定版本会发生什么? 假设从v4.5.1到v2.8.6-是否清理某些版本? 不会。它会保留所有内容,但会再次修改PATH变量以指向您还原到的正确版本。
Prepending PATH environment variable with directory: C:\TfsBuild\mulder\_work\_tool\NuGet\2.8.6\x64
一个有趣的现象是您在PATH环境变量中看不到这些“正在执行”的更改。 但是,如果您运行内置调试(通过将system.debug变量翻转为true),则会看到一些有趣的细节。 这次,我可以看到变量确实在现有PATH变量(在环境变量GUI中可见)的前面,以及最后两个。
调试日志记录如下所示:
Prepending PATH environment variable with directory: C:\TfsBuild\mulder\_work\_tool\NuGet\2.8.6\x64
new Path:
C:\TfsBuild\mulder\_work\_tool\NuGet\2.8.6\x64;
C:\TfsBuild\mulder\externals\git\cmd;
.
..
<The existing paths variables>
..
.
C:\TfsBuild\mulder\bin;
C:\TfsBuild\mulder\bin
因此,它似乎是检索现有的PATH环境变量,然后在运行构建时将“新的”必需变量插入它们的前面。
显然,Tfs构建非常擅长确保始终有正确版本的NuGet.exe,但是清理旧版本并不是它的强项:-)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.