【问题标题】:When using Team City snapshot dependencies, are you using the post build files of the snapshot or simply the SVN revision number?使用 Team City 快照依赖项时,您是使用快照的构建后文件还是仅使用 SVN 修订号?
【发布时间】:2015-02-17 02:50:45
【问题描述】:

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

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

我希望只有在构建和测试代码构建成功时才能运行部署代码,因此我设置了快照依赖项。

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

更新:

似乎如果我将快照依赖项放在 Build & Test Code for Deploy Code 并且我有 Build & Test Code 的最新版本的构建,我的 NAnt 脚本将为 Build &测试代码。

我仍然想确认我理解这个概念,因为我并不真正理解 Team City 文档。我想我可能应该确保 Deploy Code 在与 Build & Test Code 相同的构建代理上运行,否则我可能会遇到 Deploy Code 检查 SVN 修订版然后只部署预构建代码文件的情况。这是正确的吗?

我的困惑主要是因为您似乎必须为部署代码设置 VCS。那是因为它需要它来比较修订号和快照依赖项吗?

【问题讨论】:

    标签: asp.net continuous-integration teamcity


    【解决方案1】:

    来自Snapshot Dependency section of the Dependent Builds doco page

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

    因此,快照依赖项的想法是,您可以针对完全相同的代码库运行构建,而另一个构建已经成功地针对它运行。

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

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

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

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

    【讨论】:

    • 我想我应该提到,在您的文章系列之后,我在“构建和测试代码”配置的“部署代码”配置中有一个构建触发器。因此,它是由成功的构建触发的。在我的情况下,构建后文件仍然存在是有道理的,因为我们只有一个构建代理正在运行,并且“部署代码”应该在“构建和运行测试代码”之后很快运行,如果不是立即运行的话。我想我还是会切换到只保存工件,因为这似乎是更好的做法。
    • 适合打包吗?我有很多包裹。我的大多数项目都使用它们。我可以创建只收集所有包然后将其用作所有其他构建的快照依赖项的构建吗?
    【解决方案2】:

    我在 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构建。

    【讨论】:

    • 我以前见过这种设置,但我不认为工件依赖是必要的。我现在运行了一个概念证明,它运行一个依赖于构建/测试配置的 NAnt 复制脚本。到目前为止它似乎工作正常,我只是不确定是否存在不包含构建生成的 .dll 的情况。我想我只是很困惑为什么在构建时需要 VCS 配置,如果它没有检查任何东西,只是使用依赖项中的构建后文件。我猜这只是为了比较修订号。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-13
    • 1970-01-01
    • 2012-11-29
    • 2011-05-19
    • 1970-01-01
    • 2012-04-25
    相关资源
    最近更新 更多