Jus*_*nP8 7 asp.net teamcity continuous-integration
我在一个项目中有2个构建配置:
我希望只有在构建和测试代码成功构建时才运行Deploy Code,因此我设置了快照依赖项.
快照依赖性是否意味着Deploy Code将检出与Build&Test Code相同的SVN修订版,然后针对该checkout运行NAnt脚本,该脚本不包含编译器生成的构建后文件?或者,部署代码中的构建和测试代码的快照依赖性是否意味着NAnt将针对构建代理上的构建和测试代码的构建后工作目录文件运行?
更新:
似乎我将快照依赖于Build and Test Code for Deploy Code并且我已经构建了Build&Test Code的最新版本,我的NAnt脚本将为构建和测试代码构建部署后期构建文件.
我仍然想确认我理解这个概念,因为我不太了解Team City文档.我想我应该确保Deploy Code在与构建和测试代码相同的构建代理上运行,否则我可能遇到Deploy Code检出SVN版本然后只部署预构建代码文件的情况.它是否正确?
我的困惑主要是因为您似乎必须为部署代码设置VCS.那是因为它需要将修订版号与快照依赖关系进行比较吗?
从Dependent Builds doco页面的Snapshot Dependency部分:
从构建配置A到构建配置B的快照依赖性强制执行A的每个构建都具有B的"合适"构建,以便两个构建使用相同的源快照(使用的源修订对应于同一时刻).
因此,快照依赖性的想法是,您可以针对与已成功运行它的另一个构建完全相同的代码库运行构建.
如果您希望"部署代码"构建仅在"构建和测试代码"成功运行之后运行,请在第二个构建中创建快照依赖关系,并确保将其设置为"仅使用来自合适构建的成功构建".
请记住,这与人工制品无关; 第二个构建将简单地拉出相同的代码库并重新编译它.如果要部署从第一个构建创建的人工制品,那么您希望查看artefact依赖项.这正是保罗在答案中所写的,也是正确的方法.
关于您的更新,听起来这些后期构建文件只有在第一次构建后仍然在构建代理上时才可用.尝试在代理上运行第一个构建然后"清理源"并运行第二个构建.您会发现原始编译输出不再存在,它将失败.这很重要,因为如果你有多个构建代理或者在两个构建之间花一些时间,你就不能依赖那些未保存为人工制品的输出.
是的,TeamCity文档令人困惑:)
我在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.建立.