当使用Team City快照依赖项时,您是使用快照的后构建文件还是仅仅使用SVN版本号?



我在一个项目中有2个构建配置:

  • 构建,测试代码
  • 部署代码

我希望部署代码仅在构建&成功构建了测试代码,因此我设置了快照依赖项。

快照依赖是否意味着Deploy Code将检出与Build &测试代码,然后对该签出运行NAnt脚本,这将不包含编译器生成的构建后文件?或者,快照依赖于Build &来自部署代码的测试代码意味着NAnt将针对Build &的构建后工作目录文件运行。在构建代理上测试代码?

更新:

似乎如果我把快照依赖于构建&测试代码部署代码,我有一个构建的最新版本的build &测试代码,我的NAnt脚本将为build &测试代码。

我仍然想确认我理解这个概念,因为我不太理解Team City文档。我想我应该确保部署代码运行在与构建相同的构建代理上。测试代码,否则我可能会遇到这样的情况:部署代码签出SVN版本,然后只部署预构建代码文件。这是正确的吗?

我的困惑主要是因为它似乎你必须有一个VCS设置部署代码。这是因为它需要将修订号与快照依赖项进行比较吗?

从依赖构建文档页面的快照依赖部分:

从构建配置A到构建的快照依赖配置B强制A的每个构建都有一个"合适的"构建以便两个构建使用相同的源快照(使用过的源)修订对应于同一时刻)。

因此,快照依赖关系的思想是,您可以在完全相同的代码库上运行构建,因为另一个构建已经成功地运行了

如果你想让"部署代码"构建只在"构建和测试代码"成功运行之后运行,在第二个构建中创建一个快照依赖,并确保它被设置为"只使用来自合适的成功构建"。

请记住,这与人工制品无关;第二次构建将简单地拉出相同的代码库并重新编译。如果您想要部署从第一个构建中创建的工件,那么您想要查看工件依赖项。这正是保罗在他的回答中所写的,也是正确的方法。

关于你的更新,听起来那些后构建文件只是可用的,因为它们在第一次构建后仍然在构建代理上。尝试运行第一个构建,然后在代理上"清理源"并运行第二个构建。您将发现原始的编译输出不再存在,并且会失败。这是很重要的,因为如果您有多个构建代理,或者在两个构建之间有一段时间,您根本不能依赖不是保存为仍然存在的工件的输出。

是的,TeamCity文档是令人困惑的:)

我在TeamCity中有一个非常相似的设置,除了我使用MSBuild而不是NAnt,但我使用相同的2步构建过程,如果我解释我是如何配置它的,那么希望它能让你理解你需要做什么。

所以在我的设置中,Build 1从源代码控制中提取代码,编译它并运行单元测试。然后,它将部署所需的所有文件作为构件发布。

构建2有一个快照对构建1的工件依赖,这意味着它不提取代码,它只是简单地从构建1获取工件并部署它们。

在实践中,这意味着我可以触发Build 2,然后发生两种情况之一。如果构建1是最新的,那么它只是部署构建1最后一次成功构建中的构件。然而,如果构建1不是最新的,那么TeamCity将自动触发构建1,然后使用该构建中的工件直接运行构建2。

最新更新