【发布时间】:2018-11-22 06:31:37
【问题描述】:
我们开始将旧的 xaml 构建定义迁移到 VSTS 基于 Web 的构建定义。对于每个分支,我们都有一个 debug build def 和一个 release build def。调试构建定义设置为持续集成构建。作为测试,我修改了一个源文件并将其签入。旧的 xaml build def 签出了 1 个文件,并且似乎只构建了更改的项目(我们在 CI 构建中想要和期望的)。在 xaml 构建日志中,我看到以下内容:
<InformationField Name="Message" Value="1 file(s) were downloaded with a total size of 0.29 MB." />
它在 3.3 分钟内运行构建。
在新的 VSTS 版本中 - 我看到它执行“tf get /version:170936”并获取变更集 ID“170936”中的所有文件:
2018-06-12T15:08:39.8409262Z Checking if artifacts directory exists: C:\BuildAgent\agent2\_work\1\a
2018-06-12T15:08:39.8409262Z Deleting artifacts directory.
2018-06-12T15:08:39.8409262Z Creating artifacts directory.
2018-06-12T15:08:39.8564882Z Checking if test results directory exists: C:\BuildAgent\agent2\_work\1\TestResults
2018-06-12T15:08:39.8564882Z Deleting test results directory.
2018-06-12T15:08:39.8564882Z Creating test results directory.
2018-06-12T15:08:39.8877401Z Starting: Get sources
2018-06-12T15:08:39.9033640Z Entering TfvcSourceProvider.PrepareRepositoryAsync
2018-06-12T15:08:39.9033640Z localPath=C:\BuildAgent\agent2\_work\1\s
2018-06-12T15:08:39.9033640Z clean=False
2018-06-12T15:08:39.9033640Z sourceVersion=170936
2018-06-12T15:08:39.9033640Z mappingJson={"mappings":[{"serverPath":"$/Path/To/Branch","mappingType":"map","localPath":"\\"}]}
2018-06-12T15:08:39.9033640Z Syncing repository: Project Name (TFVC)
2018-06-12T15:08:39.9033640Z workspaceName=ws_1_45
2018-06-12T15:09:06.7318304Z Workspace Name: ws_1_45;a6060273-b85e-4d4b-ac63-3fbbcafc308b
2018-06-12T15:09:06.7630780Z tf get /version:170936
2018-06-12T15:09:21.6070136Z Getting C:\BuildAgent\agent2\_work\1\s;C124440
2018-06-12T15:09:21.6070136Z Getting C:\BuildAgent\agent2\_work\1\s;C124440
2018-06-12T15:09:21.6226405Z Getting C:\BuildAgent\agent2\_work\1\s\.nuget;C158533
2018-06-12T15:09:21.6226405Z Getting C:\BuildAgent\agent2\_work\1\s\Build Scripts;C141602
2018-06-12T15:09:21.6226405Z Getting C:\BuildAgent\agent2\_work\1\s\Databases;C124440
~
~ The rest of branch...
~
然后似乎重建所有项目需要 13.2 分钟才能运行,比旧的 xaml 构建长了近 10 分钟。
我是否缺少新构建定义的某些内容?我没有在 VS Build 任务中选中“清理”按钮。我确实有一个 build.clean 变量,但默认情况下它是空白的 - 有时我们想要清理,所以我们可以在排队时将其设置为“全部”。
在网络上点击 about 会显示以下 MS VSTFS 版本:15.105.25910.0
非常感谢任何帮助。
【问题讨论】:
-
我不确定到底是什么问题。如果它是第一次在给定的构建代理上运行,它自然必须同步所有源代码。如果您的步骤指定构建某些项目,它将构建所有这些项目。这与 XAML 构建所展示的行为相同。
-
问题是 - 在我的 xaml CI 构建定义中,在构建日志中,我在整个日志中看到以下内容,并且它不会重建自上次签入以来未更改的任何项目:“所有输出都是最新的。”在新的 Web 构建日志中 - 当我希望看到相同的内容时,它会重新构建所有项目。
-
当您使用相同的变更集多次排队构建时是否总是发生这种情况?
-
是的,它似乎做了一个完整的获取,您可以看到所有文件及其对应的变更集 ID 的 C{###}。当我转到源目录时,我会看到所有带有今天日期的文件。当我重新运行构建时,我看到了同样的事情。旧的 xaml Build Def - 只有更改的文件才有今天的日期。就像我说的那样,旧的 build def build 需要大约 3 分钟来运行构建,而新的 build def 需要超过 13 分钟才能运行 - 这告诉我它正在重建所有项目,而旧的只构建已更改的项目 -这是预期的结果。
-
根据您的描述,似乎构建实际上并没有执行增量构建(Clean 选项已禁用,Clean = Flase),看看这个线程Clean the local repo on the agent 是您使用多个构建代理?此构建可能不会每次都针对同一个构建代理运行。这可能是根本原因。
标签: tfs continuous-integration azure-devops