1

我试图弄清楚如何配置 TeamCity 构建步骤来完成以下任务:

  1. 调用控制台应用程序,将 dev 分支合并到测试分支(在 TFS 中)并手动修改测试分支中用于项目配置的一些文件。这个过程完美无缺并且已经过测试。另请注意,此步骤不会将合并的文件或修改的文件签入到测试分支。
  2. 此构建步骤将启动测试分支的实际解决方案构建。(这是 C#.NET,但我认为这并不重要)
  3. 此构建步骤处理添加的任何 SQL 脚本的数据库迁移。(此步骤也已经过测试并且有效)
  4. 此步骤调用另一个控制台应用程序。即使前面的步骤失败,此步骤也会运行。如果构建成功,它将签入步骤 1 中的未决更改,并进行构建部署。如果在上一步中构建失败,它将撤消步骤 1 中的未决更改。

这看起来很简单,但我不知道第 1 步和第 2 步之间的交互。如果我在步骤 2 中使用服务器端签出,它将从服务器中提取源代码,而不使用我在步骤 1 中的更改。如果我在用户代理端签出,我的理解是它将创建一个新工作区并从中提取源代码服务器,再次不使用我在步骤 1 中的更改。

有没有办法可以使用在步骤 1 中创建的未决更改进行步骤 2 构建?我能想到的唯一其他选择是在步骤 1 之后签入更改,如果构建失败,则在步骤 4 中回滚更改集。但是,在那种情况下,第 4 步如何知道要回滚的变更集?


我还有一个小问题,如何将构建成功作为参数传递给第 4 步?我查看了内置参数,但没有一个用于构建失败/成功的参数?

谢谢!

4

1 回答 1

1

如果您可以提供您正在使用的 VCS 名称(Git/SVN),这将很有用。我看你的问题主要是2个要点

  • 如果您使用Teamcity 构建步骤,其中所有构建步骤都是单个目标的一部分,您不必担心步骤 1 和步骤 2 之间的交互。所有步骤都可以在同一个目录中运行。在整个子步骤中,您始终保留您的工作副本状态。
  • teamcity 的唯一故障是“只有在上一步失败时”才能运行构建/步骤。为了解决这个问题,您可以
    在前面的任何步骤中创建一个失败文件,并仅在该文件存在时运行构建。在每次构建结束时删除文件,以确保在下一次构建中没有意外问题。

因此,简而言之,您的构建步骤可以(1)签出一个分支,(2)将另一个分支合并到其中,(3)运行构建和数据库部署,然后(4)提交您的代码/如果它失败则回滚您的数据库更改在故障文件上。

对于您的第二个问题,每个 teamcity 步骤都知道整个构建的成功状态以及此处提到的先前步骤。唯一缺少的步骤是“如果上一步失败则运行步骤”

于 2014-07-23T00:45:10.947 回答