簡體   English   中英

Tfs build agent文件夾中眾多NuGet.exe版本背后的原因是什么?

[英]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。

  • 3.3.0
  • 3.5.0
  • 4.0.0
  • 4.3.0

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安裝程序
  • NuGetToolInstaller
  • 以及我們要求的NuGet版本,位於位置... \\ _ tool \\ NuGet \\ 2.8.6 \\ x64 \\ 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM