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

时间:2011-10-27 20:20:06

标签: asp.net continuous-integration teamcity

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

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

我希望Deploy Code仅在Build& amp;测试代码构建成功,因此我设置了快照依赖项。

快照依赖性是否表示Deploy Code将检出与Build& amp;相同的SVN修订版。测试代码然后针对该checkout运行NAnt脚本,该脚本不包含编译器生成的构建后文件?或者,快照依赖于Build&部署代码中的测试代码意味着NAnt将针对Build&的构建后工作目录文件运行。构建代理上的测试代码?

更新:

似乎我将快照依赖于Build&部署代码测试代码,我有Build& amp;的最新版本。测试代码,我的NAnt脚本将部署Build&构建版本的构建后文件。测试代码。

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

我的困惑主要是因为您似乎必须为部署代码设置VCS。那是因为它需要将修订版号与快照依赖关系进行比较吗?

2 个答案:

答案 0 :(得分:7)

来自Snapshot Dependency section of the Dependent Builds doco page

  

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

因此,快照依赖性的想法是,您可以针对与其成功运行的另一个构建完全相同的代码库运行构建。

如果您希望“部署代码”构建仅在“构建和测试代码”成功运行后运行,请在第二个构建中创建快照依赖项,并确保将其设置为“仅使用来自合适构建的成功构建”

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

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

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

答案 1 :(得分:6)

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

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

Build 2在Build 1上有一个快照一个工件依赖项,这意味着它不提取任何代码,它只是简单地从Build 1获取工件并部署它们。

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